文档章节

如果finalize()抛出异常会怎样?

markGao
 markGao
发布于 2014/05/27 10:27
字数 412
阅读 218
收藏 0

finalize()抛出异常的时候会被忽略。而且,对象的终结将在此停止,导致对象处在一种不确定的状态。如果另一个进程试图使用这个对象的话,将产生不确定的结果。通常抛出异常将会导致线程终止并产生一个提示信息,但是从finalize()中抛出异常就不会。

我想实践一下finalize()方法,能提供一个范例吗?

class LargeObject
{
   byte[] memory = new byte[1024*1024*4];
 
   @Override
   protected void finalize() throws Exception
   {
      System.out.println("finalized");
   }
}
 
public class FinalizeDemo
{
   public static void main(String[] args)
   {
      while (true)
         new LargeObject();
   }
}

代码清单1:实践finalize()

代码清单1中的代码写了一个FinalizeDemo程序,重复地对largeObject类实例化。每一个Largeobject对象将产生4M的数组。在这种情况下,由于没有指向该对象的引用,所以LargeObject对象将被GC回收。

GC会调用对象的finalize()方法来回收对象。LargeObject重载的finalize()方法被调用的时候会想标准输出流打印一条信息。它没有调用父类的finalize()方法,因为它的父类是Object,即父类的finalize()方法什么也不做。

编译(javac FinalizeDemo.java)并运行(java FinalizeDemo)代码清单1.当我在我的环境下(64位win7平台)使用JDK7u6来编译运行的时候,我看到一列finalized的信息。但是在JDK8的环境下时,在几行finalized之后抛出了java.lang.OutOfMemoryError

因为finalize()方法对于虚拟机来说不是轻量级的程序,所以不能保证你一定会在你的环境下观察到输出信息。


© 著作权归作者所有

上一篇: 得到对象的类
markGao
粉丝 15
博文 187
码字总数 91352
作品 0
宝山
程序员
私信 提问
Java问答:终极父类(2)—上篇

我之前发布了关于java.lang.Object类及其方法的一系列文章。在介绍了Object之后,我们又探究了clone()和euqals()方法。在这篇文章中,我们将继续讨论Object中的finalize()、getClass()和has...

LCZ777
2014/05/22
24
0
Java面试题之Java 的异常处理

1. Java中异常分为哪些种类 (1) 编译时异常,也叫强制性异常,和CheckedException (2)运行时异常,也叫没强制性异常和RuntimeException 2.error和exception的区别? error一般是指在虚拟...

年轻诠释我们的梦想_705b
2018/05/16
0
0
JAVA final finally finalize区别

简单区别: 中等区别: 虽然这三个单词在Java中都存在,但是并没有太多关联: final:java中的关键字,修饰符。 1.如果一个类被声明为final,就意味着它不能再派生出新的子类,不能作为父类被...

qq22734179
2014/03/21
60
0
【Java】疯狂Java基础(二)——final, finally, finalize 的区别

一、前言 这次说说final、finally、finalize这三者的区别,其实对这三者有了解的程序员,基本都知道,他们三个之间没有毛线关系。就是因为名字相似,其他的什么也没有。 二、final final可以...

kisscatforever
2018/03/29
0
0
【Finalizer】Java的Finalizer引发的内存溢出

Java的Finalizer引发的内存溢出 本文介绍的是Java里一个内建的概念,Finalizer。你可能对它对数家珍,但也可能从未听闻过,这得看你有没有花时间完整地看过一遍java.lang.Object类了。在jav...

nj-zhangmq
2016/12/16
33
0

没有更多内容

加载失败,请刷新页面

加载更多

消息中间件——RabbitMQ的高级特性

前言 前面我们介绍了RabbitMQ的安装、各大消息中间件的对比、AMQP核心概念、管控台的使用、快速入门RabbitMQ。本章将介绍RabbitMQ的高级特性。分两篇(上/下)进行介绍。 消息如何保障100%的...

Java架构师ya七
39分钟前
6
0
如何编写高质量的 JS 函数(1) -- 敲山震虎篇

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/7lCK9cHmunvYlbm7Xi7JxQ 作者:杨昆 一千个读者,有一千个哈姆雷特。 此系列文章将会从函数的执行机制、鲁棒性、函...

vivo互联网技术
今天
6
0
学会这5个Excel技巧,让你拒绝加班

在网上,随处都可以看到Excel技巧,估计已看腻了吧?但下面5个Excel技巧会让你相见恨晚。关键的是它们个个还很实用 图一 技巧1:快速删除边框 有时当我们处理数据需要去掉边框,按Ctrl+Shif...

干货趣分享
今天
11
0
JS基础-该如何理解原型、原型链?

JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个...

OBKoro1
今天
10
0
高防CDN的出现是为了解决网站的哪些问题?

高防CDN是为了更好的服务网络而出现的,是通过高防DNS来实现的。高防CDN是通过智能化的系统判断来路,再反馈给用户,可以减轻用户使用过程的复杂程度。通过智能DNS解析,能让网站访问者连接到...

云漫网络Ruan
今天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部