final/finalize/finally的区别

转载 2015年07月07日 22:11:19

一、性质不同

(1)final为关键字;

(2)finalize()为方法;

(3)finally为为区块标志,用于try语句中;

二、作用

(1)final为用于标识常量的关键字,final标识的关键字存储在常量池中(在这里final常量的具体用法将在下面进行介绍);

(2)finalize()方法在Object中进行了定义,用于在对象“消失”时,由JVM进行调用用于对对象进行垃圾回收,类似于C++中的析构函数;用户自定义时,用于释放对象占用的资源(比如进行I/0操作);

(3)finally{}用于标识代码块,与try{}进行配合,不论try中的代码执行完或没有执行完(这里指有异常),该代码块之中的程序必定会进行;

三、final详解

1定义变量

1.1  final定义基本类型变量时,要求变量初始化必须在声明时或者构造函数中,不能用于其它地方。该关键字定义的常量,除了初始化阶段,不能更改常量的值。

1.2  final定义对象的引用,该引用的初始化与定义常量时的要求一致;该关键字定义的对象内容可以改变,但是引用指向的地址不能改变;

2定义参数

如果传入该参数定义的变量时,方法不能对该参数内容进行修改(错误),与定义变量的修改规则相同;java方法中传递基本类型时是传值的,java方法对于对象的传递是传参的;<归根结底,java中方法的传递是依靠传递“副本”:对于基本类型,首先建立一个Copy,并将传入的赋值给Copy,然后对Copy进行操作;对于对象类型,首先建立一个引用Copy,并将传入的对象引用赋值给Copy>

比如:method(final int test);

有些书上说,这里final定义参数,尤其是对象的参数很有作用,不能在方法内对于对象的内容进行改变,这样的说法是错误的!原来我也认为这样有些函数式编程的特点,不能对于对象的内容进行修改该,这里依旧可以对对象的内容进行修改。

??定义该参数有什么用??

String天生就是final类型的!

3定义方法

(1)使用final关键字定义的方法,不能被子类继承;

(2)允许编译器将所有对此方法的调用转化为inline(行内)行为,即可以将此方法直接复制在调用处,而不是进行例行的方法调用(保存断点、压栈),这样会使程序的效率升高。但是---------如果过多的话,这样会造成代码膨胀,反而会影响效率,所以该方法要慎用。。

4定义类

一个任何final类无法被任何人继承,这也就意味着此类在一个继承树中是一个叶子类,并且此类被认为是很完美的,不需要进行任何修改(总之是不推荐使用)

转自:http://www.cnblogs.com/mengyan/archive/2012/08/21/2649473.html

1.浅谈final,finally,finalize的区别。

final修饰符(关键字)如果一个类被申明为final,意味着它不能再派生出新的子类,不能作为父类被继承,因此一个类不能既被声明为abstract的,又被声明为final的。将变量和方法声明为fina...
  • lx666lx
  • lx666lx
  • 2016年09月11日 20:13
  • 504

final、finally、finalize区别

Final用于修饰类、成员变量和成员方法。final修饰的类,不能被继承(String、StringBuilder、StringBuffer、Math,不可变类),其中所有的方法都不能被重写,所以不能...
  • Beixiaozhang
  • Beixiaozhang
  • 2016年10月28日 14:19
  • 4221

阐述final、finally、finalize的区别

- final:修饰符(关键字)有三种用法:如果一个类被声明为final,意味着它不能再派生出新的子类,即不能被继承,因此它和abstract是反义词。将变量声明为final,可以保证它们在使用中不被...
  • u014136713
  • u014136713
  • 2016年05月13日 18:18
  • 815

Java中final,finalize和finally的区别

Java中final,finalize和finally的区别 final final关键字可以用于类,方法,变量前,用来表示该关键字修饰的类,方法,变量具有不可变的特性。 (1)final关键字...
  • cassiePython
  • cassiePython
  • 2016年01月19日 21:34
  • 2029

简述java中的final、finally、finalize的差别

(1)final:可以作为修饰符修饰变量、方法和类,被final修饰的变量只能一次赋值;被final修饰的方法不能够在子类中被重写(override);被final修饰的类不能够被继承。   (2)f...
  • u011659172
  • u011659172
  • 2013年11月14日 22:46
  • 6521

谈谈 final、finally、finalize 的区别

1、final 修饰符(关键字) 如果一个类被final修饰,意味着它不能再派生出新的子类,不能作为父类被继承。因此,一个类不能既被声明为abstract,又被声明为final。 如果一个方法被fin...
  • qwdafedv
  • qwdafedv
  • 2015年07月31日 08:40
  • 1056

final,finally和finalize的区别

final,finally和finalize的区别 一.总体区别 final       用于申明属性,方法和类,表示属性不可变,方法不可以被覆盖,类不可以被继承。 finally     是异...
  • u010093630
  • u010093630
  • 2014年07月31日 23:43
  • 2170

final、finally、finalize修饰符的区别

1.final修饰符的作用: 若一个类被声明为final
  • tianwei11
  • tianwei11
  • 2014年06月01日 14:00
  • 1836

java中final,finally,finalize三个关键字的区别

final 当这个关键字修饰一个类时,意味着他不能派生出新的子类,也就是说不能被继承,因此一个类不能被同时声明为abstract和final。当final修饰变量或者方法时,可以保证他们在使用中不会...
  • NDboy
  • NDboy
  • 2015年05月06日 14:06
  • 3630

final、finalize 和 finally 的不同之处

今天来谈一下final、finalize 和 finally 的不同之处: 看到这样的一道面试题: final、finalize 和 finally 的不同之处? final 是一个修饰符,可以修...
  • qq_32575047
  • qq_32575047
  • 2017年12月17日 16:04
  • 88
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:final/finalize/finally的区别
举报原因:
原因补充:

(最多只允许输入30个字)