类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);
}
}