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

相关文章
|
20天前
|
JavaScript 前端开发
`Object.create()` 方法的参数
【10月更文挑战第29天】`Object.create()` 方法的参数提供了多种创建对象和控制对象属性及继承关系的方式,开发人员可以根据具体的需求灵活运用,以实现更高效、更符合设计要求的对象创建和继承机制。
|
18天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
67 4
|
29天前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
48 17
|
20天前
|
设计模式
在实际开发中,什么时候应该使用 `new` 关键字,什么时候应该使用 `Object.create()` 方法?
【10月更文挑战第29天】`new` 关键字适用于创建具有特定类型和初始化逻辑的对象实例,以及实现基于原型链的继承;而 `Object.create()` 方法则适用于基于现有对象创建相似对象、避免构造函数的副作用、创建具有特定原型链的对象等场景。在实际开发中,需要根据具体的需求和设计模式来选择合适的方法来创建对象,以实现更高效、更灵活的代码结构。
|
23天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
64 2
|
24天前
|
Java Spring
JAVA获取重定向地址URL的两种方法
【10月更文挑战第17天】本文介绍了两种在Java中获取HTTP响应头中的Location字段的方法:一种是使用HttpURLConnection,另一种是使用Spring的RestTemplate。通过设置连接超时和禁用自动重定向,确保请求按预期执行。此外,还提供了一个自定义的`NoRedirectSimpleClientHttpRequestFactory`类,用于禁用RestTemplate的自动重定向功能。
|
4月前
|
缓存 算法 Java
Java面试题:深入探究Java内存模型与垃圾回收机制,Java中的引用类型在内存管理和垃圾回收中的作用,Java中的finalize方法及其在垃圾回收中的作用,哪种策略能够提高垃圾回收的效率
Java面试题:深入探究Java内存模型与垃圾回收机制,Java中的引用类型在内存管理和垃圾回收中的作用,Java中的finalize方法及其在垃圾回收中的作用,哪种策略能够提高垃圾回收的效率
41 1
|
Java C++
【Java技术专题】「原理专题」深入分析Java中finalize方法的作用和底层原理
【Java技术专题】「原理专题」深入分析Java中finalize方法的作用和底层原理
209 0
【Java技术专题】「原理专题」深入分析Java中finalize方法的作用和底层原理
|
Java
Java Finalize和System.gc方法
Java Finalize和System.gc方法
110 0
|
Java
JAVA基础篇 之 finalize()方法的作用
JAVA基础篇 之 finalize()方法的作用
117 0
下一篇
无影云桌面