JAVA异常——异常处理

本文深入解析Java中的异常处理机制,包括抓抛模型的概念,try-catch-finally语句的使用,以及如何在方法声明中抛出异常。探讨了运行时异常与编译时异常的区别,以及异常处理在代码执行流程中的作用。
摘要由CSDN通过智能技术生成

异常处理方式一:

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();
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值