天天看点

异常处理

1 java异常的分类

异常处理

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;

  res=3;

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

int test2(){

int res=0;

  return res;

  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{

       //执行方法

       m4.setAge(-8);

   }*/

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("你咋不带吗?");

           say(5);

       } catch (MyExp myExp) {

           myExp.printStackTrace();