object

来源:互联网 发布:高晓松酒驾 知乎 编辑:程序博客网 时间:2024/06/05 18:36

1.     概念:Object类是类层次结构的根类,所有类都以Object类作为自己的超类(父类)。所有对象(包括数组)都可以实现这个类的方法。

*几个基本方法(在后面会具体讲到,这里只是提提)

1.public int hashcode( ) 返回该对象的哈希码只值(通过哈希算法,对照哈希表求出哈希值,也是地址,但是这的地址不是真正意义上的地址。)

2.public final class getclass( )返回当前Object类运行实类。(Class类中有一个方法:

 publicString getName()以 String 的形式返回此Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。)返回的是当前这个类的全路径名称。

2.     public StringtoString( )返回当前当前字符串的表示(建议重写),但若要想直接返回该对象的名称,返回该对象成员变量的值,就必须要重写toString 方法。

例:进行重写

packageinterpackage;

 

class gzx{

   public static void main(String[] args) {

    Student s=new Student();

     System.out.println(s.toString());

   }

}

class Student{

   String name="bingo";

   int age=20;

publicStudent() {

   super();

}

public void setName(String nameparm) {

   this.name=nameparm;

}

publicString getName() {

   return this.name;

}

public void setage(intageparm) {

   this.age=ageparm;

}

public int getage() {

   return this.age;

}

//重写的快捷键是Alt+shift+s--à+s

@Override

publicString toString() {

   return "Student[name=" + name + ", age=" + age + "]";

}

}

    

注:在后面会提到,但是这里要用那就是Integer类中的一个方法,public static String toHexString(int i) 将这个int型数据转换成一个十六进制的字符串。

例:各种返回值的比较

Student s=new Student( );

1.System.out.println(“s”+s);

2.System.out.println(“s”+s.toString( ));

3.System.out.println(s.getclass( ).getName( )+”@”+Integer.toHexString(s.hashcode( ) );

这三种输出结果都相同,都是当前对象的地址。

3.protected void finalize( ) throwsThrowable

当垃圾回收器确定该对象不会被更多的引用时,垃圾回收期就会调用这个方法,但是何时调用还不确定。(在以后会讲,在System类中有一个方法,运行垃圾回收器 public void gc(),此方法追中调用的就是finalize方法。)

4.Protected Objectclone( )创建并返回此对象的一个副本,注意此方法实施特定的复制方法,但是该对象的类不能够实现接口cloneable则会抛出 cloneNotSupporedtException

packageinterpackage;

 

class gzx{

   public static void main(String[] args) throws CloneNotSupportedException {//该异常是编译时期异常

      //创建s1这个学生对象

      Student s1 = new Student() ;

      s1.setName("高圆圆") ;

      s1.setage(27) ;

     

      System.out.println(s1.getName()+"---"+s1.getage());

     

      //复制s1这个对象

      Object obj = s1.clone() ;

      //向下转型:

      Student s2 = (Student) obj;

      System.out.println(s2.getName()+"---"+s1.getage());

      System.out.println("----------------------");

     

      //没有讲clone方法之前:

      Student s3 = s1; //s1地址值赋值s3对象,s3指向s1的堆内存中的地址值

      System.out.println(s3.getName()+"---"+s3.getage());

   }

}

 

class Studentimplements Cloneable{

   int age;

   String name;

   public Student() {

      super();

   }

   public Student(Stringnameparm,intageparm) {

      super();

      this.name=nameparm;

      this.age=ageparm;

   }

   public void setName(String nameparm) {

      this.name=nameparm;

   }

   public String getName() {

      return this.name;

   }

   public void setage(intageparm) {

      this.age=ageparm;

   }

   public int getage() {

      return this.age;

   }

   @Override

   protected Object clone()throws CloneNotSupportedException {

      // TODOAuto-generated method stub

      return super.clone();

   }

}

注意:当我们要完成clone方法的时候,系统一定会抛出CloneNotSupportedException ,此时就算不完成Cloneable接口,系统也不会发生呢个报错,,但是在后面一定要进行Clone方法的重写。

packageinterpackage;

 

class gzx{

   public static void main(String[] args) throws CloneNotSupportedException {//该异常是编译时期异常

      //创建s1这个学生对象

      Student s1 = new Student() ;

      s1.setName("高圆圆") ;

      s1.setage(27) ;

     

      System.out.println(s1.getName()+"---"+s1.getage());

     

      //复制s1这个对象

      Object obj = s1.clone();

      //向下转型:

      Student s2 = (Student) obj;

      System.out.println(s2.getName()+"---"+s1.getage());

      System.out.println("----------------------");

     

      //没有讲clone方法之前:

      Student s3 = s1; //s1地址值赋值s3对象,s3指向s1的堆内存中的地址值

      System.out.println(s3.getName()+"---"+s3.getage());

   }

}

 

class Studentimplements Cloneable {

   int age;

   String name;

   public Student() {

      super();

   }

   public Student(Stringnameparm,intageparm) {

      super();

      this.name=nameparm;

      this.age=ageparm;

   }

   public void setName(String nameparm) {

      this.name=nameparm;

   }

   public String getName() {

      return this.name;

   }

   public void setage(intageparm) {

      this.age=ageparm;

   }

   public int getage() {

      return this.age;

   }

   @Override

   protected Object clone()throws CloneNotSupportedException {

      // TODOAuto-generated method stub

      return super.clone();

   }

  

}

原创粉丝点击