Java基础Object类的finalize方法

简介: Java基础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 ObjectTest06{
  public static void main(String[] args){
  /* 
  for(int i = 0;i < 1000000;i++){
  person p = new person();
  p = null;
  } */
  for(int i = 0;i < 1000;i++){
    person p = new person();
    p = null;
    // 有一段代码可以建议垃圾回收器启动。
    if( i % 50 == 0){
    System.gc();// 建议启动垃圾回收器。(只是建议,可能不启动,也可能启动。启动的概率高了一些。)
    }
  }
  }
}
// 项目开发中有这样的业务需求:所有对象在JVM中被释放的时候,请记录一下释放时间!!!
// 记录对象被释放的时间点,这个负责记录的代码写到哪里?
// 写到finalize()方法中。
class person{
  // 重写finalize()方法
  // Person类型的对象被垃圾回收器回收的时候,垃圾回收器负责调用:p.finalize();
  protected void finalize() throws Throwable{
  System.out.println(this + "启动JVM销毁垃圾!");
  }
}


运行结果:


0a2653c851af460fa595bd959398a8f1.png

相关文章
|
14天前
|
Java
Java中ReentrantLock中tryLock()方法加锁分析
Java中ReentrantLock中tryLock()方法加锁分析
12 0
|
3天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
27 3
|
23小时前
|
XML JSON Java
作为所有类的顶层父类,没想到Object的魔力如此之大!
在上一篇博文中我们提到了Java面向对象的四大特性,其中谈及“抽象”特性时做了一个引子,引出今天的主人公Object,作为所有类的顶级父类,Object被视为是James.Gosling的哲学思考,它高度概括了事务的自然与社会行为。
30 13
|
5天前
|
存储 Java
Java动态转发代理IP的实现方法
Java动态转发代理IP的实现方法
21 11
|
6天前
|
Java
Java接口中可以定义哪些方法?
【4月更文挑战第13天】
7 0
Java接口中可以定义哪些方法?
|
7天前
|
Java 编译器
Java Character 类
4月更文挑战第13天
|
8天前
|
存储 Java
Java基础教程(7)-Java中的面向对象和类
【4月更文挑战第7天】Java是面向对象编程(OOP)语言,强调将事务抽象成对象。面向对象与面向过程的区别在于,前者通过对象间的交互解决问题,后者按步骤顺序执行。类是对象的模板,对象是类的实例。创建类使用`class`关键字,对象通过`new`运算符动态分配内存。方法包括构造函数和一般方法,构造函数用于对象初始化,一般方法处理逻辑。方法可以有0个或多个参数,可变参数用`类型...`定义。`this`关键字用于访问当前对象的属性。
|
12天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
13 0
|
12天前
|
Java
Java 15 神秘登场:隐藏类解析未知领域
Java 15 神秘登场:隐藏类解析未知领域
16 0
|
14天前
|
Java
Java中关于ConditionObject的signal()方法的分析
Java中关于ConditionObject的signal()方法的分析
21 4