Object类:是所有Java类的祖先。每个类都是用Object作为超类。所有对象(包括数组)都实现这个类的方法
1.getClass()方法:返回一个对象实例的运行期类型
AddressBook ab=new AddressBook();
Class zclass=ab.getClass();//获取该对象的class对象
System.out.println(zclass);
//获取该对象的属性
try {
zclass=Class.forName("addressbook.Person");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
Person p=(Person)zclass.newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Field[] fs=zclass.getDeclaredFields();
for(Field f:fs){
System.out.println(f.getName());
}
2.hashCode()方法
返回对象实例的hash码,即内存地址的一种表现。
对象实例后hash码固定,不会因对象属性改变而改变。再次执行程序,hash码不要求和之前一样。如equals方法返回true,hash码也应一致。开发者应尽量做到为不是equals的对象,产生不同hash码
3.equals()方法
指出其他对象是否和当前对象相等。
说一下”==“和”equals”之间的区别?
1、如果比较的是基本数据类型,使用==进行比较,比较的是值
2、如果比较的是引用类型,”==”比较的是引用的内存地址,
equals本身是要比较的对象值,但是object类中Equals方法的实现是比较的地址,
所以如果要比较引用的值是否相等,此时要重写equals方法事实上进行比较对象
的值
int num1 = 123;
int num2 = 134;
/*if(num1 == num2){
System.out.println("相等");
}else {
System.out.println("不相等");
}*/
Student stu1 = new Student("jim",23);
Student stu2 = new Student("jim",23);
if(stu1.equals(stu2)){
System.out.println("相等");
}else {
System.out.println("不相等");
}
String s1 = new String("a");
String s2 = new String("a");
//s1 == s2
if(s1.equals(s2)){
System.out.println("相等");
}else {
System.out.println("不");
}
4.tostring()方法
System.out.println()方法,打印对象信息,其实就是调用对象继承到的toString()方法。
所有类都会直接或者间接继承于Object类,都会拥有toString()方法。
而Object类中的toString()方法只是返回类的全限定名和内存地址码。
可以重写toString()方法,来实现自己需要的打印信息。
5.clone()方法
* 如果想对象一个对象进行克隆,此类必须实现Cloneable接口,
* 在每一个类中重写clone方法,把重的克隆方法的权限改成 public
*
* 克隆--》复制,
* 浅克隆--》除了克隆对象之外,会把属性给复制一份(基本数据类型)
* 深克隆--》在复制对象时,会把所有属性(包括引用类型的属性)都复制一份
*
* 另外一种复制对象:序列化
*