Object
getClass():
- 获取某个对象的’类对象’
- 类加载的产物----类对象
- 比较两个对象是否属于同一对象
if(obj1.getClass() == obj2.getClass()){
…
}
equals(Object obj):
- 作用:比较两个对象的内容是否相等
- 但Object类自带的equals默认比较的是地址
hashCode():
- 通过hash算法,计算对象的哈希值
toString():
- 以字符串的形式表示对象
clone():
- 克隆对象
finalize():
- 当对象成为垃圾,被GC(垃圾回收机制)回收的时候,自动调用
Objects
- 操作对象的工具类
- 工具类中的方法都是static修饰符
equals(a,b):
- 比较a和b两个对象的内容是否相等
hash(Object… values):
- 同时计算多个对象的hash值,并返回最终的结果
toString(obj):
- 以字符串的形式显示对象
compare(a,b):
- 比较a和b的大小
isNull(obj)
- 判断对象是否为空
nonNull(obj)
- 判断对象是否不为空
方法重载
- 在同一个类中,允许出现多个相同的方法名,这种现象叫做方法重载
- 方法的重载 必须满足的条件
- 方法名必须相同
- 参数列表不同(个数不同或者类型不同)
方法重写(Ctrl+O)
- 在子类中,使用父类的方法,且父类提供的方法不满足子类的需求,子类重新对父类中的方法进行定义
- 方法重写需满足条件
- 方法的权限修饰符和父类保持相同 或者 比父类的权限更高
- 方法的返回值、方法名、参数列表必须和父类保持完全相同
- 方法抛出的异常 和父类保持相同或者比父类抛出的异常更窄
重写equals方法
1.先比较两个对象的地址值,地址值相等,则代表对象内容相同
2.如果传入的对象为null,则不作比较
3.如果地址值不相同,则比较两个对象是否属于同一个类getClass()
4.将Object类强制转换为当前类型
public boolean equals(Object obj){
//先比较两个对象的地址值,地址值相等,则代表对象内容相同
if (this == obj) return true;
//如果传入的对象为空,则不比较
if (obj == null) return false;
//如果地址不相同,则比较两个对象是否是同一类
if (this.getClass() != obj.getClass()) return false;
//将Object类强转为当前类型
Teacher t = (Teacher) obj;
if (id == 0) return false;
if (id == t.id){
return true;
}
return false;
}
Lombok代码生成器
Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产生干净,简洁且易于维护的Java类。
- 常用注解
- @Setter :注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法。
- @Getter :使用方法同上,区别在于生成的是getter方法。
- @ToString :注解在类,添加toString方法。
- @EqualsAndHashCode: 注解在类,生成hashCode和equals方法。
- @NoArgsConstructor: 注解在类,生成无参的构造方法。
- @RequiredArgsConstructor: 注解在类,为类中需要特殊处理的字段生成构造方法,比如final和被@NonNull注解的字段
- @AllArgsConstructor: 注解在类,生成包含类中所有字段的构造方法。
- @Data: 注解在类,生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。
- @Slf4j: 注解在类,生成log变量,严格意义来说是常量。
null引用调方法的问题
如果一个引用指向null,调用静态方法不会产生空指针异常
但不能直接使用null调用静态方法
String s = null;
System.out.println(s.valueOf(s));
System.out.println(null.valueOf(s));//报错
final修饰符
-
final修饰的常量,名字要求全大写,多个单词采用蛇形命名法(_分割)
-
final修饰的属性必须赋初值
- 定义属性的时候赋值
- 通过构造方法为属性赋初值
- 代码块
-
final修饰属性,代表是一个常量,一旦赋值,值不可改变
- 如果是基本数据类型,则代表数值不可更改
- 如果是引用数据类型,则代表地址不可更改,但可以更改地址中对应的数据
//基本数据类型
public static final int MONDAY = 1;
public static final int TUESDAY = 2;
public static final int WENSDAY = 3;
public static final int THURSDAY = 4;
//引用数据类型
public static final int[] ARRAY = {MONDAY,TUESDAY,WENSDAY,THURSDAY};
public static void main(String[] args) {
Week.ARRAY[2]=10;
System.out.println(Arrays.toString(Week.ARRAY));
}