zoukankan      html  css  js  c++  java
  • 40 final、finally、finalize的区别

    1、final

      用于声明属性、方法、类。分别表示属性不可被改变,方法不可被覆盖,类不可被继承。

      (1)一个类不能既被声明为abstract的,又被声明为final的。

      (2)被声明为final的变量必须在声明时给定初值。一般,成员变量有默认值,但是如果是final的成员变量就没有默认值,必须赋初值。

      (3)内部类要访问方法局部变量,局部变量必须定义为final类型。方法中的final局部变量放在堆中,而非栈中。

      (如果局部变量不被标注为final,那么就意味着我们可以随时修改它的值。假设我们在创建了对象后修改了局部变量的值,那么这时我们的内部类所看到的局部变量的值还是之前通过构造函数传递进去的老值,这样就导致内部类和外部函数对该局部变量的值“认识”的不一致。所以final关键字的目的就是为了保证内部类和外部函数对变量“认识”的一致性。)   

    2、finally

      在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 

      完整的异常处理语句一定要包含finally,finally是总会执行的语句。除非以下四种特殊情况发生,finally才不会执行:

    (1)在finally语句块中发生了异常

    (2)在前面代码中用了System.exit()退出程序

    (3)程序所在的线程死亡

    (4)关闭CPU

    注意:前面的代码中就算有return语句,finally还是会执行!

    3、finalize

      Object类的一个方法,因此所有的类都继承了它。

      垃圾收集器执行时会调用被回收对象的此方法。使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。 不保证此方法总被执行。

  • 相关阅读:
    [转]三五个人十来条枪 如何走出软件作坊成为开发正规军
    [转]asp.net页面字体变大问题总结
    [练手7]传值和传引用区别
    [练手3]选择排序
    [练手5]希尔排序
    oracle用select for update 中断后无法操作表的处理:杀掉SESSION
    [转]最省时管理法:让你一天随意
    [练手4]插入排序
    没有对“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files”的写访问权限
    NUnit单元测试编写指南
  • 原文地址:https://www.cnblogs.com/seven7seven/p/3728665.html
Copyright © 2011-2022 走看看