java学习初探6之Object类

来源:互联网 发布:怎么申请软件著作权 编辑:程序博客网 时间:2024/05/20 02:54

1.Object类
toString

package since;/* * Object中toString方法 *      返回该对象的字符串表示。 *  * 在现实开发中,Object中toString方法不够用,因为Object的toString的实现结果不满意。 *  * Object中的toString方法就要被重写的。 *  * SUN是这样实现toString方法的: * public String toString() {        return getClass().getName() + "@" + Integer.toHexString(hashCode());    } * 类名@java对象的内存地址经过哈希算法得出的int类型值再转换成十六进制 *       */public class Test01 {    public static void main(String[] args) {        Object object=new Object();        String o=object.toString();        System.out.println(o);//java.lang.Object@15db9742        Person person=new Person("张三",40);        System.out.println(person.toString());//Person[name=张三,age=40]        //print方法后面括号中如果是一个引用类型,默认调用引用类型的toString方法        System.out.println(person);//Person[name=张三,age=40]    }} class Person{     String name;     int age;     public Person(String name,int age) {         this.name=name;         this.age=age;        // TODO Auto-generated constructor stub    }     //重写toString,根据项目需求而定     //显示格式:Person[name=刘德华,age=50]     public String toString(){         return "Person[name="+name+",age="+age+"]";     } }

equals

package since;/* * 关于Object中equals方法实现方法 *  * public boolean equals(Object obj) {        return (this == obj);    }    o1.equals(o2); o1是this,o2是obj    ==两边如果是引用类型,则比较内存地址,地址相同是true,不同为false */public class Test02 {    public static void main(String[] args) {        Object o1=new Object();        Object o2=new Object();        boolean test=o1.equals(o2);        System.out.println(test);//false        Star s1=new Star(1000, "章子怡");        Star s2=new Star(1000, "章子怡");        System.out.println(s1.equals(s2));//true    }}class Star{    int id;//身份证号    String name;//姓名    public Star(int id,String name) {    this.id=id;    this.name=name;}        //Object中的equals方法比较的是内存地址,        //在现实业务逻辑中,不应该比较内存地址,应该比较内容        //重写equals        //根据需求规定重写,如果身份证号和名字都一致,是同一个人        public boolean equals(Object object){            if(object instanceof Star){            Star s=(Star)object;            if(this.id==s.id&&this.name.equals(s.name)){//这里字符串equals,sun重写过,用来比较字符串内容是否相等                return true;            }else {                return false;            }            }else {                return false;            }           }}

finalize
垃圾回收器(GC)

package since;/* finalize方法什么时候调用?    1.finalize方法每个java对象都有    2.finalize方法不需要程序员去调用,由系统自动调用    3.java对象如果没有更多引用指向它,则该对象成为垃圾数据,    等待垃圾回收器的回收,垃圾回收器在回收这个java对象之前会自动    调用该对象的finalize方法。 finalize方法是该对象马上就要被回收了,例如:需要释放资源,则可以在该方法中释放。 */public class Test04 {    public static void main(String[] args) {        People p1=new People();        p1=null;//没有引用再指向它,等待回收        //程序员只能“建议”垃圾回收器回收垃圾        System.gc();    }}class People{    //重写finalize方法    protected void finalize() throws Throwable {         System.out.println(this+"马上就要被回收了");         //让引用再次重新指向该对象,该对象不是垃圾,不会被垃圾回收器回收         People p=this;    }}

hashCode()

package since;/*  hashCode方法: *  public native int hashCode(); *  其中native与底层(动态链接库)c++关联,其实上述方法是有方法实体的,更不是抽象方法 */public class Test05 {public static void main(String[] args) {    //返回的是该对象的哈希码值    //java对象的内存地址经过哈希算法得到的int类型的数值    Test05 test05=new Test05();    System.out.println(test05.hashCode());//366712642}}
原创粉丝点击