相信大家在学习Java 程序的时候,总会遇见一些问题,这些问题导致了异常的发生,随之就有了异常的处理。
首先,什么是异常 ? 其实异常就是对问题的描述,将问题封装成对象,当问题出现时,就会调用该对象,这就是所谓的异常。
紧接着,因为异常的出现,导致程序有问题,既然知道了问题,那么异常处理就来了。 其实就是制定一系列的方针,通过这些方针,来处理问题。
其实,无外乎就是 : 遇见问题,处理问题 —— 个人见解。
下面讲解下体系:
首先,在 java.lang 包下有一个名为 Throwable
类, Throwable
类是 Java 语言中所有错误或异常的超类。
Throwable 派系
下有2个小弟( 子类 ),分别是:Error , Exception
分析Error 和 Exception 的区别,举个医生和病人的例子,假设我是医生:
Error就像是绝症,我看见Error病人时,我只能说你爱干嘛就干嘛去吧。 ( 无能为力 )
Exception是小感冒,我看见Exception病人时,我可以帮它开点药,打下针。( 我还有能力 )
既然Error无能为力,我只能找Exception下手了, 嘿嘿。
下面分析下 Exception 异常,Exception 异常大致分为2种: 编译时期的异常 ( Exception / Checked Exception )
运行时期的异常 ( RuntimeException )
小程序展示下异常:
public class Test {
public static void main(String[] args) {
int[] arr = new int[5];
System.out.println(arr[5]);
/*
运行上面语句的时候,就会弹出以下的错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at Test.main(Test.java:8)
*/
}
}
这就是所谓的异常了,对于异常的出现,为了避免异常,就有了异常的处理机制。
异常处理机制分2种:抛出异常 , 捕获异常。
首先示范抛出异常 :
public void throwsMethod() throws FileNotFoundException
{
FileInputStream f = new FileInputStream("1.txt");
/*
Test.java:12: 错误: 未报告的异常错误FileNotFoundException; 必须对其进行捕获或声明以便抛出
FileInputStream f = new FileInputStream("1.txt");
^
1 个错误
*/
}
抛出异常: 就是在方法名后 使用关键 throws 修饰你的异常,假设你的异常是FileNotFoundException,
那么,就会写成 throws FileNotFoundException 来声明异常,
下面示范捕获异常:
public static void tryCathMethod()
{
try
{
FileInputStream f = new FileInputStream("1.txt");
}
catch(IOException e)
{
new RuntimeException("文件不存在!");
}
}
捕获异常:通过 try...catch , 可以捕获到当前try代码块可能会引发的异常,并通过catch定义一系列方针进行处理。
手动抛出异常 throw :
我们可以通过关键字 throw 手动的抛出一个异常信息,下面示范 throw :
public static int throwMethod(int a, int b)
{
if(b==0)
throw new ArithmeticException("被除数为0啦!");
return a/b;
/*
Exception in thread "main" java.lang.ArithmeticException: 被除数为0啦!
at Test.throwMethod(Test.java:13)
at Test.main(Test.java:8)
*/
}
throw 与 throws 的区别:
throw: 是直接抛出一个指定的异常对象,且可以自定义异常信息内容。
throw 只能在方法内使用,后面跟的是异常对象,例 : throw new Exception("自定义信息");
RuntimeException类及其子类,不用声明,直接可以通过throw 抛出异常对象。
Exception 需要声明,才可以通过throw 抛出异常对象。
throws:是用于声明一个指定的异常类,以便抛出,不可定义异常信息内容。 ( 可以理解为标记 )
throws 只能在方法外使用,后面跟的是异常类, 例: throws Exception
关于异常的说明,告一段落。 下面展示下自定义一个异常。
自定义异常,即创建一个类,并且继承异常 Exception ,那么这个类,就是异常类。
示例:
public class ExceptionTest extends Exception {
ExceptionTest() {
super();
}
ExceptionTest(String str) {
super(str);
}
}