黑马程序员技术交流社区

标题: finally面试题 [打印本页]

作者: 没有等待的花蕾    时间: 2015-6-3 21:21
标题: finally面试题
面试题:
  1:请问final,finally,finalize的区别?
                final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。
                finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
                finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

2:finally里面的代码真的永远会执行吗?
                不一定,如执行了finally前执行了System.exit(0);或者断电了
                                但是有一个特殊情况:在代码执行到finally之前,jvm就退出了。

3:加入在catch里面有return语句,请问finally里面的代码还会执行吗?如果执行,是在return前,还是return后?
                会执行。在return前执行。
                准确答案:在return之间执行。
*/
class FinallyTest {
        public static void main(String[] args) {
                // method1();
                // method2();

                int result = method3();
                System.out.println(result);
        }

        private static int method3() {
                int a = 10;
                try {
                        System.out.println(a / 0);
                        System.out.println("a1:" + a);
                } catch (ArithmeticException ae) {
                        System.out.println("a2:" + a); // a2:10
                        a = 20;
                        return a; //这个时候,在内存中就会有一个路径产生,该路径返回值是20.
                                          //但是,它看到了finally代码块,所以,继续执行finally里面的内容               
                                          //当finally里面结束后,会回到以前的执行路径。
                } finally {
                        System.out.println("a3:" + a); // a3:20
                        a = 30;
                        System.exit(0);
                        //return a;
                }
        return a;
        }

        private static void method2() {
                int a = 10;
                int b = 0;
                try {
                        System.out.println(a / b);
                } catch (ArithmeticException ae) {
                        ae.printStackTrace();
                        return;
                } finally {
                        System.out.println("over");
                }
        }

        private static void method1() {
                int a = 10;
                int b = 0;
                try {
                        System.out.println(a / b);
                } catch (ArithmeticException ae) {
                        ae.printStackTrace();
                        System.exit(0);
                } finally {
                        System.out.println("over");
                }
        }
}
作者: 东邪    时间: 2015-6-3 22:57
挺不错的,就是你的代码要多加点注释。
作者: q757571446    时间: 2015-6-3 23:04
受教了,尽管里面绝大多数方法我都没见过。基础班的路过
作者: 下一页5    时间: 2015-6-3 23:11
牛逼啊不错
作者: 杜黎明    时间: 2015-6-3 23:26
很不错  值得学习
作者: jakemind    时间: 2015-6-3 23:30
学习了..................................
作者: 黑马飞    时间: 2015-6-3 23:44
这白花花的代码~~~
作者: 灞波儿奔    时间: 2015-6-3 23:52
恩  写的不错。
作者: 雪域星辰    时间: 2015-6-3 23:53
共同学习。加油吧。。。
作者: 平底斜    时间: 2015-6-3 23:58
0508的大婶你好
作者: 定格在永远    时间: 2015-6-4 00:12
顶、、、、、、、、、、、、、、
作者: 夜愿Relax    时间: 2015-6-4 00:21
可能会考的面试题
作者: qian0217wei    时间: 2015-6-4 00:50
谢谢分享,不过你技术分连十分都不到,怎么面的试?
作者: 追忆似水年华    时间: 2015-6-4 08:37
学习学习。
作者: kmlitheima    时间: 2015-6-4 09:25
恩,一直对这个知识点不是特别清楚!
作者: 景彬    时间: 2015-6-4 10:04
总结的很到位哦~
作者: 悦鹏    时间: 2015-6-4 10:29
我靠比老师总结的还细?好牛X
作者: Aelous_6    时间: 2015-6-4 11:27
。被声明为final的方法也同样只能使用,不能重载。   应该是不能被重写吧。亲 ?
作者: 探索者    时间: 2015-6-4 11:45
不错,支持一下
作者: zheng72566    时间: 2015-6-4 11:50
学习学习....
作者: 志行    时间: 2015-6-4 11:51
这个是黑马面试的面试题吗,终于看懂了那个代码是如何判断retrun先运行还是后运行了 高手
作者: hellotaomi    时间: 2015-6-4 14:23
学习啦~
作者: 星辉祝愿    时间: 2015-6-4 14:33
很不错  值得学习
作者: 没有等待的花蕾    时间: 2015-6-5 00:16
Aelous_6 发表于 2015-6-4 11:27
。被声明为final的方法也同样只能使用,不能重载。   应该是不能被重写吧。亲 ? ...

重载是在同一类中的,重写是存在继承关系的两个雷里面的
作者: 守株人    时间: 2015-6-5 00:38
谢谢分享,加油哦
作者: 谢晓明    时间: 2015-6-5 00:55
还是要养成写注释的习惯,便于阅读
作者: 欧阳文    时间: 2015-6-5 15:44
谢谢分享.....
作者: 刘健    时间: 2015-6-5 16:36
基础笔记,多做注释方便自己也方便大家
作者: CLAY    时间: 2015-6-5 17:01
挺不错的 学习下
作者: 流水0215    时间: 2015-6-5 18:09
挺不错的,赞一个
作者: 飘过的云    时间: 2015-6-5 21:39
很有心,我上课都没记全,这面试题,学习了,谢谢
作者: redlake    时间: 2015-6-5 21:56
3:加入在catch里面有return语句,请问finally里面的代码还会执行吗?如果执行,是在return前,还是return后?
                会执行。在return前执行。
                准确答案:在return之间执行。
*/
class FinallyTest {
        public static void main(String[] args) {
                // method1();
                // method2();

                int result = method3();
                System.out.println(result);
        }

        private static int method3() {
                int a = 10;
                try {
                        System.out.println(a / 0);
                        System.out.println("a1:" + a);
                } catch (ArithmeticException ae) {
                        System.out.println("a2:" + a); // a2:10
                        a = 20;
                        return a; //这个时候,在内存中就会有一个路径产生,该路径返回值是20.
                                          //但是,它看到了finally代码块,所以,继续执行finally里面的内容               
                                          //当finally里面结束后,会回到以前的执行路径。
                } finally {
                        System.out.println("a3:" + a); // a3:20
                        a = 30;
                        //System.exit(0);
                        //return a;
                }
        return a;
        }

这结果返回的是20喔,不是说明了return之后执行finally语句的吗??
作者: forTomorrow    时间: 2015-6-5 22:12
最后返回值是20还是30
作者: wang649557111    时间: 2015-6-5 22:21
受教了。。。。。。。
作者: Aelous_6    时间: 2015-6-5 22:29
没有等待的花蕾 发表于 2015-6-5 00:16
重载是在同一类中的,重写是存在继承关系的两个雷里面的

是啊,  被声明为final的方法也同样只能使用,能重载。 不能被重写、

作者: yang2015    时间: 2015-6-5 22:39
不错,学到了。。。
作者: 灵界    时间: 2015-6-6 00:24
过来学习学习
作者: Monster    时间: 2015-6-6 08:05
不错学习了
作者: qq479470741    时间: 2015-6-6 09:12
finalize方法没接触过,看了你的介绍我才知道,有个错误:被final修饰的方法是不能重写,不是重载。
作者: zw937820438    时间: 2015-6-6 10:07
写的挺详细, 赞一下

作者: 李俊超    时间: 2015-6-6 10:46
学以致用呀。。。
作者: zuoyou    时间: 2015-6-6 10:55
好吧!又复习了,,,
作者: gghost2012    时间: 2015-6-6 12:37
赞一个!!!!!
作者: canyellwang    时间: 2015-6-6 16:03
记下了                       
作者: 十字天堂    时间: 2015-6-6 20:11
围观一下.......
作者: feng0606    时间: 2015-6-6 21:04
长知识啊,学习了.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2