Java-object类

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;
	}
	@Override
	public 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()
	@Override
	protected 	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()方法,则比较内容是否相同.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值