hashCode()
返回的是该对象的哈希码值,是通过哈希表里面的哈希算法得到的
getClass()
返回此Object正在运行的类
getName()
返回Class对象所表示的实体名称(当前类的全路径名称)
代码表示:
public class methodDemo {
public static void main(String[] args){
Sdudent s1= new Sdudent();
System.out.println(s1.hashCode()); // 961
System.out.println(Integer.toHexString(s1.hashCode())); / /3c1
System.out.println(s1.getClass()) ; // class text01.Sdudent
Class c = s1.getClass();
System.out.println(c.getName()); // text01.Sdudent
System.out.println(s1.getClass().getName()); // text01.Sdudent
}
public void sdudent(){
}
}
代码结果:
961
3c1
class text01.Sdudent
text01.Sdudent
text01.Sdudent
toString()
返回的是该对象的字符串表示
Integer:是int类的一个包装类型
没有重写的toString()相当于:s.getClass().getName()+"@"+Integer.toHexString(s.hashCode())
equals()
比较:默认比较的是地址值
重写equals():返回的是布尔类型
代码表示:
public class Sdudent {
private String name ;
private int age ;
public Sdudent(String name, int age) {
this.name = name;
this.age = age;
}
public Sdudent() {
super();
// TODO Auto-generated constructor stub
}
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;
}
//toString()方法
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
// @Override
// public boolean equals(Object obj) {
// return (this==obj) ;
// }
//自动生成:默认的去重写equals方法
@Override
public boolean equals(Object obj) {
if (this == obj)//this:Student当前类对象
return true;
if (obj == null)//如果obj对象是空对象,Student类具体对和空对象比较,没有意义
return false;
if (!(obj instanceof Sdudent)) //getClass().equals(obj.getClass)
return false;
Sdudent other = (Sdudent) 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;//==比较的地址值两个对象做一个==
}
//obj instanceof Student 该obj的对象是否是Student类的实例化!(考点):instanceof
}
public class sdudentTest {
public static void main(String[] args){
Sdudent s2=new Sdudent("赵宇豪",20);
Sdudent s3=new Sdudent("赵宇豪",20);
System.out.println(s2.equals(s3));
System.out.println(s2.hashCode());
System.out.println(s2.toString());
}
}
代码结果:
true
35564581
Student [name=赵宇豪, age=20]
finalize()
当垃圾回收器确定不存在对该对象的更多利用时调用,什么时候调用不确定,要等GC垃圾回收器这个线程什么时候空闲
protected Object clone()
条件:
代码体现:
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
//创建学生类对象
Student s = new Student() ;
s.setName("高圆圆");
s.setAge(27);
System.out.println(s.getName()+"---"+s.getAge());
System.out.println("-----------------------------");
//使用clone创建该Student对象的一个副本
Object obj = s.clone() ;
Student s2 = (Student) obj;//将父类的引用强制转换成子类对象
System.out.println(s2.getName()+"---"+s2.getAge());
//没有学习过clone方法的时候
Student s3 = s ;
System.out.println("-----------------------------");
System.out.println(s3.getName()+"----"+s3.getAge());
System.out.println("-----------------------------");
//其实有区别"
Student s4 = new Student() ;//重新创建对象,地址值发生变化,赋值,输出成员变量
s4.setName("张三");
s4.setAge(20);
System.out.println(s.getName()+"---"+s.getAge());
System.out.println(s3.getName()+"---"+s3.getAge());
System.out.println(s4.getName()+"---"+s4.getAge());
}
}