欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA异常——异常处理

程序员文章站 2022-04-21 17:49:58
...

异常处理方式一:

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();
  }
}