欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > > 文章正文

java学习初探6之Object类,java学习初探object

来源: javaer 分享于  点击 19632 次 点评:66

java学习初探6之Object类,java学习初探object


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
}
}

相关文章

    暂无相关文章

用户点评