第十六节(Object类(toString() 、finalize、equals方法)

Object 类类

a) Object 类是所有 Java 类的根基类

b) 如果在类的声明中未使用 extends 关键字指明其基类,则默认基类为 Object 类

toString()

返回该对象的字符串表示。 通常 toString 方法会返回一个 “以文本方式表示” 此对象的

字符串,Object 类的 toString 方法返回一个字符串,该字符串由类名加标记 @和此对象哈

希码的无符号十六进制表示组成

/*
    关于Object 中的 toString 方法:

        sun在Object类中设计toString方法的目的:返回java对象的字符串的表示形式

    在现实开发中,Object里边的toString 方法已经不够用了
    Object的toString方法实现的结果 不满意

    Object中的toString方法就是要重写的

    sun是这样子实现toString方法的

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

    Object中的toString方法返回: 类名@Java对象的内存地址经过哈希算法得出的int类型值
    再转换成十六进制

    这个输出结果可以等同看做Java对象在堆中的内存地址

*/

public class ObjectTest01{

    public static void main(String[] args){

        // 创建一个Object类型的对象
        Object o1= new Object();

        System.out.println(o1); // [email protected]

        // 调用一个toString方法
        String oStr = o1.toString();

        System.out.println(oStr); // [email protected]

        // 创建一个Person类型的对象
        Person p1 = new Person("Ming",18);

        // 调用toString方法
        String pStr = p1.toString();

        System.out.println("p1 = "+p1.toString());
    }

}

class Person{

    String name;
    int age;

    // Person(){} 默认的空构造

    Person(String name,int age){
        this.name = name;
        this.age = age;
    }

    // 重写toString方法
    // 根据项目的需求而定
    //  需要显示格式:Person[name=Mingage=18]
    public String toString(){
        return "Person[name="+name+",age="+age+"]";
    }

}
finalize

垃圾回收器(Garbage Collection) ,也叫 GC,垃圾回收器主要有以下特点:

? 当对象不再被程序使用时,垃圾回收器将会将其回收

? 垃圾回收是在后台运行的, 我们无法命令垃圾回收器马上回收资源, 但是我们可以

告诉他,尽快回收资源(System.gc 和 Runtime.getRuntime().gc())

? 垃圾回收器在回收某个对象的时候,首先会调用该对象的 finalize 方法

? GC 主要针对堆内存

? 单例模式的缺点
/*
    关于Object中的finalize方法

        finalize 方法什么时候调用
            1. finalize 方法每一个Java对象都有
            2. finalize 方法不需要程序员去调用,有系统自动调用
            3. Java对象如果没有更多的引用指向它,则该Java对象称为 垃圾数据
            等待垃圾回收器回收,垃圾回收器在回收这个Java对象之前 会自动调用该对象的 finalize方法

        finalize 方法是该对象马上就要被回收了,例如:需要释放资源,则可以在该方法中释放

*/

public class FinalizeTest01{

    public static void  main(String[] args){

        People p = new People();

        // 没有引用再指向他,等待回收
        p = null;

        // 开发者只能”建议“垃圾回收器回收垃圾
        System.gc();

    }

}

class People{

    public void finalize() throws Throwable{

        System.out.println(this+"马上就要被回收了 !");

        // 让引用再次重新指向该对象,该对象不是垃圾数据,不会被垃圾回收器回收 !
        People p = this;

    }

}
/*
    关于Object中的equals方法

        public boolean equals(Object obj){
            return (this == obj);
        }

    Object中的equals方法比较的是两个引用的内存地址 

    Java对象中的equals方法的设计目的: 判断两个对象是否一样

*/

public class EqualsTest{

    public static void main(String[] args){

        Object o1 = new Object();
        Object o2 = new Object();
        boolean b1 = o1.equals(o2);
        System.out.println(b1);
    }

}
时间: 2024-08-18 22:16:42

第十六节(Object类(toString() 、finalize、equals方法)的相关文章

问题1、java.lang中String类和Object类中的equals方法比较

String类中的equals方法重写了Object类中的equals方法,下面通过代码来比较二者的不同之处: 一.String类 1. String s1 = "String"; String s2 = "String"; System.out.println(s1 == s2 ); System.out.println(s1.equals(s2));

Object 类中的 equals方法

1 相等与同一 如果两个对象具有相同的类型以及相同的属性值,则称这两个对象相等.如果两个引用对象指的是同一个对像,则称这两个变量同一.Object类中定义的equals 函数原型为:public boolean equals(Object);他是判断两个对象是否同一,并不是是否相等. 2 equals方法 由于Object 类是所有类的最高基类,所有其他类都继承类Object类的equals()方法,定义原型如下: public boolean equals (Object x){ return

JAVA中Object类中的equals方法补充

Object类中的equals方法: 无论new多少个对象,当使用 "= =" 来判断的时候,是判断内存地址.判断回事false 若是需要进行对象之间的判断,则需要重写equals方法: public boolean equals(Object obj)//obj是传入的形式参数(对象) { if (obj == null)//判断对象是否为空 { return false;//空则返回false } else { if ( obj instanceof cat)//判断这个传入参数(

重写object类中的equals方法

package equalsdemo; /* * 重写object中的equals方法 */ public class equalsdemo { public static void main(String[] args) { person p1 = new person("zhangsan",54); person p2 = new person("zhangsan",54); if (p1.equals(p2)) { System.out.println(&qu

【WPF学习】第二十六章 Application类——应用程序的生命周期

原文:[WPF学习]第二十六章 Application类--应用程序的生命周期 在WPF中,应用程序会经历简单的生命周期.在应用程序启动后,将立即创建应用程序对象,在应用程序运行时触发各种应用程序事件,你可以选择监视其中的某些事件.最后,当释放应用程序对象时,应用程序将结束. 一.创建Application对象 使用Application类的最简单方式是手动创建它.下面的示例演示了最小的程序:在应用程序入口(Main()方法)处创建名为MainWindow的窗口,并启动一个新的应用程序: 在本质

第三百一十六节,Django框架,中间件

第三百一十六节,Django框架,中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项目的settings模块中,有一个 MIDDLEWARE变量,其中每一个元素就是一个中间件(也就是一个中间件模块的一个类),如下. settings模块中 #中间件 MIDDLEWARE = [ 'django.middleware.security.Securit

第一百二十六节,JavaScript,XPath操作xml节点

第一百二十六节,JavaScript,XPath操作xml节点 学习要点: 1.IE中的XPath 2.W3C中的XPath 3.XPath跨浏览器兼容 XPath是一种节点查找手段,对比之前使用标准DOM去查找XML中的节点方式,大大降低了查找难度,方便开发者使用.但是,DOM3级以前的标准并没有就XPath做出规范:直到DOM3在首次推荐到标准规范行列.大部分浏览器实现了这个标准,IE则以自己的方式实现了XPath. 一.IE中的XPath 在IE8及之前的浏览器,XPath是采用内置基于A

centos mysql 优化 第十六节课

centos mysql  优化  第十六节课 f

object 类 toString() 和 equals() 的覆写

基本作用: objiect类是所有类的父类. 任何一个类定义的时候如果没有明确定义了父类的话,默认父类是Object类. class A extends Object{} 在整个java里面,类的继承关系一直存在的.例如: String 类 这时候一个好处就出现了,利用Object类可以接受一切类. Object obj = new Book() ://向上转型 Obect obj = “Hello”  : //向上转型 如果不知道参数类型的时候,使用Object是最好的选择 http://do