Java-object class, method rewriting (override), garbage collection

[1] Object class: ancestor class, parent class of all classes, indirect parent class
[2] hashcode
[7] [8] GC: automatic garbage collection (the memory space requested by the programmer will be automatically recycled by the JVM). What kind of objects will be garbage collected? 1. The object is unreachable 2. It cannot be referenced 3. It is out of scope

User class

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();
    }
}

Student class

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();
    }
}

operation result:

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】垃圾已经回收...

Guess you like

Origin blog.csdn.net/qq_44371305/article/details/113140059
Recommended