/**
*Object 根类 中的常见方法说明:
Object类型是java世界中所有类型的根类
* 所有的类型,直接或者间接继承 Object类型
*
* 常用方法:
* inthashCode():返回对象的哈希值,常用来判断两个对象是否相等。
* finalClass getClass(): 返回当前对象的所属类的名称字符串表示形式
* String toString():返回该对象的字符串表示。 建议以后自己的类,尽量都重写该方法
* boolean equals(Object obj): 判断两个对象是否“相等”;判断引用类型的对象是否相等。
* 建议以后自己的类,尽量都重写该方法,以方法判断对象是否相等
* 同时,需要重写hashCode()方法
*
*void finalize(): 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
* 希望将对象在销毁的时候,顺带的清理一些系统资源
* 现实工作中大家用的比较少
* finalize()这个方法是由 jvm调用的。
* 子类重写 Object#finalize()方法来实现 垃圾回收器 销毁对象时,清理系统资源
*
*
* Object clone():创建并返回此对象的一个副本。 克隆
* "浅克隆" shadow clone (默认是是浅克隆)
* "深克隆" deep clone
练习2,
*/
public class ObjectDemo1 {
publicstatic void main(String[] args) {
int[]array = new int[]{1,2,3};
Objectobject = new Object();
inthashCode = object.hashCode();
System.out.println("object对象的哈希值为:"+hashCode);
//哈希值就是int类型的整数
//哈希值能够干什么:可以帮我们区分开,两个对象否是同一个对象。
//由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数
Objectobject2 = new Object();
inthashCode2 = object2.hashCode();
System.out.println("object2对象的哈希值为:"+hashCode2);
for(inti=0;i<100;i++){
System.out.println("object对象的哈希值为:"+object.hashCode());
}
//public final Class getClass()
//java中将 所有的 .class 文件 ,又抽象为一个新的类型 Class 类型
System.out.println(object.getClass().getName());
System.out.println(object2.getClass().getName());
//所以说 object.class 文件 是Class类型的一个对象(实例)
//object 和object2 是否是同一个类型呢? 是;
//object 和object2 是否共享同一个.class 文件呢?是
//toString()
System.out.println(object.toString());
/**
* 当调用某一个对象的toString()成员方法时,有一个执行顺序
* 对首先在类中找toString(),如果没有重写toString(),则继续会找父类
* 的toString(),直到找到object#toString()为止。
*/
XXXx = new XXX();
//此时 x.toString()调用是Object#toString()
System.out.println(x.toString());
//equals(Object obj);
inta =10;
intb = 10;
if(a==b){
System.out.println("基本数据类型:a==b吗?是的");
}
Objectobj1 = new Object(); // hashcode = ox1111
Objectobj2 = new Object();// hashCode = ox2222;
Objectobj3 = obj1; hashCode = ox2222;
if(obj1== obj2){
System.out.println("引用类型的对象 obj1==obj2吗? 是的");
}else{
System.out.println("引用类型的对象 obj1==obj2吗? 不是");
}
if(obj1== obj3){
System.out.println("引用类型的对象 obj1==obj3吗? 是的");
}else{
System.out.println("引用类型的对象 obj1==obj3吗? 不是");
}
/**
* 常常在工作中,我们会拿对象的 成员变量 来作为 ,
* 来作为两个对象是否”相等“的判断依据
* 换句话说,判断的依据是我们自己定义的
*
* java中,常常那Object#equals()方法来判断两个对象是否相等
* 但是默认情况下,Object#equals()方法 源码中还是 使用的"=="判断
*
* 那就要求根据我们自己的实际需要,在自己的子类中,添加equals()的重载方法来
* 实现自己的判断两个对象是否相等的判断依据。
*
* 就拿学生类来说明
*
*/
if(obj1.equals(obj2)){
System.out.println("引用类型的对象obj1.equals(obj2)吗? 是的");
}else{
System.out.println("引用类型的对象obj1.equals(obj2)吗? 不是");
}
Studentstu1 = new Student("jerry","男",20,"轻工业");
Studentstu2 = new Student("jerry","男",20,"轻工业");
booleanresult = isEqual(stu1,stu2);
System.out.println("学生stu1与学生stu2 是否想等呢?"+result);
}
publicstatic boolean isEqual(Student stu1,Student stu2){
booleanresult = false;
if(stu1.equals(stu2)){
result= true;
}
returnresult ;
}
}
*
* 练习1,@author jerry
*
*/
public class ObjectDemo {
publicstatic void main(String[] args) {
//调用method1()
method1(newStudent("jerry","male",20,"轻工业"));
// while(true){
//
// }
//clone();
Studentstu1 = new Student("jerry","male",20,"轻工业");
Studentstu2 = stu1;// 两个对象指向了同一块内存空间
System.out.println("stu1#hashCode="+stu1.hashCode());
System.out.println("stu2#hashCode="+stu2.hashCode());
Studentstu3 = null;
//Typemismatch: cannot convert from Object to Student
//Unhandledexception type CloneNotSupportedException
try{
stu3= (Student)stu1.clone();
}catch (CloneNotSupportedException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("=======clone对象========");
stu3.setName("jerrp");
System.out.println(stu3);
System.out.println(stu1);
System.out.println("stu3#hashCode="+stu3.hashCode());
System.out.println("stu1#hashCode="+stu1.hashCode());
/**
* 如果两个对象的hashcode不一样,一定不是同一个对象;
* hashcode值相等,不一定就是同一个对象
*/
Studentstu4 = new Student("jerry","male",20,"轻工业");
System.out.println("stu4#hashCode="+stu4.hashCode());
}
publicstatic void method1(Student stu){
System.out.println(stu);
}
}