类Object是类层次结构的根类。每个类都使用Object类作为超类(extends Object)。所有对象(包括数组)都实现这个类。 成员方法: public int hashCode(); public final Class getClass(); public String toString(); public boolean equals(Object obj); protected ovid finalized(); protected Object clone(); 代码包括三个类,Student类,Teacher类和StudentDemo类。 Student.java
package cn.day11_Object.test01; public class Student { private String name; private int age; public Student() { // TODO Auto-generated constructor stub } 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; } public void study(){ System.out.println("学习."); } @Override public String toString() { //重写了toString()方法,可用alt + shift + s 调出source, //然后点击Generate toString()方法 return "Student [name=" + name + ", age=" + age + "]"; } @Override 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; } /* @Override public boolean equals(Object obj) { // TODO Auto-generated method stub //判断obj是否是此类对象 if(!(obj instanceof Student)){ return false; } Student temp = (Student)obj; if (this.name.equals(temp) && this.age == temp.age) { return true; } else { return false; } //直接返回值 return this.name.equals(temp.name) && this.age == temp.age; if(this.name.equals(temp.name) && this.age == temp.age){ return true; } else{ return false; } // return super.equals(obj); } */ }Teacher.java
package cn.day11_Object.test01; //导包的快捷键ctrl + shift + o import java.util.Date; public class Teacher implements Cloneable{ private String name; private int age; private Date time = new Date(); public Teacher() { // TODO Auto-generated constructor stub } public Teacher(String name, int age, Date time) { super(); this.name = name; this.age = age; this.time = time; } 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; } public Date getTime() { return time; } public void setTime(Date time) { this.time = time; } public void teach(){ System.out.println("老师教学。"); } //重写clone()方法 /* @Override protected Object clone() throws CloneNotSupportedException { // TODO Auto-generated method stub return super.clone(); } */ public Object clone(){ Teacher obj = null; try { obj = (Teacher)super.clone(); } catch (CloneNotSupportedException e) { // TODO: handle exception e.printStackTrace(); } obj.time = (Date)this.getTime().clone(); return obj; } }StudentDemo.java
package cn.day11_Object.test01; import java.util.Date; public class StudentDemo extends Object{ public static void main(String[] args) throws CloneNotSupportedException { //show1(); //show2(); //show3(); //show4(); //show5(); //show6(); Date b = new Date(); System.out.println(b); show7(b); } public static void show7(Date b) throws CloneNotSupportedException{ /** * clone()方法,同样存在浅复制和深复制, * 当类中只有基本类型的数据时,用浅复制即可, * 当存在非基本类型(引用类型)时,必须对非基本类型的属性也调用clone()方法, * 这样才能完成深复制. * obj.brith = (Date)this.getBrith().clone(); */ Teacher t1 = new Teacher("wang", 20, b); System.out.println(t1.getName() + "---" + t1.getAge() + "---" + t1.getTime()); Teacher t2 = (Teacher)t1.clone(); System.out.println(t2.getName() + "---" + t2.getAge() + "---" + t2.getTime()); } public static void show6(){ Student s1 = new Student("zhang", 32); Student s2 = new Student("wang", 22); Student s3 = s1; System.out.println("重写了equals()方法"); System.out.println(s1.equals(s2)); System.out.println(s1.equals(s3)); System.out.println("-------------------"); Teacher t1 = new Teacher(); System.out.println(s1.equals(t1)); } public static void show5() { Student s1 = new Student(); Student s2 = new Student(); Student s3 = s1; System.out.println("equals()的特点"); System.out.println("自反性: " + s1.equals(s1)); System.out.println(s1.equals(s2)); System.out.println(s1.equals(s3)); } public static void show4(){ // == 判断基本类型的值是否相等。 int aValue = 3; int bValue = 5; int cValue = 3; boolean bool = aValue == bValue; System.out.println(bool); System.out.println(aValue == cValue); System.out.println("---------------"); String s1 = "hello"; String s2 = "world"; String s3 = "hello"; boolean b2 = s1 == s2; System.out.println(b2); System.out.println(s1==s3); System.out.println("---------------"); //Object类的equals()方法 //Student s = new Student(); } public static void show3(){ Student s = new Student(); //直接调用对象名和调用对象名.toString()效果一样的。 System.out.println(s); System.out.println(s.toString()); } public static void show2(){ Student s = new Student(); System.out.println(s.toString()); System.out.println("---------------"); System.out.println(s.getClass()); System.out.println(s.getClass().getName()); System.out.println("---------------"); System.out.println(s.hashCode()); System.out.println(s.getClass().getName() + '@' + Integer.toHexString(s.hashCode())); } public static void show1(){ //对Objectde getClass()和getName(),toString()的练习。 Student s1 = new Student(); System.out.println(s1.hashCode()); Student s2 = new Student(); System.out.println(s2.hashCode()); Student s3 = s1; System.out.println(s3.hashCode()); System.out.println("-------------------"); Student s4 = new Student(); //Class c1 = s4.getClass(); //String sc1 = c1.getName(); //System.out.println(sc1); System.out.println(s4.hashCode()); System.out.println("--------------"); System.out.println(s4.getClass().getName()); System.out.println("---------------"); System.out.println(s4.toString()); System.out.println(s3.toString()); System.out.println(s2.toString()); System.out.println(s1.toString()); System.out.println("----------------"); System.out.println(s3.getClass().getName()); System.out.println(s2.getClass().getName()); System.out.println(s1.equals(s3)); System.out.println("----"); System.out.println(s1.equals(s2)); System.out.println("----------------"); System.out.println("----------------"); //重写了toString()方法之后,对象名和对象名.toString()在输出的时候是一样的。 System.out.println(s1); System.out.println(s2); System.out.println(s3); System.out.println(s4); } }