文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周五乱弹 —— 这就是不要女朋友的理由

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @狄安娜的猫 :分享丁家鑫的单曲《丁家鑫 - 克罗地亚狂想曲 - 古筝remix》 《丁家鑫 - 克罗地亚狂想曲 - 古筝remix》 手机党少年们想听歌,请...

小小编辑
28分钟前
160
7
CentOS配置Tomcat监听80端口,虚拟主机

Tomcat更改默认端口为80 更改的配置文件是: /usr/local/tomcat/conf/server.xml [root@test-a ~]# vim /usr/local/tomcat/conf/server.xml # 找到 Connector port="8080" protocol="HTTP/1......

野雪球
今天
5
0
《稻盛和夫经营学》读后感心得体会3180字范文

《稻盛和夫经营学》读后感心得体会3180字范文: 一代日本经营之圣稻盛和夫凭借刻苦勤奋的精神以及深植于佛教的商业道德准则,成为了“佛系”企业家的代表人物。在《稻盛和夫经营学》“领导人...

原创小博客
今天
4
0
java框架学习日志-5(常见的依赖注入)

依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入。 依赖——指bean对象创建依赖于...

白话
今天
5
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部