标签:避免 数据 some void double 无法 退出 input 指针
System.exit(0);
,表示退出JVM,那样就执行不到finally了。实例:
package com.bjpowernode.javase.Exception0;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class ExceptionTest10 {
public static void main(String[] args) {
FileInputStream fis = null; // 声明位置放到try外面。这样在finally中才能用。
try {
// 创建输入流对象
fis = new FileInputStream("E:\\三个表数据表.txt");
// 开始读文件....
String s = null; // 这里一定会出现空指针异常!
s.toString();
System.out.println("hello world!");
// 既然有输入流,那用完就需要关闭。放在这里要是上面出现异常,流关不了了。
//fis.close();
} catch (FileNotFoundException e) { //FileInputStream的异常:FileNotFoundException
e.printStackTrace();
} catch(IOException e){ //close的异常:IOException
e.printStackTrace();
} catch(NullPointerException e) { //这个是null的空指针异常;属于运行时异常,可catch可不catch
e.printStackTrace();
} finally {
System.out.println("hello 浩克!");
if (fis != null) { // 判断一下是否有输入流,避免空指针异常!
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
System.out.println("hello kitty!");
}
}
Java中恒古不变的语法:
实例:
package com.bjpowernode.javase.Exception0;
//分析:返回的结果为什么是100呢?
//必须满足上面的三条语法规则,那看起来有些矛盾。
//所以,反编译看一下:先执行i=100,将i=100赋给j,再执行finally里的i++,最后返回j。那么先执行i=100,满足语法;再执行i++,看似跳过了return,不符合语法,但是前面i已经赋值给j了,后面return j,相当于在前面就return i了,因为return j的结果是在i=100之后,并没有进行任何操作。
public class ExceptionTest13 {
public static void main(String[] args) {
int result = m();
System.out.println(result); //100
}
public static int m(){
int i = 100;
try {
// 这行代码出现在int i = 100;的下面,所以最终结果必须是返回100
// return语句还必须保证是最后执行的。一旦执行,整个方法结束。
return i;
} finally {
i++;
}
}
}
/*
反编译之后的效果
public static int m(){
int i = 100;
int j = i;
i++;
return j;
}
*/
实例:
package com.bjpowernode.javase.exception;
public class ExceptionTest14 {
public static void main(String[] args) {
// final是一个关键字。表示最终的。不变的。
final int i = 100;
//i = 200;
// finally也是一个关键字,和try联合使用,使用在异常处理机制中
// 在fianlly语句块中的代码是一定会执行的。
try {
} finally {
System.out.println("finally....");
}
// finalize()是Object类中的一个方法。作为方法名出现。
// 所以finalize是标识符。
// finalize()方法是JVM的GC垃圾回收器负责调用。
Object obj;
}
}
// final修饰的类无法继承
final class A {
// 常量。
public static final double MATH_PI = 3.1415926;
}
class B {
// final修饰的方法无法覆盖
public final void doSome(){
}
}
标签:避免 数据 some void double 无法 退出 input 指针
原文地址:https://www.cnblogs.com/LFR-21/p/14686902.html