文档章节

java中的final,finally和finalize

Loveror_ahu
 Loveror_ahu
发布于 2017/09/08 16:16
字数 1053
阅读 8
收藏 0

 

        大体上讲,这三个词没啥联系,final是修饰字符,可定义变量,方法,类;finally是作为捕获异常后将要执行的操作放到它包含的区域;finalize则是与java的垃圾回收有关的方法。那么接下来我们就一一了解一下这三部分内容。

1.finalize()

        跟大多数人一样,看到这个方法你很容易想到在java的垃圾回收中应用。在java编程思想中有这样的描述,java的垃圾回收器负责回收无用对象占据的内存资源,但也存在特殊情况:假定你的对象并非是使用java的关键词new获得的一块特殊的内存区域,由于垃圾回收器只知道释放那些经由new分配的内存,所以它不知道该如何释放该对象的这块特殊的内存。为了应对这样的情况,java允许在类中定义一个名为finalize()的方法。你可能会疑问,java中一切都是对象,对象占用的存储空间还有不通过new的吗?其实有,我们试想如果在java中调用非java语言如C语言的malloc()方法呢,如果这样不执行free()方法,对于这样的一块空间,垃圾回收器是不是就无法回收呢?

        finalize()的工作原理可以理解为这样:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。

        然而java中的finalize()是区别C++中的析构函数的,因为在C++的析构函数一定会摧毁对象,释放内存的,而java中的对象却并不一定会被垃圾回收 。所以对于java的垃圾回收,我们要牢记三点:

        a.java对象可能不被垃圾回收

        b.垃圾回收类似析构但不等于析构

        c.垃圾回收只做与内存有关的事情

        简单点记忆就是,在finalize方法中做你想在java垃圾回收器执行垃圾回收时必须要做的清理工作。在JVM中,垃圾回收器采用"标记-回收"的原则,对需要清理的对象进行清理,详细的常用方法就不在这里谈了。

2.final关键字

        java中final修饰的三种情况有数据,方法,类。

        当某个类整体定义为final时,就表明了该类无法被继承,由于final类是禁止继承,所以final类中所有的方法都隐式指定为final的,这样无法覆盖该方法。

        当某个方法被定义为final时,就表明了你想把方法锁定,防止任何继承类修改,这样做的另一个目的就是效率,final方法就是同意编译器将针对该方法的所有调用都转为内嵌调用。

        当某个数据(常量,参数变量)被定义为final时,该数据(数值或者对象的引用)在运行中不可改变。不过final修饰的数据必须在定义时给定初始值。

3.finally

        对于没有垃圾回收和析构函数自动调用机制的编程语言来说,finally就很重要了,把回收工作全部放到finally域中,内存总能释放。但对于java有垃圾回收机制而言,finally就是用在除内存之外的资源恢复工作上。

 

© 著作权归作者所有

共有 人打赏支持
Loveror_ahu
粉丝 1
博文 17
码字总数 16911
作品 0
南京
程序员
JAVA final finally finalize区别

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

qq22734179
2014/03/21
0
0
03《Java核心技术》之谈谈final、finally、 finalize有什么不同?

一、提出问题 Java 语言有很多看起来很相似,但是用途却完全不同的语言要素,这些内容往往容易成为面试官考察你知识掌握程度的切入点。 今天,我要问你的是一个经典的 Java 基础题目,谈谈 ...

飞鱼说编程
09/14
0
0
Java finalize方法

《JAVA编程思想》: java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize()。 (1).对象不一定会被回收。 (2).垃圾回收不是析构函数。 (3).垃圾回收只与内存有关。 (4)....

清风伴月
2017/10/22
0
0
Java深究之final、finally、finalize三者的区别

在java中final、finally、finalize三者在写法上很相近,但是实际含义和作用却是相差甚远。本文主要是来深层的研究下这三者的用法以及之间的区别 1.final 属性:java中的关键字,修饰符 作用:...

MaxBill
06/29
0
0
异常处理——finally的特点、作用及面试题

finally的特点: (1) 是异常处理的一部分,用于释放资源; (2) 一般来说,被finally控制的代码一定会执行; (3) 特殊情况:如果在执行到finally之前jvm退出了(比如:System.exit(0),但是,...

G_66_hero
09/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

原型模式

1、原型模式-定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 克隆(浅度克隆->拷贝值类型或者引用,深度克隆->创建新的对象,开辟新的内存) 例如客户端知道抽象Pro...

阿元
今天
47
0
awk命令扩展使用操作

awk 中使用外部shell变量 示例1 [root@centos01 t1022]# A=888[root@centos01 t1022]# echo "" | awk -v GET_A=$A '{print GET_A}'888[root@centos01 t1022]# echo "aaaaaaaaaaaaa" | aw......

野雪球
今天
41
0
深入解析MySQL视图VIEW

Q:什么是视图?视图是干什么用的? A:视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。   通过视图,可以展现基表的部分数据;...

IT--小哥
今天
45
0
虚拟机学习之二:垃圾收集器和内存分配策略

1.对象是否可回收 1.1引用计数算法 引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时候计数器值为0的对象就是不可能...

贾峰uk
今天
40
0
smart-doc功能使用介绍

smart-doc从8月份底开始开源发布到目前为止已经迭代了几个版本。在这里非常感谢那些敢于用smart-doc去做尝试并积极提出建议的社区用户。因此决定在本博客中重要说明下smart-doc的功能,包括使...

上官胡闹
昨天
47
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部