1.3 课前问题列表
目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、什么样的方法应该用static修饰?不用static修饰的方法往往具有什么特性?Student的getName应该用static修饰吗?
(1)用static修饰的方法
不依赖于对象实例的方法:如果方法的功能不依赖于对象的状态,那么它就可以是static的。这样的方法通常用于执行一些工具性或者辅助性的操作。
实用工具方法:比如数学计算、字符串处理、文件操作等,这些通常不依赖于对象状态,而是接受参数并返回结果。
访问静态变量:如果方法需要访问或修改静态变量,则该方法也应该是static的。
工厂方法:创建类的实例的方法有时也被设计为static,尤其是当创建过程复杂或者需要特别处理时。
(2)不用static修饰的方法往往具有的特性
依赖于对象状态:非static方法能够访问和修改对象的状态。
多态性:非static方法支持多态性,即子类可以覆盖父类的方法,并提供特定于子类的实现。
对象间交互:非static方法允许对象之间的交互,因为你可以通过方法参数传递对象,并在方法内部使用这些对象。
(3)Student的getName应该用static修饰吗?
Student类的getName方法不应该用static修饰,因为getName方法很可能是用来获取某个具体学生的名字的,而学生的名字是依赖于特定学生实例的。
例如:
public class Student
{
private String name;
public Student(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
}
二、购物车案例中,使用了什么方法将问题描述中的类、方法、属性找出来?方法与属性到底属于哪个类,要怎么判定呢?
1.先分析需求、再确定类
2.判定:
属性:通常根据它们所描述的实体或对象来判定。例如,价格(price)是描述商品的,所以它应该属于Product类。
方法:方法应该根据它们所执行的操作与哪个类最相关来判定。例如,计算总价(getTotalPrice)是购物车的一个功能,所以它应该属于Cart类。
三、一个项目中有很多类。怎样才能避免你项目中的类与别人编写的类同名呢?项目中类各种各样要怎么管理这些代码呢?举例说明。
1. 使用命名空间:对于支持命名空间的编程语言,使用命名空间是避免类名冲突的有效方法。
2. 遵循命名约定:使用大写字母开头的驼峰命名法来命名类,小写字母开头的驼峰命名法来命名局部变量等。
3. 使用包/模块
4. 使用代码审查和依赖管理工具
代码审查:通过代码审查可以确保新的代码不会无意中引入与现有代码或外部库中的类名冲突的情况。
依赖管理工具:这些工具可以帮助你管理项目的依赖,包括第三方库。通过仔细选择依赖项并了解它们的内容,可以避免引入与你的代码冲突的类。
5. 编写清晰的文档
四、阅读《阿里巴巴Java开发手册 终极版(1.3.0)》,写出至少7条Java编程规范。应包含如下几个方面:
变量命名、类命名、方法命名、常量命名、包命名、代码格式、OOP规约。
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
1. 变量命名
规则:变量名应使用有意义的英文单词、词组或缩写,避免使用拼音或无关单词的字母组合。
示例:表示用户姓名的变量应命名为userName而非xingMing或un。
2. 类命名
规则:类名使用大驼峰命名法,即每个单词的首字母大写,不使用下划线。
示例:表示用户信息的类应命名为UserInfo而非user_info或userInfo_。
3. 方法命名
规则:方法名采用小驼峰命名法,即第一个单词的首字母小写,之后每个单词的首字母大写。
示例:用于获取用户年龄的方法应命名为getUserAge而非get_user_age或GetUserAge。
4. 常量命名
规则:常量名全部大写,单词之间用下划线(_)分隔。
示例:表示最大连接数的常量应命名为MAX_CONNECTIONS而非maxConnections或MAXCONNECTIONS。
5. 包命名
规则:包名全部小写,使用点(.)分隔,倒序域名表示法,以提高可读性和唯一性。
示例:一个属于com.alibaba.myproject组织的包应命名为com.alibaba.myproject.module。
6. 代码格式
规则:大括号风格统一,如果是大括号内为空,也写成{}形式,避免省略。
7. OOP规约
规则:尽量使用接口编程,避免直接通过new来实例化对象。
示例:定义一个UserService接口,然后通过Spring框架的依赖注入来获取UserService的实现类实例,而不是在代码中直接通过new UserServiceImpl()来创建对象。