目录
(2)如果想向下继续执行,就要处理好错误,用try-catch环绕
一、是什么
包括error和exception
1.error(错误)
Error是程序无法处理的错误,它是由JVM产生和抛出的(和堆栈有关),比如OutOfMemoryError、ThreadDeath等
2.exception(异常)
异常就是报错
Exception是程序本身可以处理的异常,分两大类,程序应尽可能去处理这些异常
包括两大类:
(1)运行时异常(非受检异常)
在程序运行期间爆出的异常,在运行之前并没有被程序检验出来
(2)非运行时异常(受检异常)
在运行之前被检验出来的异常
3.用代码表示
(1)运行时异常(非受检异常)
public class Test {
public static void main(String[] args) {
int[] arr=new int[5];
int a=arr[10];//这样做一定会出错
}
}
这是一个异常------》数组越界ArrayIndexOutOfBoundsException
(2)非运行时异常(受检异常)
这样写报错了 ,要求我们对这个地方进行处理,因为它怕当前没有这个文件,手动处理:
(3)错误
public class Test {
public static void main(String[] args){
run();
}
public static void run(){
run();
}
}
此时运行报错:(StackOverflowError---栈溢出错误)
不断的让run()方法入栈,迟早会造成栈溢出
二、java是如何解决异常的
1.try-catch-finally
这个才是真正的去解决问题
(1)
public class Test {
public static void main(String[] args) {
int[] arr=new int[10];
int a=arr[11];
System.out.println("-------");
}
}
运行之后:
在int a=arr[11]; 这行出错,所以程序就在这里中断,不再向下执行
(2)如果想向下继续执行,就要处理好错误,用try-catch环绕
public class Test {
public static void main(String[] args) {
try{
int[] arr=new int[10];
int a=arr[11];
}catch (Exception e){
e.printStackTrace();
}
System.out.println("-------");
}
}
运行:
①int a=arr[11]; 这行还是出错,但是并不影响整个程序的向下执行
②try是尝试执行,发现走不通就会走catch里面的语句,e.printStackTrace(); 是输出当前错误(错误类型,行数,错误点)
③catch里面应该写什么?
在不知道是什么异常的情况下,就写Exception,因为Exception是所有异常的父类
④catch可以写多个
try{
语句;
}catch(SomeException1 e){
}catch(SomeException2 e){
}
(3)finally的作用
finally指是无论如何都要执行的代码块
2.throws抛出异常
在方法当中抛出异常,由方法的调用者来处理异常
抛出异常是一种最简单最省事的方式,但是他并没有真正的去解决问题,只是把问题抛给了别人去解决
Add exception to method signature(添加异常到方法签名)
Class.forName("cn.edu.bdu.mc.Test"); 里边是可能会产生异常的
由方法的调用者来处理异常,这里main()方法调用run()方法,所以他要去处理异常: