Java中final、finally 和 finalize
来源:互联网 发布:郑州财经学院网络管 编辑:程序博客网 时间:2024/06/05 07:27
一 final
final可以用来修饰:
1. 变量
若修饰基本类型,则表示常量
若修饰引用类型,则表示此变量被赋予的引用是不可变的,但其指向的对象是可变的
若修饰方法的形参,则此形参在方法体内部不可以被赋值
还有一种更贴切的说法,若一个变量或方法参数被final修饰,就表示它只能被赋值一次,但是Java虚拟机为变量设定默认值不记做一次赋值。
被final修饰的变量必须被初始化,有以下几种方式:
在定义的时候被初始化;
final修饰的变量可以在初始化块里或方法构造器里被初始化,不可以在静态初始化快里被初始化;
final修饰的静态变量可以在静态初始化块里被初始化,不可以在初始化块里被初始化。
这里顺便插一句,static{}语句块是在类被load时只执行一次,而{}语句块是在每次实例化对象时都执行。
2. 方法
final修饰的方法不可以被重写,但可以被继续。
具有private访问权限的方法也可以增加final修饰,但是由于子类无法继续private方法,因此也无法重写它。编译器在处理private方法时,是按照final方法来对待的,这样可以进步该方法被调用时的效率。不过子类仍然可以定义同父类中的private方法具有同样结构的方法,但是这并不会产生重写的效果,而且它们之间也不存在必然联系。
3. 类
我们最常用的String类就是final的。由于final类不答应被继续,编译器在处理时把它的所有方法都当作final的,因此final类比普通类拥有更高的效率。而由关键字abstract定义的抽象类含有必须由继续自它的子类重载实现的抽象方法,因此无法同时用final和abstract来修饰同一个类。同样的道理,final也不能用来修饰接口。final的类的所有方法都不能被重写,但这并不表示final的类的属性(变量)值也是不可改变的,要想做到final类的属性值不可改变,必须给它增加final修饰。
二 finally
它只能用在try/catch语句中,并且附带着一个语句块,表示这段语句终极总是被执行。
final可以用来修饰:
1. 变量
若修饰基本类型,则表示常量
若修饰引用类型,则表示此变量被赋予的引用是不可变的,但其指向的对象是可变的
若修饰方法的形参,则此形参在方法体内部不可以被赋值
还有一种更贴切的说法,若一个变量或方法参数被final修饰,就表示它只能被赋值一次,但是Java虚拟机为变量设定默认值不记做一次赋值。
被final修饰的变量必须被初始化,有以下几种方式:
在定义的时候被初始化;
final修饰的变量可以在初始化块里或方法构造器里被初始化,不可以在静态初始化快里被初始化;
final修饰的静态变量可以在静态初始化块里被初始化,不可以在初始化块里被初始化。
这里顺便插一句,static{}语句块是在类被load时只执行一次,而{}语句块是在每次实例化对象时都执行。
2. 方法
final修饰的方法不可以被重写,但可以被继续。
具有private访问权限的方法也可以增加final修饰,但是由于子类无法继续private方法,因此也无法重写它。编译器在处理private方法时,是按照final方法来对待的,这样可以进步该方法被调用时的效率。不过子类仍然可以定义同父类中的private方法具有同样结构的方法,但是这并不会产生重写的效果,而且它们之间也不存在必然联系。
3. 类
我们最常用的String类就是final的。由于final类不答应被继续,编译器在处理时把它的所有方法都当作final的,因此final类比普通类拥有更高的效率。而由关键字abstract定义的抽象类含有必须由继续自它的子类重载实现的抽象方法,因此无法同时用final和abstract来修饰同一个类。同样的道理,final也不能用来修饰接口。final的类的所有方法都不能被重写,但这并不表示final的类的属性(变量)值也是不可改变的,要想做到final类的属性值不可改变,必须给它增加final修饰。
二 finally
它只能用在try/catch语句中,并且附带着一个语句块,表示这段语句终极总是被执行。
public final class FinallyTest { public static void main(String[] args) { try { throw new NullPointerException(); } catch (NullPointerException e) { System.out.println("程序抛出了异常"); } finally { System.out.println("执行了finally语句块"); } } }
运行结果说明了finally的作用:
1. 程序抛出了异常
2. 执行了finally语句块
留意:return、continue、break无法阻止finally语句的执行,由于对于每个try块可以引起退出的语句,在bytecode层面上都会有一个指定的字节码与finally关联.,因此,finally肯定会被执行。但System.exit(0)可以。
三 finalize()
由于finalize()属于Object类,因此所有类都有这个方法,Object的任意子类都可以重写(override)该方法,在其中开释系统资源或者做其它的清理工作,如封闭输进输出流。
原文地址:http://www.csdnjava.com/thread-42983-1-1.html
- Java中final、finally 和 finalize
- JAVA中final、finally、finalize
- Java中final、finally、finalize
- JAVA中final、finally、finalize
- Java中 final finally finalize
- Java-final,finally和finalize
- Java中final、finally和finalize的区别
- java中final-finally-finalize和abstract-interface简介
- Java中final、finally和finalize的区别(转)
- Java中final,finally和finalize的区别
- Java中final、finally和finalize的区别
- Java中final、finally和finalize的区别(转)
- Java中final、finally和finalize的区别
- Java中final,finalize和finally的区别
- Java中 final,finally和finalize的区别
- Java中final、finally 和 finalize 的区别
- Java 中 final、finally 和 finalize 使用总结
- java final,finally,finalize
- 【JAVA】File Search Tool
- Windows Phone本地数据库性能最佳实践
- c#获取当前路径的方法集合
- HDU-1280 HASH
- 图片二进制互相转换C#
- Java中final、finally 和 finalize
- Windows Phone 7的XML操作详解:读取,过滤以及数据绑定
- 怎样判断ios app 第一次启动
- MPICH安装后jumpshot未安装的解决方法
- USACO section 1.4.3 Arithmetic Progressions
- iPhone程序包结构
- StringBuffer、StringBuilder与String剖析
- TCO2012Round1B-2-FoxAndDoraemon
- 无刷新对表格的一列排序