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()中用本地方法调用它。

final 、finally 和 finalize()的区别的更多相关文章

  1. 异常-面试题之final,finally和finalize的区别,如果在finally之前有return

    package cn.itcast_07; /* * 面试题: * 1:final,finally和finalize的区别 * final:最终的意思,可以修饰类,成员变量,成员方法 * 修饰类,类不 ...

  2. final,finally和finalize的区别

    package com.heima.test; public class Test1 {  /**  * * A:面试题1   * final,finally和finalize的区别   * fina ...

  3. final, finally 和finalize的区别

    final 修饰符(关键字) 如果一个类被声明为final,意味着它不能再派生新的子类,不能作为父类被继承.因此一个类不能及被声明为abstract,又被声明为final的.将变量或方法声明为fina ...

  4. java中final,finally和finalize的区别

    final,finally和finalize的区别: final:最终的意思,可以修饰类,成员变量,成员方法 修饰类,类不能被继承 修饰变量,变量是常量 修饰方法,方法不能被重写 finally:是异 ...

  5. final、finally和finalize的区别

    final.finally和finalize的区别 这三者的区别可以从两个方面来说 1.意思解释方面 (1)final是修饰符(关键字) (2)finally是异常处理中的程序块 (3)finaliz ...

  6. 【Java面试题】19 final,finally和finalize的区别

    总体区别 final       用于申明属性,方法和类,表示属性不可变,方法不可以被覆盖,类不可以被继承.finally     是异常处理语句结构中,表示总是执行的部分. finallize   ...

  7. Java基础知识总结--final、finally、finalize的区别

    谈谈final.finally.finalize的区别 1.final修饰符:如果一个类被声明为final,意味着这个类不能再被派生出新的子类,不能作为父类被别的类继承.因此,一个类不能即被声明为ab ...

  8. Android源码中final关键字的用法及final,finally,finalize的区别

    Android开发的学习流程 final,finally,finalize的区别 Android的发展越来越快,Android开发人员越来越多,当两种情况碰撞,在诸多开发者中跟紧Android步伐脱颖 ...

  9. 【Java面试题系列】:Java中final finally finalize的区别

    本篇为[Java面试题系列]第三篇,文中如有错误,欢迎指正. 第一篇链接:[Java面试题系列]:Java基础知识常见面试题汇总 第一篇 第二篇链接:[Java面试题系列]:Java基础知识常见面试题 ...

  10. Java中final,finally和finalize区别

    Day11_SHJavaTraing_4-18-2017 Java中final,finally和finalize区别 1.final—修饰符(关键字) ①final修饰类,表示该类不可被继承 ②fin ...

随机推荐

  1. 本地ssh连接到vbox中的linux

    本机是window xp系统, 安装vbox,在vbox下安装linux,想在xp中用ssh连接linux,此时需要配置网络. 1.设置vbox的网络,选择host-only 2.设置window虚拟 ...

  2. HDU5835

    Danganronpa Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  3. SDWebImage源码解读之干货大总结

    这是我认为的一些重要的知识点进行的总结. 1.图片编码简介 大家都知道,数据在网络中是以二进制流的形式传播的,那么我们该如何把那些1和0解析成我们需要的数据格式呢? 说的简单一点就是,当文件都使用二进 ...

  4. wince开发环境搭建与全套教程

    http://www.cnblogs.com/zhchongyao/archive/2010/12/28/1919176.html http://blog.csdn.net/weiren2006/ar ...

  5. PROC UNIVARIATE过程

    EDA(探索性数据分析)最常用的过程步之一就是PROC UNIVARIATE. 首先先看一个最简单的PROC UNIVARIATE程序: PROC UNIVARIATE DATA=SASHELP.FI ...

  6. js在新页面中返回到上一页浏览的历史位置

    在微信浏览器中浏览页面时,在当前页面中当我们将页面往下滚动到某一个位置时,可能我们就会点击某个链接而页面跳转到了另外一个页面,而当我们又返回到上一个页面时我们会发现那个页面还停留在我们之前浏览的位置, ...

  7. Eclipse 报java.lang.UnsupportedClassVersionError: ("yourclass") bad major version at offset=6

    报这个错误是指你的jar包或者class 的被编译的jdk版本比当前runtime的jdk版本高. 解决问题 1)如果是jar包,重新用jdk 1.6编译你的jar 包 2)如果是java文件或者项目 ...

  8. EntityFramework Core并发导致显示插入主键问题

    前言 之前讨论过EntityFramework Core中并发问题,按照官网所给并发冲突解决方案以为没有什么问题,但是在做单元测试时发现too young,too siimple,下面我们一起来看看. ...

  9. redis安装-单机版

    环境准备 因为redis使用c语言开发的,如果要运行在linux上,需要gcc-c++的环境.那么我们就要先看一下是否安装了gcc-c++如果没有的话,需要在虚拟机上安装gcc-c++环境(友情提示, ...

  10. Node.js学习笔记(一)基础介绍

    什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...