Java-object类

来源:互联网 发布:售后服务网络建设 编辑:程序博客网 时间:2024/06/06 06:50

Object类

类Object是类层次结构的根类,每个类都使用Objiect类作为超类(父类),所有对象(包括数组)都实现这个类的方法.

public int hashCode()返回该对象的哈希值.

hashCode()--->通过哈希算法(哈希表:hashtable)--->地址值(不是实际意义上的地址值!)

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

Class类方法:

1.public String getName()以String形式返回此Class对象所表示的实体(类,接口,数组类,基本 类型或void)名称

2.public String toString();返回该对象的字符串表示(建议所有子对象都重写此方法)

Interger类中有一个方法:

public static String toHaxString(int i):将一个int类型的数据转化成一个十六进制的字符串表示.

如果直接输出对象名称,想要显示当前对象变量名的值,必须重写Object类中的toString()方法.

3.public boolean equals(Object obj)指示其他某个对象是否与此对象"相等".

使用工具自动生产equals()方法:

javascript:Array对象,Number对象,String对象,velueOf():===>s1.equals(s2);比较内容是否相同.

4.protected void finalize() throws Throwable:当垃圾回收器确定不存在该对象更多引用时,有对象的垃圾回收器调用此方法,不过什么时候调用垃圾回收器,不确定.

 System类中的一个 方法:

public void gc():运行垃圾回收器,这个垃圾回收器最终调用的就是finalize()方法.

5.protected Object clone() :创建并返回此对象的一个副本.

throws CloneNotSupportedException

注意事项:Object类中的clone方法执行特定的复制操作,如果此对象不能实现接口cloneable,则会抛出CloneNotSupportedException.

相关代码:

public class ObjectDemo {public static void main(String[] args) throws CloneNotSupportedException {Student s1=new Student();System.out.println(s1.hashCode());Student s2=new Student();System.out.println(s2.hashCode());System.out.println("hello".hashCode());Class c1=s1.getClass();//返回Object的运行时类System.out.println("c1:"+c1);String name=c1.getName();//全路径名称System.out.println("name:"+name);System.out.println("------------------");//创建一个学生对象Student s3=new Student("立华奏",20);//直接对象名称,显示成员变量的值System.out.println("s3:"+s3);System.out.println("toString:"+s3.toString());//toString源码,直接输出对象名称System.out.println(s3.getClass().getName()+"@"+Integer.toHexString(s1.hashCode()));System.out.println("------------------");System.out.println(s1==s2);//比较地址值Student s4=new Student("立华奏",20);System.out.println(s3==s4);//比较地址值Student s5=s4;System.out.println(s5==s4);System.out.println(s3.equals(s4));//由于重写了Object类中的equals方法,所以比较对象内容是否相同.System.out.println("------------------");//复制s4这个对象Object obj=s4.clone();//调用clone方法//向下转型Student s6=(Student) obj;System.out.println(s6.getName()+"----"+s6.getAge());}}public class Student extends Object{private String name;private int age;public Student() {super();}public Student(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";}//自动生成.alt+shift+s->s//重写equals方法public boolean equals(Object obj){if(this==obj)return true;if(obj==null)return false;if(getClass()!=obj.getClass())return false;Student other=(Student) 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;}//重写Object类中clone()@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}}
结果为:
611615767
1569461427
99162322
c1:class westos.Student
name:westos.Student
------------------
s3:Student [name=立华奏, age=20]
toString:Student [name=立华奏, age=20]
westos.Student@24748417
------------------
false
false
true
true
------------------
立华奏----20
面试题:
==和equals方法区别:
==:比较的是两个对象地址值是否相等.
equals()方法默认的是两个对象的地址值比较,如果重写了Object类中的equals()方法,则比较内容是否相同.