异常处理

简介: 异常处理

1 java异常的分类

20180730175929611.png

2 java处理异常的两种方式


2.1 try…catch…finally


语法:


使用try结构扩展可能出错的代码块, 紧接try部分必须跟随catch部分或finally部分


try{

  可能出错的代码块…..


}catch(jdk定义错误类型或自定义错误类型  变量名){

   处理语句


}finally{


}



finally块必须与try块连用,finally块作用无论try中代码是否出错,finally总会执行



两种变形:


第一种:try..catch...finally允许嵌套;


第二种:多重catch块,catch中的错误类型,必须错误范围从小到大;



练习:


接收用户输入的两个整数,要求即使用户输入除数是0,我们进程也不终止;


总结:


int test1(){

 int res=0;


 try{

     return res;


}finally{

  res=3;


}


}


//调用test1()方法后返回0,原因return语句直接返回当前res为0式的值;



int test2(){

int res=0;


try{

  res=3;


  return res;


}finally{

  res=6;


 return res;


}


}


//调用test2()方法返回6,原因finally最终执行模板,所有finally中return语句最后执行;


2.2 java异常处理的第二种方式


throw, throws


throw表示强制抛出异常,用于违反业务规定,手工抛出异常;


throws用于在方法上声明异常,当调用该方法时,必须处理异常;


语法:


throw new 异常类(“错误描述”);



throws语法


在方法声明最后使用throws语句声明该方法包含某个异常;


注意:


throws 中的异常类型分为非检查异常以RuntimeException或其子类为主,这种异常方法被调用,可以不处理方法中声明的异常;


除了RuntimException异常类型外其他,throws后面声明的异常为检查异常,这些异常方法被调用必须处理方法中声明的异常;


例如:


import  java.io.IOException;


public class Demo4 {

   int age;


   //throws用于在方法上声明异常,当调用该方法时,必须处理异常;


   public void setAge(int age)throws  IOException {

       if(age<1){

           //throw表示强制抛出异常,用于违反业务规定,手工抛出异常;


          throw new IOException("年龄输入错误");


       }


       this.age = age;


   }



   public static void main(String[] args) {

       Demo4 m4=new Demo4();


       try {

//            //执行方法


           m4.setAge(-8);


       } catch (IOException e) {

           e.printStackTrace();


       }



       System.out.println("over...");


   }


 /* 可以在调用时,使用throws再次抛出异常


public static void main(String[] args)throws Exception{

       Demo4 m4=new Demo4();


       //执行方法


       m4.setAge(-8);


       System.out.println("over...");


   }*/


}



3 自定义异常


作用,用于企业中将错误信息进行相应的格式转换;


步骤:


① 自定义一个继承异常的自定义类;


② 在构造方法中输出自定义格式的错误信息;


③ 在对应的方法中使用throw和throws语句使用自定义异常类;


例如:


//① 自定义一个继承异常的自定义类;


class MyExp extends Exception{

   //② 在构造方法中输出自定义格式的错误信息;


   public MyExp(String msg){

       //通过父类处理自定义异常信息


       super(msg);


   }


}


//③ 在对应的方法中使用throw和throws语句使用自定义异常类;


public class Demo5 {

   public static void say(int x)throws MyExp{

       if(x<10)


           throw new MyExp("你咋不带吗?");


   }


   public static void main(String[] args) {

       try {

           say(5);


       } catch (MyExp myExp) {

           myExp.printStackTrace();


       }


   }


}


相关文章
|
25天前
|
SQL Java 程序员
异常处理
【10月更文挑战第10天】
13 2
|
2月前
|
Python
ython之对异常处理
ython之对异常处理
|
6月前
|
C++
C++程序异常处理
C++程序异常处理
40 1
|
6月前
|
C++
11. C++异常处理
11. C++异常处理
38 0
11. C++异常处理
|
6月前
|
C++
C++ 异常处理
C++ 异常处理
|
6月前
|
存储 安全 Java
【C++】—— 异常处理
【C++】—— 异常处理
|
6月前
|
C++
C++异常处理详解
C++异常处理详解
35 0
|
C#
C#异常处理
C#异常处理
62 0
|
6月前
|
存储 C++
63异常处理
63异常处理
30 0
|
Java 编译器 C++
C++异常处理
C++异常处理
36 0