什么样的方法应该用static修饰?
static修饰的方法属于类本身,而不是类的实例。通常适用于以下几种情况:
比如Java中的Math类,用于创建对象的静态方法。
不用static修饰的方法往往具有什么特?
非static修饰的方法,也称为实例方法,它们与类的实例紧密相关。特性如下:
依赖实例状态:实例方法可以访问和修改实例的属性(非static修饰的成员变量),其行为和结果往往取决于实例当前的状态。例如,一个Person类有一个age属性和一个introduce()实例方法,introduce()方法可能会输出包含当前age值的自我介绍,不同的Person实例调用该方法,输出可能不同,因为每个实例的age值可能不一样。通过实例调用:必须先创建类的实例,然后通过实例来调用实例方法。比如Person p = new Person(); p.introduce();,不能直接通过类名调用实例方法。
Student的getName应该用static修饰吗?
一般情况下,Student类的getName()方法不应该用static修饰。因为getName()方法通常是用于获取某个具体学生实例的姓名,姓名是学生实例的一个属性,不同学生实例有不同的姓名,它是依赖于实例状态的。如果将getName()方法用static修饰,那么它就无法访问实例的name属性(假设name是实例变量),也就无法准确获取某个具体学生的姓名了。
购物车案例中,使用了什么方法将问题描述中的类、方法、属性找出来?
在购物车案例中,我们可以通过以下几种方式找出问题描述中的类、方法和属性:
名词提炼法:对于问题描述中的名词,很多时候可以抽象为类。比如“购物车”,很明显可以作为一个类,它代表了一个容器,用于存放商品等相关信息。再比如“商品”,也可以作为一个类,具有名称、价格、库存等属性。
动词提炼法:动词通常可以抽象为方法。例如“添加商品”“删除商品”“计算总价”等动作,分别可以对应购物车类中的addProduct()、removeProduct()、calculateTotalPrice()等方法。
分析实体特征:对于实体所具有的特征,可以抽象为属性。以商品为例,它的名称、价格、品牌等特征可以作为商品的属性。
方法与属性到底属于哪个类,要怎么判定呢?
名词对应类,动词对应方法。
一个项目中有很多类。怎样才能避免你项目中的类与别人编写的类同名呢?
Java中的包可以将类进行分组管理。我们可以为自己项目中的类定义独特的包名;按照一定的命名规范来命名类,使类名具有描述性和唯一性。
项目中类各种各样要怎么管理这些代码呢?举例说明
可以按照功能模块来管理类;
以一个电商项目为例:
用户模块:将所有与用户相关的类放在一个包下,如com.ecommerce.user。这个包下可以有User类(表示用户实体,包含用户名、密码等属性和相关方法)、UserRegistration类(用于处理用户注册逻辑)、UserLogin类(处理用户登录逻辑)等。
商品模块:com.ecommerce.product包下存放Product类(商品实体类)、ProductCategory类(商品分类类)、ProductService类(用于处理商品的业务逻辑,如查询、添加商品等)。
购物车模块:com.ecommerce.cart包下有Cart类(购物车类)、CartItem类(购物车项类,表示购物车中的单个商品项)等。
通过这样的包结构和类的组织方式,使得项目中的类层次清晰,易于管理和维护。
阅读《阿里巴巴Java开发手册 终极版(1.3.0)》,写出至少7条Java编程规范。应包含如下几个方面:
变量命名、类命名、方法命名、常量命名、包命名、代码格式、OOP规约。
1,变量命名
成员变量:采用小写字母开头的驼峰命名法,如userName,清晰地表示变量的用途。
局部变量:同样使用小写字母开头的驼峰命名法,如count,用于在方法内部临时存储数据。
静态变量:采用大写字母加下划线的方式命名,如MAX_COUNT,突出其静态属性和全局性。
2,类命名
使用大写字母开头的驼峰命名法,且类名应是名词或名词短语,准确反映类的职责。例如OrderService类表示处理订单相关服务的类,ProductRepository类表示用于存储和检索产品数据的类。
3,方法命名
采用小写字母开头的驼峰命名法,方法名应是动词或动词短语,表明方法的操作行为。如getUserInfo()表示获取用户信息的方法,calculateDiscount()表示计算折扣的方法
4,常量命名
全部使用大写字母加下划线的方式命名,如PI_VALUE,用于表示固定不变的值。
5,包命名
采用小写字母的域名倒序方式,如com.example.project,确保包名的唯一性和可识别性。
6,代码格式
缩进:使用4个空格进行缩进,不使用制表符,保证代码在不同编辑器下显示一致。
换行:每行代码长度尽量不超过120个字符,当一行代码过长时,合理进行换行,增强代码的可读性。
花括号:左花括号{与语句在同一行,右花括号}单独占一行
7,OOP规约
避免使用过重的继承关系:优先使用组合而非继承来实现代码复用,减少类之间的耦合度。例如,一个汽车类,可以通过组合发动机、轮胎等部件类来实现功能,而不是让汽车类继承发动机类等。
重写方法时,子类方法访问权限不能低于父类:如果父类的某个方法是public的,子类重写该方法时也必须是public的,以保证多态性的正确实现。
使用final修饰不可变的类和方法:对于一些不应该被继承或重写的类和方法,使用final修饰,如String类就是final修饰的,保证了字符串的不可变性。