异常的概念
首先,java中的异常是以类的形式存在的,也就是说,每一种异常实际上都是一种特殊的类。
这里根据百度开发者社区的定义可以验证:Java异常体系主要由Throwable类及其子类构成。Throwable是所有错误和异常的超类,它有两个直接子类:Error和Exception。(其实不严格的来说有三个,Exception可以分为检查型异常(Checked Exceptions)和非检查型异常(Unchecked Exceptions))
那我们先分析一下异常的类型
Error
表示严重问题,比如内存溢出这种,这类错误通常是由JVM本身的问题引起的,无法预测或处理。所有一般也不会去捕获这个异常。
Exception
Checked Exception 检查型异常
要求在被一个方法抛出来时,调用这个方法的代码就必须处理这些异常,否则就会报错比如IOException和SQLException这些。
Unchecked Exceptions 非检查型异常
非检查型异常指的是像空指针这种,由程序员人为逻辑错误或者程序bug导致的异常。
异常的三种处理方式
1,异常抛出,像这里抛出一个自定义的异常
String[] array = new String[2];
int check = 2;
if(check>=2){
throw new MyException("数组越界");
}
2,异常捕获(tyr-catch)
try {
String[] array = new String[2];
array[2] = "123";
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("发生了数组越界,位置: "+e.getMessage());
}
3,异常声明,像这个方法在后面的编写里可能会抛出某些异常,但是现在并不想在内部处理,就可以用throws关键字先抛出。
public void test2() throws Exception{}
五个关键字
1,try
用于定义一个代码块,通常是可能会抛出异常的代码,一般连接着catch和finally
2,catch
定义一个包含处理这个异常情况的代码,每个catch都指定了一种或者多种异常类型,如果抛出的错误与捕获的类型相匹配则执行。
3,finally
定义一个无论如何都会执行的代码块,通常用于检查连接或者释放资源。
Try-catch-finally举例:
int len = 2;
String[] array = new String[len];
try {
array[len] = "123";
System.out.println(array[len]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("发生了数组越界,位置: "+e.getMessage());
System.out.println("末尾应该是len-1");
} finally {
System.out.println("无论如何,这段代码都会执行,会有语句输出。");
}
4,throw
抛出异常,可以抛出一个新的异常也可以重写抛出一个已经捕获过的异常,这样后面在捕获异常的时候,如果类型相同,就会使得控制流转移。像这样,如果后面捕获(Exception e),那么就会跳转到处理语句块。
throw new Exception("一个新的错误");
5,throws
不同于前一个,这是声明一个方法可能会抛出的异常,提醒后续调用的人可以把这个方法的异常抛出或者捕获处理。
public class FileException {
public static String FileException(String file) throws IOException{
return file;
}
}
标签:Exception,java,String,抛出,分类,catch,array,异常
From: https://blog.csdn.net/qq_55332182/article/details/140353489