2022-7-23 学习日记(14th day)Object类和其常用方法

发布于:2022-07-24 ⋅ 阅读:(294) ⋅ 点赞:(0)

目录

Object类:

1.getClass()方法:

2.hashCode()方法:

3.equals()方法:

4.clone()方法:

5.toString()方法:

6.notify()方法:

7.notifyAll()方法:

8.wait()方法:

9.finalize()方法:

equals的重写:

toString方法重写 

this与super

this

super 


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() —> 初始化对象父类型特征

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到