final 、finally 和 finalize()的区别

1. final 是一个关键字。可以修饰数据、方法、类。

  • 1)final 数据:final 用来修饰一个永不改变的编译时常量,或者运行时初始化但是不希望被改变的常量。一个既是 static又是 final 的域只占据一段不能改变的存储空间。
  • 2)final 方法:主要是用于把方法锁定,以防任何继承类修改它的含义。
  • 3)final 类:final 类是禁止继承的。

2. finally 是一个关键字

用于捕获异常之后的清理工作。对于没有垃圾回收和析构函数自动调用机制的 java 来说,finally 非常重要。它能使程序员保证,无论 try 块里发生了什么,内存总能得到释放。当要把除内存之外的资源恢复到它们的初始状态时,就要用到 finally 子句。这种需要清理的资源包括:已经打开的文件或网络连接,再屏幕上画的图形,甚至可以是外部世界的某个开关。

3.finalize()是一个方法,用于准备垃圾回收用的。

java 有垃圾回收器负责回收无用对象占据的内存空间,但是也有特殊情况:假定你的对象(并非使用 new)获得了一块『特殊』的内存区域,由于垃圾回收器只知道释放那些经由 new 分配的内存,所以它不知道该如何释放该对象的这块『特殊』内存。为了应对这种情况,java 允许在类中使用 finalize()方法。一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用 finalize()方法,并且在下一次垃圾回收动作发生时,才会真正收回对象占用的内存。所以如果打算用 finaliza()方法,就能再垃圾回收时刻做一些重要的清理工作。

但是 finalize()方法不同于 c++中的析构函数。finalize()的真正用途是什么呢?

因为对于 java 的垃圾回收机制来说,对象可能不被垃圾回收,垃圾回收也不等于析构。最重要的一点,垃圾回收只与内存有关。之所以要有 finalize(),是由于在分配内存时,可能采用了类似 c 语言中的做法,而非 java 中的通常做法。这种情况主要发生再使用『本地方法』的情况下,本地方法是一种在 java 中调用非 java 代码的方式。本地方法目前只支持 c 和 c++,但他们可以掉用其他语言写的代码,所以实际上可以用任何代码。再非 java 代码中,也许会调用 c 的 malloc 函数系列来分配存储空间,而且除非调用 free()函数,否则存储空间将得不到释放,从而造成内存泄露。所系需要在 finalize()中用本地方法调用它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值