异常处理方式一:
package com.it.text1;
import java.util.Scanner;
import org.junit.Test;
public class TestExcpetion1 {
/*JAVA提供的异常处理——抓抛模型
*1."抛":当我们执行代码时,一旦出现异常,就会在异常的代码生成出生成一个对应的异常类型的对象,并抛出
* (自动抛出/手动抛出)
* >-- 一旦抛出此异常类的对象,那么程序就终止执行
* >-- 此异常类的对象抛给方法的调用者。
*2.“抓”:抓住 上一步抛出的异常类的对象。如何抓?即为异常处理的方式
* JAVA提供了两种方式用来处理一个异常类的对象。
* 2.1处理方式一:
* try{
* //可能出现异常的代码
* }catch(Exception e){
* //处理异常
* }finally{
* //不管上面会不会出现异常,finally中的代码必定执行
* }
*注:1.try内声明的变量,类似于局部变量,出了try{}语句,就不能被调用
* 2.finally{}可用,可不用
* 3.catch语句内部是对异常的处理
* 4.可以有多个catch语句,try中跑出的异常类对象从上往下去匹配catch中的异常类的类型,
* 一旦满足就执行catch中的代码,执行完就跳出,后续的catch就不会执行了
* 5.如果异常处理了,那么后续的代码继续执行。
* 6.若catch中多个异常类型是"并列"关系,孰上孰下都可以
* 如果catch中多个异常类型是“包含”关系,必须将子类放在父类的上面,进行处理,否则报错。
* 7.try-catch可以相互嵌套
*3.对于运行时异常来说,可以不显式进行处理
* 对于编译时异常来说,必须要显式进行处理
* */
@Test
public void test() {
Scanner s = new Scanner(System.in);
try {
int i = s.nextInt(); //输入a
System.out.println(i);
}catch (Exception e) {
System.out.println("类型不匹配异常!");
}
}
//1.数组的下标越界:ArrayIndexOutofBoundsException
@Test
public void test1() {
try {
int[] i = new int[10];
System.out.println(i[10]);
}catch (Exception e) {
System.out.println("出现异常!");
}
}
}
异常处理方式二:
package com.it.text1;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class TestException3 {
/*异常的处理方式二:在方发声明处,显式的抛出该异常对象的类型
* 格式: public static void method2() throws Exception{}
* 当在此方法内部出现异常的时候,会抛出一个异常类的对象,抛给方法的调用者
* 异常的对象可以逐层向上抛,直至main,当在向上抛的过程中,可以再通过try-catch-finally进行处理
* */
public static void main(String[] args) throws Exception { //main如果方法处理不了,抛给虚拟机JVM
try {
method2();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void method2() throws Exception { //method2如果也处理不了,往上递交
method1();
}
public static void method1() throws Exception{ //method1不知道怎么处理往上递交
FileInputStream fis = new FileInputStream(new File("hello.txt"));
int b;
while((b = fis.read()) != -1) {
System.out.println((char)b);
}
fis.close();
}
}