- 浏览: 25061 次
- 来自: 北京
最新评论
一 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语句中,并且附带着一个语句块,表示这段语句最终总是被执行。
运行结果说明了finally的作用:
1. 程序抛出了异常
2. 执行了finally语句块
注意:return、continue、break无法阻止finally语句的执行,因为对于每个try块可以引起退出的语句,在bytecode层面上都会有一个指定的字节码与finally关联.,因此,finally肯定会被执行。但System.exit(0)可以。
三 finalize()
由于finalize()属于Object类,因此所有类都有这个方法,Object的任意子类都可以重写(override)该方法,在其中释放系统资源或者做其它的清理工作,如关闭输入输出流。
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)该方法,在其中释放系统资源或者做其它的清理工作,如关闭输入输出流。
发表评论
-
单例模式Singleton
2012-03-22 16:36 0public class Printer { privat ... -
Java数字金字塔
2012-03-18 00:39 3249用java实现如下: 1 12 ... -
Java StringBuffer调用append时的空指针异常
2012-03-16 18:02 2298StringBuffer s = null; System ... -
Java中的17种常用正则表达式
2012-03-15 14:04 87001、"^d+$" //非负整数(正整数 ... -
Java求连续和为某数的数字序列
2012-03-15 14:02 1186public class ContinuousSum { ... -
Java找出数组中唯一的出现奇数次的数
2012-03-15 14:00 2600import java.util.*; public c ... -
Java统计文档中英文单词个数
2012-03-15 13:57 4000public class CountWords { p ... -
Java中自增自减、按位、移位运算符
2012-03-11 09:58 1988一 自增与自减运算符遵循以下规律: 1. 可以用于整数类型b ... -
JAVA中String的生成、串接及其intern()方法
2012-03-11 09:59 1180public class StringTest { ... -
Java子类和父类的初始化过程中变量和方法的隐藏与覆盖
2012-03-11 09:59 1313class Parent{ ... -
Java中基础数据类型和String之间的转换
2012-03-11 09:59 8521 如何将字串 String 转换成整数 int? A. ... -
Java中字符串倒序
2012-03-10 15:52 1266//转换成字符数组逆序输出 public static ... -
Java中继承情况下类的初始化顺序
2012-03-10 15:51 621父类--静态变量 父类--静态初始化块 子类--静态变量 ... -
Java String杂谈
2012-03-10 15:49 5601. public class ChineseTest { ... -
Java中的基本类型
2012-03-10 15:20 7801 对于基本类型void以 ...
相关推荐
Java中final,finally,finalize三个关键字的区别_动力节点Java学院整理
一,谈谈final, finally, finalize的区别。 java面试题
主要介绍了java 基础之final、finally和finalize的区别的相关资料,需要的朋友可以参考下
主要介绍了详解Java编程中final,finalize,finally的区别,这个在Java面试题中简直是太常见了...需要的朋友可以参考下
Java中final、finally、finalize的区别与用法,困扰了不少学习者,下面我们就这个问题进行一些探讨,希望对大家的学习有所帮助。
对于Java中final、finally、finalize的有关问题做下的思维导图,便于深化记忆,希望对你有帮助!注意:文件为.mm后缀建议下载freemind打开,免费的思维导图软件!
final 是 Java 中的关键字,它也是 Java 中很重要的一个关键字,final 修饰的类、方法、变量有不同的含义;finally 也是一个关键字,不过我们可以使用 finally 和其他关键字结合做一些组合操作; finalize 是一个不...
Java 技术允许使用finalize() 方法在垃圾收集器将对象从内存中清除出去 之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对 象调用的。它是在Object 类中定义的,因此所有的类都...
hi 大家好,今日,天气剧变,非常冷,不想出门,于是给大家写了篇文章,关于android final关键字及final,finally,finalize的区别相关知识,具体详情如下所示: 先预告一下,下文中仅涉及java语法的讨论,和Android...
Java 中的 final、finally 和 finalize 关键字有什么区别? final:当用“final”关键字声明一个变量时,它的值一旦被赋值就不能改变。当使用“final”关键字声明方法时,它不能在子类中被覆盖。当用“final”...
很好的Java面试题第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
典型JAVA面试试题及...finally 通常和try-catch 一起, 在finally 里代码无论是否发生异常都会执行到finalize 是一个方法名。方式是定义在Object 类中, 在对象从内存中释放之前会调用此方法进行一些必要的清理工作。
第一,谈谈final, finally, finalize的区别。 final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个...
1. 描述final﹑finally和finalize的区别。 如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为abstract的,又被声明为final的。将变量声明为final,可以保证...
文章目录: Java异常架构与异常关键字 Java异常简介 ...5. final、finally、finalize 有什么区别? 6. NoClassDefFoundError 和 ClassNotFoundException 区别? 7. try-catch-finally 中哪个部分可以省略?
一,谈谈final, finally, finalize的区别。 Final --修饰符(关键字)。如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此 一个类不能既被 声明为 abstract的,又被声明为...
finalize:Object类中定义的方法,Java中允许使用finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在销毁对象时调用的,通过重写finalize() 方法可以整理系统资源...
Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承...
可以自学java语言的好东东 第一,谈谈final, finally, finalize的区别。 final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract...