Java的异常捕捉(Exception)

异常的概念:在Java当中 它是把所有异常信息封装起来 放在一个类里 当遇到异常时 会创建异常类对象 并且抛出

Exception和Error的区别:

Exception:异常信息 - 发生异常的原因和位置
是可以处理的 处理完之后 程序是可以继续执行的
在编译 运行时期都可能发生
Error:必须修改源程序才能解决(有些问题修改了源程序也未必能解决)
只有在运行的时候发生 无法解决

什么能扔(抛出)?

任何继承了Throwable类的对象
Exception类默认继承了Throwable
因此可直接抛出:

throw new Exception();
throw new Exception("help");

异常处理方式

方式1、throws 关键字 :只是在方法声明中标识一下
方式2、try…catch()…finally

1、throws手动抛出异常方式

什么时候用手动抛出异常:当我们写的方法给别人用时 并且方法声明中需要传参
为了进行合法性判断 保证是我规范的参数类型
若出现不合乎规范的参数 需要进行友好提示 这个时候需要手动抛出异常

在java中提供了关键字throw 它用来抛出指定异常对象 封装一些提示信息(这些信息可以自己写)
throw使用格式:

throw new 异常类名(参数列表);

注意:throw必须写在方法体内部,目的是抛出(请注意,是抛出)异常类对象
关键字throws用来声明(请注意,是声明)异常 写在方法声明上 用来告诉调用者这个方法可能会跳出异常
一个类后面加上throws(抛出) Exception(异常)表示声明异常的一个类

throw和throws这两个关键字配合使用
例:

public class Wrong {
   public static void main(String[] args) throws Exception{
//     int[] arr={};
       int[] arr=null;
       int value=getArray(arr);
   }

   private static int getArray(int[] arr) throws Exception {
       //若传进来空的对象
       if (arr==null)
       {
           throw new Exception("传递的数组不存在");
       }
       if (arr.length==0)
       {
           throw new Exception("传递的数组中没有元素");
       }
       int value=arr[arr.length-1];
       return value;
   }
}

程序一旦抛出异常 后面的语句将不会继续执行

2、try catch方式

格式:

try
{
    被检测的内容(可能会发生异常的代码)
}
catch(异常类名/*Exception或它的子类*/  变量名/*最好为e或ex*/)
{
    异常处理方式(循环、判断...}
finally//到此意味着异常处理结束
{
    必须执行的代码
}

try代码块中存放可能出现异常的代码
catch捕捉异常
catch(){}代码块结束之后 意味着异常处理结束 后面的代码继续执行
正是因为有了这个异常处理机制 程序免去了强制结束的烦恼

那么 当我们捕捉到异常之后 我们能做什么?

1System.out.println(e.getMessage()); 返回发生异常时放在发生异常对象里的值
例:

(例子里假设这个值是10)
2System.out.println(e);System.out.println(e.toString()); 返回异常类的类名和异常的数值
【 输出e也就是相当于输出e.toString】
例:

3e.printStackTrace(); 返回异常类的类名和异常的数值和发生异常时在哪行被调用了
使用此函数 可以知道异常函数的调用轨迹
例:

例子里的意思是:刚开始发生异常是在第9行的f函数中,f函数又被第14行的g函数调用了,f函数又被…调用…最后被34行的main函数调用了
当catch的是Exception时 将能捕捉到任何异常
因为所有异常都是继承自Exception类的

catch(Exception e)
{
	System.err.println("Caught an exception")
}

当异常声明遇到继承关系:

1、当覆盖一个函数的时候 子类不能声明抛出比父类的版本更多的异常
2、在子类的构造函数中 必须声明父类可能抛出的全部异常

捕捉异常后:

无法返回
具体的处理逻辑取决于业务逻辑需要


发布了56 篇原创文章 · 获赞 0 · 访问量 1190

猜你喜欢

转载自blog.csdn.net/Piconjo/article/details/104590660