11.Object、方法重写、final

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));
    	}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值