Object类概述

来源:互联网 发布:念了两句诗 知乎 编辑:程序博客网 时间:2024/06/07 00:09

java.lang.Object
1.java.lang包在使用的时候无需显示导入,编译时由编译器自动导入。
2.Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类。
3.Object类是Java中唯一没有父类的类。其他所有的类,包括标准容器类,比如数组,都继承了Object类中的方法。

构造方法
public Object()
Object类只有这一个构造方法,并且是无参构造,回想之前写构造方法方面的东西时有这样一句话:子类构造方法默认访问的是父类无参构造方法。或许原因就在这!

常见成员方法
1.public int hashCode()
返回该对象的哈希码值
注意:哈希值是根据哈希算法计算出来的值,这个值跟地址有关,但不是实际地址值,可以理解为地址值。(对应关系)

class Demo{//省略了“extends Object”}public class HashCodeDemo {    public static void main(String[] args) {        Demo d1=new Demo();        Demo d2=new Demo();        Demo d3=d1;        System.out.println(d1.hashCode());//366712642        System.out.println(d2.hashCode());//1829164700        System.out.println(d3.hashCode());//366712642    }}

2.public final Class getClass()
返回此 Object 的运行时类。

Class类下也有一方法:public String getName()
以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。

package blog_05;class Demo{}public class GetClassDemo {    public static void main(String[] args) {        Demo d1=new Demo();        Class c=d1.getClass();        String str=c.getName();        //链式编程:String str=d1.getClass().getName();        System.out.println(str);//输出:blog_05.Demo    }}

3.public String toString()
返回该对象的字符串表示
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + ‘@’ + Integer.toHexString(hashCode())
由于此方法意义不大,所以建议子类重写该方法

package blog_05;class Demo{}public class ToStringDemo {    public static void main(String[] args) {        Demo d1=new Demo();        System.out.println(d1.toString());        System.out.println(d1.getClass().getName() + '@'                 + Integer.toHexString(d1.hashCode()));    }}//输出://blog_05.Demo@15db9742//blog_05.Demo@15db9742

eclipse提供的重写:

package blog_05;class Demo{    private int age;    private String name;    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @Override    public String toString() {        return "Demo [age=" + age + ", name=" + name + "]";    }//eclipse提供的重写}public class ToStringDemo {    public static void main(String[] args) {        Demo d1=new Demo();        d1.setAge(18);        d1.setName("huge");        System.out.println(d1.toString());//Demo [age=18, name=huge]        System.out.println(d1);//Demo [age=18, name=huge]        //可见直接输出也是调用的对象的toString()方法    }}

4.public boolean equals(Object obj)
指示其他某个对象是否与此对象“相等”。
默认情况下比较的是地址值,意义不大,子类一般重写该方法。
源码:

public boolean equals(Object obj) {        return (this == obj);//比较对象地址是否相同    }

举例:

package blog_05;class Demo{    private int age;    private String name;    public Demo() {        super();    }    public Demo(int age, String name) {        super();        this.age = age;        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }   }public class EqualsDemo {    public static void main(String[] args) {        Demo d1=new Demo(18,"huge");        Demo d2=new Demo(18,"huge");        Demo d3=d1;        System.out.println(d1.equals(d2));//false        System.out.println(d1.equals(d3));//true    }}

eclipse提供的重写:

package blog_05;class Demo{    private int age;    private String name;    public Demo() {        super();    }    public Demo(int age, String name) {        super();        this.age = age;        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @Override    public int hashCode() {        final int prime = 31;        int result = 1;        result = prime * result + age;        result = prime * result + ((name == null) ? 0 : name.hashCode());        return result;    }    @Override    public boolean equals(Object obj) {        if (this == obj)            return true;        if (obj == null)            return false;        if (getClass() != obj.getClass())            return false;        Demo other = (Demo) 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;    }   }public class EqualsDemo {    public static void main(String[] args) {        Demo d1=new Demo(18,"huge");        Demo d2=new Demo(18,"huge");        Demo d3=d1;        System.out.println(d1.equals(d2));//true        System.out.println(d1.equals(d3));//true    }}

5.protected Object clone()
Creates and returns a copy of this object.
Object类中的说明是:
protected Object clone()throws CloneNotSupportedException
这个方法比较特殊:
  首先,使用这个方法的类必须实现java.lang.Cloneable接口,否则会抛出CloneNotSupportedException异常。
  Cloneable接口中不包含任何方法,所以实现它时只要在类声明中加上implements语句即可。
  第二个比较特殊的地方在于这个方法是protected修饰的,覆写clone()方法的时候需要写成public,才能让类外部的代码调用。
参考链接:
http://www.cnblogs.com/mengdd/archive/2013/01/03/2842809.html

0 0