A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lxww 中级黑马   /  2013-3-17 22:22  /  1977 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄玉昆 于 2013-3-18 10:17 编辑

关于final, finally, finalize的之间区别,最好有代码详细说明用法,帮助理解透彻!!!

点评

请不要问重复性的问题,谢谢  发表于 2013-3-17 22:47

9 个回复

倒序浏览
本帖最后由 李松柏 于 2013-3-17 22:46 编辑

1、final
final关键字

我们首先来说说final。它可以用于以下四个地方:
a. 定义变量,包括静态的和非静态的
b. 定义方法的参数
c. 定义方法
d. 定义类

被final修饰的变量必须被初始化。初始化的方式有以下几种:
1. 在定义的时候初始化.
2. final变量可以在初始化块中初始化,不可以在静态初始化块中初始化.
3. 静态final变量可以在静态初始化块中初始化,不可以在初始化块中初始化.
4. final变量还可以在类的构造器中初始化,但是静态final变量不可以.
  1. public final class FinalTest {
  2. int i = 10;
  3. public static void main(String[] args) {
  4. FinalTest ft = new FinalTest();
  5. ft.i = 99;
  6. System.out.println(ft.i);
  7. }
  8. }
复制代码
运行上面的代码试试看,结果是99,而不是初始化时的10。

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

finally是try后面的语句块之一,无论异常是否抛出,都会执行的语句块

3、finalize
finalize()方法是在 GC 清理它所从属的对象时被调用的,如果执行它的过程中抛出了无法捕获的异常 (uncaught exception),GC 将终止对改对象的清理,并且该异常会被忽略;直到下一次 GC 开始清理这个对 象时,它的 finalize()会被再次调用。 由于 finalize()属于 Object 类,因此所有类都有这个方法,Object 的任意子类都可以重写(override)该方法, 在其中释放系统资源或者做其它的清理工作,如关闭输入输出流。

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
  1. public static void main(String[] args) {
  2.                   final String string = "aaa";
  3.                   try {
  4.                           //string = "bbb";该代码无法执行,因为string是final的
  5.                           //所以无法改变
  6.                         System.out.println("string:" + string);
  7.                 } catch (Exception e) {
  8.                         e.printStackTrace();
  9.                 } finally{
  10.                         //该代码说明,无论try代码块中是否出现异常,下面的输出一句都将执行
  11.                         System.out.println("fainally");
  12.                 }
  13.         }
复制代码
至于finalize,它是用于销毁对象,通常无需我们主动调用
回复 使用道具 举报
这个论坛上应该有相关的帖子提到过。

final:
一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。
例子:所有类的父类Object中的著名方法
  1. public final Class<?> getClass()
复制代码
finally:
在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
例子:比如IO流中最后一定要关流
  1. try{
  2.         //输入和输出代码
  3.         sop(“举例子”)
  4.    }
  5. catch(exception e)
  6. {
  7.       //处理异常代码
  8. }
  9. finally
  10. {
  11.      fWrite.close();
  12.      fRead.close();
  13. }
复制代码
finalize():
    这个方法就是所谓清理垃圾的。是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
回复 使用道具 举报
黄玉昆 发表于 2013-3-17 22:48
http://bbs.itheima.com/thread-41554-1-1.html
http://bbs.itheima.com/forum.php?mod=viewthread&tid=412 ...

额。没注意。呵呵。我看概念的时候。觉得不懂。就直接问了。
回复 使用道具 举报
黄玉昆 黑马帝 2013-3-17 22:52:58
7#
kingdom_202 发表于 2013-3-17 22:50
额。没注意。呵呵。我看概念的时候。觉得不懂。就直接问了。

其实你可以先通过搜索帖子,看有没有相似的帖子,这样可以节省你很多时间的。而且看别人的帖子,对自己是很大的提高。
回复 使用道具 举报
lxww 中级黑马 2013-3-17 22:56:44
8#
黄玉昆 发表于 2013-3-17 22:52
其实你可以先通过搜索帖子,看有没有相似的帖子,这样可以节省你很多时间的。而且看别人的帖子,对自己是 ...

哦哦。新手上路,不了解。慢慢学习吧。谢谢版主指点!少走一些弯路!
回复 使用道具 举报
黄玉昆 黑马帝 2013-3-17 23:00:04
9#
kingdom_202 发表于 2013-3-17 22:56
哦哦。新手上路,不了解。慢慢学习吧。谢谢版主指点!少走一些弯路!

http://bbs.itheima.com/thread-37645-1-1.html
这里有关于论坛发言的一些小技巧,希望对你有帮助,还有你可以看看版规,里面的很多链接都能让你玩转论坛的,节省很多时间的:
http://bbs.itheima.com/thread-39536-1-1.html
回复 使用道具 举报
lxww 中级黑马 2013-3-17 23:04:15
10#
黄玉昆 发表于 2013-3-17 23:00
http://bbs.itheima.com/thread-37645-1-1.html
这里有关于论坛发言的一些小技巧,希望对你有帮助,还有 ...

好的。学习了。呵呵!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马