ApiObject

 

/**

 *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);

       }

 

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值