final、finally和finalize的区别
2017-01-07 00:36
351 查看
1.fianl主要用于修饰类、变量和方法,其中修饰的类为不可变类,该类不可以被继承
修饰的方法不可以被重写
修饰的变量为变常量,这种变量经过一次初始化之后就不能在被修改值了。初始化final变量有四种情况:
2.fianlly用于处理异常捕获的try/catch语句中,不管try/catch语句最终会怎样,finally语句的内容都会被执行,就算是return也会在return之前执行finally语句块里面的内容
3.fianlize是一个方法,它的原生类是java.lang.Object类,该方法是GC运行机制的一部分,在GC清理它所从属的对象时自动调用,如果执行它的过程中抛出了无法捕获的异常,GC将会终止对这个对象的清理,直到下一次GC才会继续调用finalize方法对这个对象进行清理
这是java的面试题,参照出处:http://lib.csdn.net/article/javase/43743
public final class finalClass{ ... }
修饰的方法不可以被重写
public final void finalMethod(){ ... }
修饰的变量为变常量,这种变量经过一次初始化之后就不能在被修改值了。初始化final变量有四种情况:
1.所有的final变量都可以在定义的时候就初始化 public final int a = 1; public static final int sa = 1; 2.非静态final变量可以在非静态初始化块中初始化,不可以在静态初始化块中被初始化 public final int b; { a = 1; } 3.静态final变量与上面的情况相反 public static final int sb; static{ sb = 1; } 4.非静态final变量可以在构造方法中被初始化,但是静态final变量不可以 public final int c; public A(){ c = 1; }
2.fianlly用于处理异常捕获的try/catch语句中,不管try/catch语句最终会怎样,finally语句的内容都会被执行,就算是return也会在return之前执行finally语句块里面的内容
try{ throw new Exception("自定义异常"); } catch(Exception e){ System.out.println(e.getMessage()); } finally{ System.out.println("就算你抛出了异常,也不能打断我的执行"); }
3.fianlize是一个方法,它的原生类是java.lang.Object类,该方法是GC运行机制的一部分,在GC清理它所从属的对象时自动调用,如果执行它的过程中抛出了无法捕获的异常,GC将会终止对这个对象的清理,直到下一次GC才会继续调用finalize方法对这个对象进行清理
public class defineClass{ @Override public void finalize(){ System.out.println("执行了finalize方法"); } public static void main(String[] args){ defineClass dc = new defineClass(); dc = null; //调用GC System.gc(); //也可以Runtime.getRuntime().gc(); } }
这是java的面试题,参照出处:http://lib.csdn.net/article/javase/43743
相关文章推荐
- Linux下使用samba工具共享文件
- 迭代字典中的key和value
- 迭代字典中的key和value
- windows下,源码配置Laravel5.3
- C++的链表操作
- 2016.1.28日记
- LA3942 Remember the Word(Trie+DP)
- [19]CSS3 过渡效果
- 解决Spring框架的Dao层改用@Repository注解,无法使用JdbcDaoSupport的问题
- redis安装,启动
- 赠维敏
- Java之守护线程与用户线程
- 读书笔记(三)
- 问题 D: 单词替换
- java知识总结(十)反射和代理
- 单片机开发新架构---时间片轮询
- Dialog弹窗
- phoneGap+android之搭建环境
- mybatis入门_一对多,多对多映射以及整合spring框架
- Unity将来时:IL2CPP是什么?