javaSE_16_API文档概述丶Object 类
2021-04-24 01:29
标签:ash 回车 结果 rgs equals nali lan 场景 this java.lang.Object类是类层次结构的根(父)类。每个类(Person,Student...)都使用 Object 作为超(父)类。所有对象(包括数组)都实现这个类的方法。 根据JDK源代码及Object类的API文档,Object类当中包含的方法有11个。 toString方法:public String toString() 覆盖重写 :如果不希望使用toString方法的默认行为,则可以对它进行覆盖重写。在IntelliJ IDEA中,可以点击 Code 菜单中的 Generate... ,也可以使用快捷键 alt+insert ,点击 toString() 选 项。选择需要包含的成员变量并确定。举例: equals方法 :public boolean equals(Object obj) :指示其他某个对象是否与此对象“相等”。SUN公司设计equals方法的目的是什么?以后编程的过程当中,都要通过equals方法来判断两个对象是否相等。equals方法是判断两个对象是否相等的。调用成员方法equals并指定参数为另一个对象,则可以判断这两个对象是否是相同的。这里的“相同”有默认和自定义两种方式。 默认地址比较 对象内容比较 重写equals方法的场景: 大多数IDE都可以自动生成equals方法的代码内容。在IntelliJ IDEA中,可以使用 Code 菜单中的 Generate… 选项,也可以使用快捷键 alt+insert ,并选择 equals() and hashCode() 进行自动代码生成。举例: 小结: finalize方法 垃圾回收器(Garbage Collection),也叫 GC,垃圾回收器主要有以下特点: hashCode方法:public native int hashCode(); 这个方法不是抽象方法,带有native关键字,底层调用C++程序。hashCode()方法返回的是哈希码:实际上就是一个java对象的内存地址,经过哈希算法,得出的一个值。所以hashCode()方法的执行结果可以等同看做一个java对象的内存地址。 javaSE_16_API文档概述丶Object 类 标签:ash 回车 结果 rgs equals nali lan 场景 this 原文地址:https://www.cnblogs.com/wurengen/p/13264640.htmlAPI概述
API使用步骤
Object类
public class MyClass /*extends Object*/ { // ... }
其中的常用的方法有:
public class Person {
private String name;
private int age;
@Override
public String toString() {
return "Person{" + "name=‘" + name + ‘\‘‘ + ", age=" + age + ‘}‘;
}
// 省略构造器与Getter Setter
}
import java.util.Objects;
public class Person {
private String name;
private int age;
@Override
public boolean equals(Object o) {
// 如果对象地址一样,则认为相同
if (this == o) return true;
// 如果参数为空,或者类型信息不一样,则认为不同
if (o == null || getClass() != o.getClass()) return false;
// 转换为当前类型
Person person = (Person) o;
// 要求基本类型相等,并且将引用类型交给java.util.Objects类的equals静态方法取用结果
return age == person.age && Objects.equals(name, person.name);
}
}
/*
关于Object类中的finalize()方法。
1、在Object类中的源代码:
protected void finalize() throws Throwable { }
GC:负责调用finalize()方法。
2、finalize()方法只有一个方法体,里面没有代码,而且这个方法是protected修饰的。
3、这个方法不需要程序员手动调用,JVM的垃圾回收器负责调用这个方法。
不像equals toString,equals和toString()方法是需要你写代码调用的。
finalize()只需要重写,重写完将来自动会有程序来调用。
4、finalize()方法的执行时机:
当一个java对象即将被垃圾回收器回收的时候,垃圾回收器负责调用
finalize()方法。
5、finalize()方法实际上是SUN公司为java程序员准备的一个时机,垃圾销毁时机。
如果希望在对象销毁时机执行一段代码的话,这段代码要写到finalize()方法当中。
6、静态代码块的作用是什么?
static {
....
}
静态代码块在类加载时刻执行,并且只执行一次。
这是一个SUN准备的类加载时机。
finalize()方法同样也是SUN为程序员准备的一个时机。
这个时机是垃圾回收时机。
7、提示:
java中的垃圾回收器不是轻易启动的,
垃圾太少,或者时间没到,种种条件下,
有可能启动,也有可能不启动。
*/
public class Test06{
public static void main(String[] args){
/*
// 创建对象
Person p = new Person();
// 怎么把Person对象变成垃圾?
p = null;
*/
// 多造点垃圾
for(int i = 0; i ){
Person p = new Person();
p = null;
// 有一段代码可以建议垃圾回收器启动。
if(i % 2 == 0){
System.gc(); // 建议启动垃圾回收器。(只是建议,可能不启动,也可能启动。启动的概率高了一些。)
}
}
}
}
// 项目开发中有这样的业务需求:所有对象在JVM中被释放的时候,请记录一下释放时间!!!
// 记录对象被释放的时间点,这个负责记录的代码写到哪里?
// 写到finalize()方法中。
class Person{
// 重写finalize()方法
// Person类型的对象被垃圾回收器回收的时候,垃圾回收器负责调用:p.finalize();
protected void finalize() throws Throwable {
// this代表当前对象
System.out.println(this + "即将被销毁!");
}
}
public class Test07{
public static void main(String[] args){
Object o = new Object();
int hashCodeValue = o.hashCode();
// 对象内存地址经过哈希算法转换的一个数字。可以等同看做内存地址。
System.out.println(hashCodeValue); //798154996
MyClass mc = new MyClass();
int hashCodeValue2 = mc.hashCode();
System.out.println(hashCodeValue2); //1392838282
MyClass mc2 = new MyClass();
System.out.println(mc2.hashCode()); // 523429237
}
}
class MyClass
{
}