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. removeEventListener('2016');

    2016----最后一天工作日要快结束了,趁剩下的一点时间写篇博客玩玩,想到啥就写啥.总结下来就一句---累并快乐着... 先祝大家新年快乐!万事如意发大财. 一年跳了三家公司,上半年在家小公司干着整 ...

  2. js精要之继承

    // 继承object.prototype的方法 // hasOwnProperty() //检查是否存在一个给定名字的自有属性 // propertyIsEnumerable() // 检查一个自有 ...

  3. 2017年试试Web组件化框架Omi

    Open and modern framework for building user interfaces. Omi的Github地址https://github.com/AlloyTeam/omi ...

  4. win10更新时遇到错误0x80070002的正确处理方法

    win10更新Flash Player.或者在  “启用或关闭windows功能” 经常出现提示错误0x80070002,这要怎么解决呢?这里介绍下正确的错误代码0x80070002解决办法. 严肃提 ...

  5. ion-scroll zooming="true" android端无法缩放的问题

    很久很久没更新博客了,从今天开始决定以后陆续写一些博文,总结下自己在开发中碰到的问题. ionic项目.ion-scroll zooming="true" 在android端无法缩 ...

  6. Linq 集合操作

    Linq 集合操作 演示代码 两个对象一个是Person,一个Address, AddressId是外键, public class Person { public string ID { get; ...

  7. assign和weak的深层次解析

    我们知道在设置类的属性时,控件一般中weak,对象一般用strong,数据类型一般使用assign,其中weak和assign都不会使计数器增加,那为什对象不可以使用assign呢? weak与ass ...

  8. 自己动手系列——实现一个简单的LinkedList

    LinkedList与ArrayList都是List接口的具体实现类.LinkedList与ArrayList在功能上也是大体一致,但是因为两者具体的实现方式不一致,所以在进行一些相同操作的时候,其效 ...

  9. 快速排序的C语言实现

    #include <stdio.h> int qSort(int a[],int i,int j) { int h = i; int r = j; int x = a[h]; int f ...

  10. 复制vmware中的centos后无法上网问题

    复制vmware中的centos后无法上网问题 查看IP命令 ip addr 网卡信息 eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000 使用的是e ...