Java基础知识强化之IO流笔记06:面试题之如果在finally之前有return

1. 至少有两种情况下finally语句是不会被执行的:

(1)try语句没有被执行到,如在try语句之前return就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。

(2)在try块中有System.exit(0);这样的语句,System.exit(0);是终止Java虚拟机JVM的,连JVM都停止了,所有都结束了,当然finally语句也不会被执行到。

-->1.案例如下:

 1 package com.himi.finallydemo;
 2
 3 public class FinallyDemo2 {
 4
 5     public static void main(String[] args) {
 6         System.out.println(getInt());
 7
 8     }
 9
10     public static int getInt() {
11         int a = 10;
12         try {
13             System.exit(0);
14             System.out.println(a / 0);
15             a = 20;
16
17         } catch (ArithmeticException e) {
18             a = 30;
19             // return a;
20         } finally {
21             a = 40;
22         }
23
24         return a;
25     }
26
27 }

运行效果如下:

上面的getInt()方法中,先执行int a = 10;然后再执行try语句,发现开始就是System.exit(0),这样虚拟机jvm直接退出,随意不会印出任何信息。

-->2. 案例如下:

 1 package com.himi.finallydemo;
 2
 3 public class FinallyDemo2 {
 4
 5     public static void main(String[] args) {
 6         System.out.println(getInt());
 7
 8     }
 9
10     public static int getInt() {
11         int a = 10;
12         try {
13             System.out.println(a / 0);//执行完,直接跳转到第17行
14             System.exit(0);
15             a = 20;
16
17         } catch (ArithmeticException e) {
18             a = 30;
19             // return a;
20         } finally {
21             a = 40;
22         }
23
24         return a;
25     }
26
27 }

运行如下效果:

这里在try语句中执行System.out.println(a / 0),系统会马上捕获到异常直接执行catch语句,然后执行finally语句,最后return a

(此时a是40)

-->3.案例:

 1 package com.himi.finallydemo;
 2
 3 public class FinallyDemo2 {
 4
 5     public static void main(String[] args) {
 6         System.out.println(getInt());
 7
 8     }
 9
10     public static int getInt() {
11         int a = 10;
12         try {
13             System.out.println(a / 0);
14             System.exit(0);
15             a = 20;
16
17         } catch (ArithmeticException e) {
18             a = 30;
19             return a;
20             /*
21              * return a在程序执行到这一步的时候,这里不是return a而是return 30;这个返回路径就形成了。
22              * 但是呢,它发现后面还有finally,所以继续执行fianlly的内容,a=40
23              * 再次回到以前的返回路径,继续走return 30;
24              */
25         } finally {
26             a = 40;
27             //return 40;//如果这样结果就是40
28         }
29
30         return a;
31     }
32
33 }

运行效果如下:

时间: 2024-10-18 05:04:06

Java基础知识强化之IO流笔记06:面试题之如果在finally之前有return的相关文章

Java基础知识强化之IO流笔记17:FileOutputStream构造方法使用

1. 可以参照之前写的笔记:   Android(java)学习笔记167:Java中操作文件的类介绍(File + IO流) 2. FileOutputStream(常用的)构造方法: FileOutputStream(File file)           Constructs a new FileOutputStream on the File file. FileOutputStream(String filename)           Constructs a new FileO

Java基础知识强化之IO流笔记16:IO流的概述和分类

1. IO流的分类   流向:     (1)输入流:读取数据到内存     (2)输出流:写入数据到硬盘(磁盘)   操作的数据类型:    (1)字节流:操作的数据是字节                            输入流                            输出流        (2)字符流:操作的数据是字符,为了方便操作文本数据,Java就提供了字符流.                            输入流                      

Java基础知识强化之IO流笔记66:Properties的概述 和 使用(作为Map集合使用)

1. Properties的概述  Properties:属性集合类.是一个可以和IO流相结合使用的集合类.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串. Properties是Hashtable的子类,说明是一个Map集合. 2. Properties作为Map集合使用 1 package cn.itcast_08; 2 3 import java.util.Properties; 4 import java.util.Set; 5 6 /* 7 *

Java基础知识强化之IO流笔记61:标准输入输出流的本质

1. 标准输入输出流  System类中的两个成员变量: public static final InputStream in :"标准"输入流. public static final PrintStream out :"标准"输出流. 备注: InputStream is = System.in; PrintStream ps = System.out; 代码示例: 1 package cn.itcast_04; 2 3 import java.io.Print

Java基础知识强化之IO流笔记22:FileInputStream / FileOutputStream 复制文本文件案例

1. 使用字节流FileInputStream / FileOutputStream 复制文本文件案例: 分析: (1)数据源:从哪里来 a.txt   --   读取数据  --  FileInputStream (2)目的地:到哪里去 b.txt   --   写数据    --   FileOutputStream 2. 代码示例: 1 package cn.itcast_03; 2 3 import java.io.FileInputStream; 4 import java.io.Fi

Java基础知识强化之IO流笔记68:Properties和IO流集合使用

1. Properties和IO流集合使用 这里的集合必须是Properties集合:  public void load(Reader reader):把文件中的数据读取到集合中  public void store(Writer writer,String comments):把集合中的数据存储到文件 2. 代码实现: 1 package cn.itcast_08; 2 3 import java.io.FileReader; 4 import java.io.FileWriter; 5 i

Java基础知识强化之IO流笔记42:IO流总结(图解)

1. IO流总结(图解)

Java基础知识强化之IO流笔记71:NIO的(New IO流)介绍

1. NIO的(New IO流)介绍     JDK4出现NIO.新IO和传统的IO有相同的目的,都是用于进行输入输出的,但新IO使用了不同的方式来处理输入输出,采用内存映射文件的方式,将文件或者文件的一段区域映射到内存中,就可以像访问内存一样的来访问文件了,这种方式效率比旧IO要高很多,但是目前好多地方我们看到的还是旧IO的引用,所以我们仍以旧IO为主,知道NIO即可.

Java基础知识强化之IO流笔记35:InputStreamReader/OutputStreamWriter 复制文本文件案例01

1. 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中. 数据源:  a.txt -- 读取数据 -- 字符转换流 -- InputStreamReader 目的地:  b.txt -- 写出数据 -- 字符转换流 -- OutputStreamWriter InputStreamReader/OutputStreamWriter不仅是转换流(将字节流转换为字符流),也是字符流Reader/Writer的具体实现子类. 2.代码示例: 1 package cn.itcas