Java面向对象22:Class Object

Class Object

  • to String()方法
    • to String()方法源代码
      public String toString() {
       	return getClass().getName() + "@" + Integer.toHexString(hashCode());
      	//类名@对象的内存地址转换为十六进制的形式
      }
      
    • to String()方法的设计目的:通过调用这个方法可以将一个“Java对象”转换为“字符串表示形式 ”
    • 建议所有的子类都去重写to String()方法,to String()方法应该是一个简洁的、详实的、易阅读的
    • System.out.println(引用类型),这里会自动调用“引用”的toString()方法
    public class Test01 {
       public static void main(String[] args) {
           System.out.println(new MyTime(2021,04,02).toString());
           System.out.println(new MyTime(2021,04,02));
           // 注意:输出引用的时候,会自动调用该引用的toString()方法。
       }
    }
    
    class MyTime /*默认继承Object*/ {
       private int year;
       private int month;
       private int day;
       
       //老祖宗的toString()方法默认为类名@对象的内存地址转换为十六进制的形式
       //建议每个子类都重写toString()方法,向简洁的、详实的、易阅读的方向发展
       public String toString() {
           return year + "/" + month + "/" + day;
       }
    
       //构造方法
       public MyTime() {
       }
    
       public MyTime(int year, int month, int day) {
           this.year = year;
           this.month = month;
           this.day = day;
       }
    
       //getter and setter 方法
       
    }
    
  • equals 方法
    • to String()方法源代码
      public boolean equals(Object obj) {
       	return (this == obj) ;
      }
      //以上这个方法是Object类的默认实现,==比较的是两个对象的内存地址是否相等,并不能比较内容是否相等
      
    • equals方法的设计目的:通过equals方法来判断两个对象是否相等
    • 建议所有的子类都去重写 equals方法,因Object中的equals方法比较的是两个对象的内存地址,我们应该比较内容,所以需要重写
    • java中基本数据类型比较是否相等,使用 == 比较是否相等
      java中引用数据类型比较是否相等,使用 equals 方法比较是否相等
    public class Test01 {
        public static void main(String[] args) {
            //toString测试
            System.out.println(new MyTime1(2001, 1, 1 ));
            //equals测试
            MyTime1 time1 = new MyTime1(1997, 4, 2);
            MyTime1 time2 = new MyTime1(1997, 4, 2);
            System.out.println(time1 == time2);
            System.out.println(time1.equals(time2));
        }
    }
    
    class MyTime1 /*默认继承Object*/{
        private int year;
        private int month;
        private int day;
    	
    	//重写equals方法
        public boolean equals(Object obj) {
            // 空引用和非MyTime1类型,不可能相等,直接排除
            if (obj == null || !(obj instanceof MyTime1)) {
                return false;
            }
            // 当类型一样时,判断内存地址是否相等,相等则为同一个对象,内容相等
            if (this == obj) {
                return true;
            }
            //判断内容是否相等
            return this.year == ((MyTime1) obj).year && this.month == ((MyTime1) obj).month && this.day == ((MyTime1) obj).day;
        }
    
    	//重写toString()方法
        public String toString() {
            return year + "/" + month + "/" + day;
        }
    	//构造方法
        public MyTime1() {
        }
    
        public MyTime1(int year, int month, int day) {
            this.year = year;
            this.month = month;
            this.day = day;
        }
    
        //getter and setter 方法
    
  • finalize()方法
    • finalize()方法源代码
      protected void finalize() throws Throwable { }
      //GC:负责调用finalize()方法。
      //finalize()方法只有一个方法体,里面没有代码,而且这个方法是protected修饰的。
      //这个方法不需要程序员手动调用,JVM的垃圾回收器负责调用这个方法,finalize()只需重写,重写完将来自动会有程序来调用
      
    • finalize()方法的执行时机:当一个java对象即将被垃圾回收器回收时,垃圾回收器负责调用finalize()方法
    • finalize()方法实际上是SUN公司为java程序员准备的一个时机,垃圾销毁时机。
      如果希望在对象销毁时机执行一段代码的话,这段代码要写到finalize()方法当中。
    • 静态代码块在类加载时刻执行,并且只执行一次。这是一个SUN准备的类加载时机
      finalize()方法同样也是SUN为程序员准备的一个时机。这个时机是垃圾回收时机
    • 提示:
      ——java中垃圾回收器不轻易启动。垃圾太少,或者时间没到,种种条件下,可能不启动(随缘启动)
  • hashCode()方法
    • hashCode方法源代码
      public native int hashCode();
      //这个方法不是抽象方法,带有native关键字,底层调用C++程序
      
    • hashCode()方法返回的是哈希码:
      ——实际上就是一个java对象的内存地址,经过哈希算法,得出的一个值
      ——所以hashCode()方法的执行结果可以等同看做一个java对象的内存地址
  • clone方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值