一、什么样的方法应该用static修饰?不用static修饰的方法往往具有什么特性?Student的getName应该用static修饰吗?
-
static 修饰方法的适用场景
-
应该用 static 修饰的方法:
-
方法与对象的状态无关,只依赖传入的参数完成功能(如 Math.sqrt() )。
-
工具类方法(如 Arrays.sort() )。
-
工厂方法(创建对象但不依赖实例状态)。
-
不用 static 修饰的方法:
-
依赖对象的实例变量(必须先创建对象才能调用)。
-
方法行为与对象状态紧密相关。
-
Student 的 getName():
-
不应该用 static,因为每个学生的名字是实例属性,需要针对具体对象调用。
二、购物车案例中,使用了什么方法将问题描述中的类、方法、属性找出来?方法与属性到底属于哪个类,要怎么判定呢?
购物车案例的类/方法/属性分析方法
- 找出类、方法、属性的方法:
1. 先从需求中识别名词 → 可能是类(如 ShoppingCart , Product , User )。
2. 识别动词 → 可能是方法(如 addProduct , removeProduct , getTotalPrice )。
3. 名词的特征 → 可能是属性(如 productId , name , price , quantity )。
-
判定归属:
-
属性属于哪个类:看这个数据是描述哪个实体的状态。
-
方法属于哪个类:看这个操作是哪个实体的行为。
例如: addProduct 是购物车的行为 → 放在 ShoppingCart 类中; price 是商品的特征 → 放在 Product 类中。
三、一个项目中有很多类。怎样才能避免你项目中的类与别人编写的类同名呢?项目中类各种各样要怎么管理这些代码呢?举例说明。
避免类名冲突 & 代码管理
-
避免同名:使用包(package)机制,不同包可以有同名类。
例如: com.mycompany.user.User 和 com.othercompany.user.User 是两个完全不同的类。 -
管理代码:
-
按功能模块划分包(如 com.company.shop.cart , com.company.shop.product )。
-
大型项目可用 Maven/Gradle 做多模块管理。
-
使用版本控制(Git)管理代码。
-
举例:
com.company.project.model // 存放实体类
com.company.project.service // 存放业务逻辑
com.company.project.dao // 存放数据访问
com.company.project.util // 存放工具类
四、 Java编程规范
变量命名
-
采用驼峰命名法(camelCase),首字母小写。
-
成员变量、局部变量避免使用 _ 或 $ 开头。
类命名
-
采用 Pascal 命名法(PascalCase),首字母大写。
-
类名应体现业务含义,避免无意义的 Base , Util 等泛称。
方法命名
-
采用驼峰命名法(camelCase)。
-
方法名应是动词或动词短语(如 getUser , calculatePrice )。
常量命名
-
全部大写,用下划线分隔(UPPER_SNAKE_CASE)。
-
例如: MAX_COUNT , ORDER_STATUS_PAID 。
包命名
-
全小写,用点分隔,通常是公司域名倒写。
-
例如: com.alibaba.fastjson 。
代码格式
-
缩进用 4 个空格,禁止用 Tab。
-
if/for/while 等语句块必须加花括号,即使只有一行。
OOP 规约
-
避免在构造方法中调用可被重写的方法。
-
重写方法时,必须加 @Override 注解。
-
成员变量私有化(private),通过 getter/setter 访问。