Javaオブジェクトクラス、メソッドの書き換え(オーバーライド)、ガベージコレクション

[1]オブジェクトクラス:祖先クラス、すべてのクラスの親クラス、間接親クラス
[2]ハッシュコード
[7] [8] GC:自動ガベージコレクション(プログラマーが要求したメモリスペースはJVMによって自動的に再利用されます)。ガベージコレクションはどのようなものになりますか?1.オブジェクトに到達できません2.参照できません3.範囲外です

ユーザークラス

package com.cao.lesson.test4;

public class User {
    
    
    private String name;
    private int age;

    public void setName(String name) {
    
    
        this.name = name;
    }

    public void setAge(int age) {
    
    
        this.age = age;
    }

    public String getName() {
    
    
        return name;
    }

    public int getAge() {
    
    
        return age;
    }

	//【6】
    @Override
    public String toString() {
    
    
        return "name:"+name+"\t"+"age:"+age;
    }

    // 【7】垃圾回收的 方法 finalize() JVM会自动调用 所有java有自动垃圾回收的机制
    @Override
    protected void finalize() throws Throwable {
    
    
        System.out.println("垃圾已经回收...");
        super.finalize();
    }
}

学生クラス

public class Student {
    
    
	//【8】
    @Override
    protected void finalize() throws Throwable {
    
    
        System.out.println("Student已经被回收...");
        super.finalize();
    }
}

package com.cao.lesson.test4;

public class Test {
    
    
    public static void main(String[] args) {
    
    
        //Object类:始祖类, 所有类的父类、间接父类
        Object obj = new Object();
        // getClass(); 获取类的全名称
        System.out.println(obj.getClass());
        User user=new User();
        //【1】输出User类的父类(object类)
        System.out.println(user.getClass().getSuperclass());
        // int hashCode(); 获取对象的 hash值, hashCode (对象的JVM内存地址对应的 int 值)

        /*
        对于hash值的计算
        整数类型(扩展、重写了 hashCode):它的字面量
        float,double(扩展、重写了 hashCode): 其他算法, 确保同一类型下 不同的字面量具有不同的 hashCode值
        String的hashCode比较特殊:存在hash碰撞
         */

        System.out.println(user.hashCode());// 【2】调用了父类的 的 hashCode 方法
		//【3】
        System.out.println("aa".hashCode());
        //【4】
        System.out.println(Integer.hashCode(2));
        //【5】
        System.out.println(Double.hashCode(6.66));

        // toString(); 看作是内存地址, 在对象输出的时候默认调用 toString()
        //【6】重写toString方法
        user.setName("cao");
        user.setAge(22);
        System.out.println(user.toString());

        // 垃圾回收的 方法 finalize() JVM会自动调用 所有java有自动垃圾回收的机制
        Test test=new Test();
        test.show();  // 超出了作用域的范围就会被回收

        // 【7】GC:自动垃圾回收(程序员申请的内存空间JVM会自动回收)
        // 什么样对象会被垃圾回收: 对象不可达 ,无法引用
        user=null;
        System.gc();
    }

    //【8】 超出了作用域的范围就会被回收
    public void show(){
    
    
        Student student=new Student();
    }
}

演算結果:

class java.lang.Object
【1】class java.lang.Object
【2】2133927002
【3】3104
【4】2
【5】1244124019
【6】name:cao	age:22
【7】Student已经被回收...
【8】垃圾已经回收...

おすすめ

転載: blog.csdn.net/qq_44371305/article/details/113140059