目录
Object类:
Object类是Java类库中的一个特殊类,他默认是所有类的父类,也就是说,Java 允许把任何类型的对象赋给 Object 类型的变量。当一个类被定义后,如果没有指定继承的父类,那么默认父类就是 Object 类。
那么以下两种写法实际上是一样的:
public class Person{}
public class Person extends Object{}
所以说,任何的JAVA中的类都可以调用Object类中的方法:
那么接下来,我们说说Object类中的方法:
1.getClass()方法:
含义:返回此Object类,返回的类对象是杯表示类的static synchronized
方法锁定的对象。
2.hashCode()方法:
含义:返回对象的哈希码值。
3.equals()方法:
含义:判断是否相等,返回的是布尔值
4.clone()方法:
含义:创建与该对象的类相同的新对象
5.toString()方法:
含义:返回该对象的字符串.输出语句默认调用这个
6.notify()方法:
含义:激活等待在该对象的监视器上的一个线程
7.notifyAll()方法:
含义:激活等待在该对象的监视器上的全部线程
8.wait()方法:
含义:在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待
9.finalize()方法:
含义:当垃圾回收器确定不存在对该对象的更多引用时,对象垃圾回收器调用该方法
其中toString(),equals(),getClass()方法用的比较多
为什么要重写toString方法和equals方法?
equals的重写:
为什么要重写equals(),首先我们来看一个案例:
public class Test2 {
public static void main(String[] args){
User user1 = new User("user1","123");
User user2 = new User("user1","123");
//判断user1、user2是否相等
System.out.print("是否相等:" + (user1 == user2));
}
}
class User {
String name;
String password;
public User(){}
public User(String name, String password) {
this.name = name;
this.password = password;
}
}
对于这段代码的两个User对象用"=="进行比较是否相等?
答案是:false。
从结果来看是不相等的,因为对于引用数据类型来说"=="比较的是两个对象的内存地址但是我们认为这两个User对象的所有属性的值都相等,可以认定这两个对象是相同的,那么该怎么做呢?
写equals方法,设置对象比较条件
public class Test2 {
public static void main(String[] args){
User user1 = new User("user1","123");
User user2 = new User("user1","123");
//判断user1、user2是否相等
System.out.print("是否相等:" + (user1.equals(user2)));
}
}
class User {
String name;
String password;
public User(){}
public User(String name, String password) {
this.name = name;
this.password = password;
}
//重写equals
public boolean equals(Object obj) {
if(this == obj) return true;
if(obj == null) return false;
User user = null;
if(obj instanceof User) {
user = (User)obj;
}
return this.name.equals(user.name) && this.password.equals(user.password);
}
}
通过重写equals()来界定User对象的比较内容
运算结果为:true
toString方法重写
toString()方法目的就是改变默认输出的方式。
public String toString() {
return "Person{" +
"cardId='" + cardId + '\'' +
", name='" + name + '\'' +
", age=" + age +
'}';
}
this与super
this
this是关键字,是一个引用保存了对象自身的地址,存储在对象内部,代表对象本身。
this可以用在实例方法和构造方法中。
this不能用在静态方法中
this在大多数情况下是可以省略的——当局部变量和实例变量同名时不能省略
语法格式:this.属性名/方法名 | this()
super
super是关键字,代表的是当前对象(this)的“父类型特征1”
super可以用在实例方法和构造方法中(子类构造方法第的第一行有一个隐含的“super()”)
super不能用在静态方法中
super在大多数情况下是可以省略的——当子类对象的属性或实例方法和“父类型特征”相同时,需要使用super区分两者。
语法格式:super.属性名/方法名 | super() —> 初始化对象父类型特征