Java_异常

  • 异常体系图

  • 常见异常

    • NullPointerException 空指针异常
    • ArithmeticException 数学运算异常
    • ArrayIndexOutOfBoundsException 数组下标越界异常
    • ClassCastException 类型转换异常
    • NumberFormatException 数字格式不正确异常
  • 异常处理(默认 throw )

    • try-catch-finally

    • throw

      • 把异常抛给调用函数,调用函数通过try—catch 处理,或者再一次抛给调用函数。JVM是最顶层处理者直接输出异常信息然后退出程序
        // IDEA快捷键 ctrl + alt + T
        try{
            String name = "异常";
             int num = Integer.parseInt(name);//name 不能转换成数字类型 (NumberFormatException  数字格式不正确异常)
         }
         catch ( Exception e){ //Exception [ɪkˈsepʃn]
             System.out.println("异常信息" + e.getMessage());
         }finally{
           //无论是否发生异常都进行finally代码块中
           //所以,通常将把资源的释放放到finally里
             System.out.println("代码运行");
          }   
  • 注意事项
    • 发生异常之后的代码不会继续执行之后的代码,而是直接执行catch代码块中的代码,然后执行catch代码块之后的代码
    • 如果没有发生异常,则顺序执行try代码块中的代码,不会执行catch代码块中代码
    • 如果有希望不管异常是否发生都要进行的处理,把处理代码放到finally代码块中
    • catch 可以有多个,捕获不同的异常,进行不同的处理
try{

}
catch(NullPointerException  e){

}
catch(ArithmeticException e){

}
catch(Exception e){
//放在最后,因为 Exception  会捕获所有异常(父类)
}finally{

}
  • try-finally
    • 不管发不发生异常都会进行finally代码块里的处理,无论代码块是否return,都要先执行finally代码块的代码
public class ThrowException {
    public static void main(String[] args) {
        try {
            ReturnExceptionDemo.methodA();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        ReturnExceptionDemo.methodB();

    }
}

class ReturnExceptionDemo {
    static void methodA() {
        try {
            System.out.println("进入方法A");
            throw new RuntimeException("制造异常");
        } finally {
            System.out.println("用A方法的finally");
        }
    }

    static void methodB() {
        try {
            System.out.println("进入方法B");
            return;
        } finally {
            System.out.println("调用B方法的finally");
        }
    }
}

执行结果

无论 return 是否有变量,都会先执行finnaly代码块中的代码

i = 1;
try{
 i++;// i = 2
}
catch(){
 return ++i;  // return 3
}
finally{
  ++i;
System.out.println("i = " + i); //i = 4
}
posted @   我爱吃酸菜  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示