Object类

来源:互联网 发布:淘宝产品标题怎么写 编辑:程序博客网 时间:2024/06/03 13:58
/* * 类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。 *  * Object() 空参构造方法,因为所有的子类都会默认调用父类的空参构造方法 *  * OOP面向对象思想:封装,继承,多态 *  是根据现实生活中的事物封装得来的,封装,继承,多态是模拟现实生活中的关系 * 面向对象编程:Think in java(万物皆对象) *  任何一类事物都可以封装成一个类,每一个具体的事物可以用一个对象表示 * 怎么封装一个类? *  描述(属性,成员变量):name,age,sex,address,phoneNumber... *  功能(函数,成员方法):eat,sleep,playGame,say... * 创建对象: *  类名 对象名 = new 类名(可能有参数); *  对象名.成员 */public class ObjectDemo {    public static void main(String[] args) throws Exception {        // public int hashCode()返回该对象的哈希码值,默认的hashCode计算方式是根据地址值计算得来的        Person p = new Person();        Person p2 = new Person();        System.out.println(p==p2);//false        System.out.println(p.hashCode());//366712642        System.out.println(p2.hashCode());//1829164700        String s = new String("哈哈");        String s2 = new String("哈哈");        System.out.println(s==s2);//false        //String类的hashCode方法重写了,是根据内容计算得来的        System.out.println(s.hashCode());//694528        System.out.println(s2.hashCode());//694528        //一般情况下,JDK提供的类都会重写hashCode方法        System.out.println("----------------------------");        //public final Class<?> getClass()返回此 Object 的运行时类        //根据面向对象的思想,可以把一个抽象概念的类用Class来表示;一个类有包名,类名,方法,属性,构造方法....        Class clazz = p.getClass();        Class clazz2 = p2.getClass();        System.out.println(clazz==clazz2);//true        //public String getName()以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。        System.out.println(clazz.getName());//cn.edu360.Person        //public String getSimpleName()返回源代码中给出的底层类的简称。        System.out.println(clazz.getSimpleName());//Person        System.out.println("----------------------------");        //public String toString()返回该对象的字符串表示        //println默认会调用一个对象的toString方法        //Object类的toString方法的默认实现:getClass().getName() + "@" + Integer.toHexString(hashCode())        System.out.println(p);//name=张三,age=10        System.out.println(p2.toString());//name=张三,age=10        System.out.println(s);//哈哈        System.out.println("----------------------------");        //public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。         //在java编程中,一般使用equals比较内容是否相等;使用==比较地址值是否相等        System.out.println(s.equals(s2));//true        System.out.println(s==s2);//false        p.name = "哈哈";        System.out.println(p.equals(p2));//false        System.out.println(p==p2);//false        System.out.println("----------------------------");        //protected Object clone()创建并返回此对象的一个副本        //我想根据p对象创建一个克隆对象        Object obj = p.clone();        Person p3 = (Person)obj;        //当对象里面有引用类型的成员变量时,这个引用类型的成员变量并没有进行克隆成功        System.out.println(p3==p);//false        System.out.println(p.obj==p2.obj);//false        System.out.println(p.obj==p3.obj);//true,所以我说是浅克隆    }}class Person implements Cloneable{    public String name = "张三";    public int age = 10;    public Object obj = new Object();    @Override    protected Object clone() throws CloneNotSupportedException {        // TODO Auto-generated method stub        return super.clone();    }    //因为不满意父类的equals方法,所以我们重写equals方法    @Override    public boolean equals(Object obj) {        if (this == obj)            return true;        if (obj == null)            return false;        if (getClass() != obj.getClass())            return false;        Person other = (Person) obj;        if (age != other.age)            return false;        if (name == null) {            if (other.name != null)                return false;        } else if (!name.equals(other.name))            return false;        return true;    }    /*@Override    public boolean equals(Object obj) {        //判断obj是否等于null,如果等于null直接返回false        if(null==obj){            return false;        }        //如果obj不是Person的类型,直接返回false        if(!(obj instanceof Person)){            return false;        }        //如果obj的字节码文件对象和this的字节码文件对象不一样,直接返回false        if(this.getClass()!=obj.getClass()){            return false;        }        //如果以上三关都通过了,那么就可以确定obj是Person的类型        Person p = (Person)obj;        //比较p和this的成员变量是否相等        return this.age==p.age?this.name.equals(p.name):false;    }*/    //因为不满意父类的toString方法实现,可以重写toString方法    @Override    public String toString() {        return "Person [name=" + name + ", age=" + age + "]";    }    /*@Override    public String toString() {        return "name="+name+",age="+age;    }*/}
原创粉丝点击