文章目录
- 1、文件名与类名
- 2、类中的实例字段
- 3、构造器
- 4、使用null引用
- 5、字段封装
- 参考
1、文件名与类名
- 源文件名必须与public类名相匹配。在一个源文件中,只能有一个公共类,但可有任意数目的非公共类。
如上,源文件名为EmployeeTest.java,里面有两个类(EmployeeTest、Employee),public类名与源文件名匹配。
编译这段代码时,编译器会在目录下创建两个类文件:EmployeeTest.class,Employee.class。
2、类中的实例字段
- 类中的实例字段尽量使用private标记,若使用public就破坏了其封装性。
如上图中的,name\salary\hireDay。要访问他们,会在类中写相关的字段访问器。
3、构造器
- 构造器
1、构造器与类同名;
2、每个类可以有一个以上的构造器;
3、构造器可以有0、1或多个参数;
4、构造器没有返回值;
5、构造器总是伴随着new操作符一起调用。
4、使用null引用
- 一个对象包含一个对象的引用,定义一个类时,最好清楚地知道哪些字段可能为null。否则可能出现NullPointerException异常。
- 两种解决方法:
一是宽容型,把null参数转换为一个适当的非null值;
if(n == null) name = “unknown”; else name = n;
Java9中,Objects类提供Objects.requireNonNullElse(n, “unknown”);方法
二是严格型,拒绝null参数,Objects.requireNonNull(n, “The name cannot be null”);
5、字段封装
- 获取或者设置实例字段的值,需提供三项内容:
一个私有的数据字段;
一个公共的字段访问器方法;
一个公共的字段更改器方法;
class Employee
{
private Date hireDay;
public Date getHireDay()
{
return (Date)hireDay.clone();
}
public void setHireDay()
{
...
}
}
- 警告:不要编写返回可变对象引用的访问器方法!!!
因为这会破坏其封装性。
若上面一段代码是return hireDay;那么返回的是一个引用对象中的一个私有对象,本来我们只能调用setHireDay()去改变对象的hireDay的值,但是现在返回的是这个对象,那么我可以在外部对这个对象做修改,就改变了其私有状态。如下图,d就是返回的私有对象,直接指向了引用对象的私有字段。
所以,如果需要返回一个可变数据字段的副本,应该对它进行克隆。
参考
《Java核心技术 卷Ⅰ》