异常Exception
下属两位 一位是运行时异常及其子类 另一位是非运行时异常(只要不是运行时异常或者是他的子类),又称受检异常, 编译时异常
常见异常 这些异常都称为运行时异常:
NPE NullPointerException
数组索引越界异常 ArrayIndexOutOfBoundsException
类转化异常 ClassCastException
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数字");
int num = -1;
try {
Integer data = null;
//System.out.println(data/3);
num = scanner.nextInt(); //当此行代码发生异常的时候, 会立即跳转到catch中, 要判断目前出现的异常和catch里面预先定义的异常是否一样, 如果一样, 执行后续代码提
int result = 100/num;
//发生异常的代码位置, 一直到下一个闭合括号的代码, 都会被跳过, 跳过后判断catch里面有没有预先定义好的处理方式, 有则执行, 后续代码正常执行
//如果catch中没有对此次出现的异常的预定义, 则程序直接中止
System.out.println("我是一些代码1");
System.out.println("我是一些代码2");
} catch (InputMismatchException exception) {
scanner.nextLine(); //消耗掉之前的错误输入
System.out.println("您输入的数据不是整数, 请重新输入");
num = scanner.nextInt();
System.out.println("num = " + num);
} catch (ArithmeticException exception) {
System.out.println("除数不能为0, 请重新输入");
num = scanner.nextInt();
} catch (RuntimeException exception) {
System.out.println("我是空指针异常, 被发现并处理了");
} catch (Exception exception) {
}
System.out.println("代码3");
System.out.println("代码4");
//算数异常, 除数不能为0
//int result = 100/num;
//System.out.println("最终计算结果为" + result);
当此行代码发生异常的时候, 会立即跳转到catch中, 要判断目前出现的异常和catch里面预先定义的异常是否一样, 如果一样, 执行后续代码提
发生异常的代码位置, 一直到下一个闭合括号的代码, 都会被跳过, 跳过后判断catch里面有没有预先定义好的处理方式, 有则执行, 后续代码正常执行
如果catch中没有对此次出现的异常的预定义, 则程序直接中止
java中的运行时异常, 如果没有被try-catch处理, 默认会被自动抛出
如果代码中既有try-catch, 又有抛出, 先执行catch判断, 如果捕获到了就直接执行catch后代码, 不会抛出了, 否则直接抛出
finally
public class Demo40 {
public static void main(String[] args) throws FileNotFoundException {
boolean flag = true;
if (flag) {
try {
//System.exit(0); //强制中止java应用
System.out.println("我是try中的代码");
} finally {
System.out.println("我是finally中的代码一定会被执行");
}
}
}
}
finally语句在return语句执行之后return返回之前执行的
class FinallyTest1 {
public static void main(String[] args) {
//先执行test1方法, 后执行输出语句
System.out.println(test1());
}
public static int test1() {
int b = 20;
try {
System.out.println("try block");
return b += 80; // b = b + 80;
}
finally {
System.out.println("finally block");
if (b > 25) {
System.out.println("b>25, b = " + b);
}
}
}
}