1、是什么,有什么
主要针对的是:运行时异常:
就是你程序出现了错误,就是符合你的语法规范,但是不符合你的JVM里面的操作规范
抛异常
创建一个错误对象,把错误对象丢出来
捕获异常
默认情况下会被JVM捕获,中断程序,然后返回错误
异常处理
throws:表示方法准备向外抛出异常
throw:表示向外抛出异常
异常的类型
RuntimeException:运行时异常,一般不手动处理,出问题后才会进行处理
其他Exception:必须进行手动处理
error:错误太大,没资格处理
2、为什么要处理异常
1.当程序处理异常时,为了更好的了解程序出现异常的原因、位置来便于你对程序进行改善
2.为了浏览的美观,防止程序的错误直接展示给第三方使用者
3、怎么做
try{
尝试执行的代码
}catch(){
异常执行的代码
}finally{
最终都会被执行
}
4、代码助理解
对于一个错误的处理,我可以有两种操作方法:
1️⃣通过异常处理try,catch处理异常
package test;
public class test {
public static void division(int a,int b) throws Exception/*向调用函数的对象抛出错误*/{
if(b==0){
throw new Exception("被除数不能是0");
}else{
double result = a/b;
System.out.println(result);
}
}
public static void main(String[] args) {
//对于上面division抛出的异常我可以通过try,catch来处理
try {
division(2,0);
} catch (Exception e) {
System.out.println("出错了");
//捕获到异常
e.printStackTrace();
}
}
}
2️⃣通过exception继续向上一级返回这个异常
package test;
public class test {
/*静态方法main只能调用静态方法*/
public static void division(int a,int b) throws Exception/*说明我可能抛出异常*/{
if(b==0){
/*向外抛出异常*/
throw new Exception("被除数不能是0");
}else{
double result = a/b;
System.out.println(result);
}
}
public static void main(String[] args) throws Exception/*通过throws继续向上抛出异常,向调用该方法的方法抛出异常*/ {
/*因为是主函数是最外面的函数,所以继续抛出的话*/
division(2,0);
}
}
5、自定义异常(不常用)
对于项目具体的异常的处理
注意:
自定义的异常必须继承Exception或者RuntimeException
Division.java
package test;
/*自定义的异常*/
public class Divison_Ex extends Exception/*自定义的异常必须继承Exception或者RuntimeException*/{
public Divison_Ex(String msg){
super(msg);/*调用父类的构造方法,Exception(msg),调用父类的构造方法必须是第一行*/
System.out.println("被除数发生异常");
}
}
test.java
package test;
public class test {
public static void division(int a,int b) throws Exception/*说明我可能抛出异常*/{
if(b==0){
/*向外抛出以一个自定义异常Division_Ex*/
/*自定义的异常用于处理更加具体的异常,比如我这里就是对于除法的异常*/
throw new Divison_Ex("除数不能为0");
}else{
double result = a/b;
System.out.println(result);
}
}
public static void main(String[] args) throws Exception {
/*因为是主函数是最外面的函数,所以继续抛出的话*/
division(2,0);
}
}