2020-12-18——异常类处理

      异常类处理

6.4.Java中异常类的体系结构

1.程序出现异常是正常现象【就像人会生病一样】

2.Java中异常类Throwable[]顶级异常类。

3.Throwable[类]有两个子类:1.Error(错误) 2.Exception(异常)

 

6.5.ErrorException的区别

Errorjava程序运行中不可预料的异常情况,这种异常发生以后,会直接导致JVM不可处理或者不可恢复的情况。所以这种异常不可能抓取到,比如OutOfMemoryErrorNoClassDefFoundError等。【癌症】

Exceptionjava程序运行中可预料的异常情况,咱们可以获取到这种异常,并且对这种异常进行业务外的处理。【感冒】

6.6运行时异常与非运行时异常的区别

非运行时异常--检查性异常 必须在编写代码时,使用try catch捕获(比如:IOException异常)。

运行时异常--非检查性异常 在代码编写使,可以忽略捕获操作(比如:ArrayIndexOutOfBoundsException),这种异常是在代码编写或者使用过程中通过规范可以避免发生的。

6.7.Java异常处理的原理

1.问题自己处理不了

如果出现异常,java会根据问题所描述的异常类,创建一个对象(实例)具体异常对象,然后将该对象抛给上一级【谁调用谁就是上一级】,具体步骤:

method具体出异常处  ->   main主方法  ->  jvm虚拟机 -> 将异常出现的位置和原因打印在控制台。

  1. 问题可以自己处理掉--通过try-catch代码块处理异常

将可能出现异常的java代码使用”try{异常可能发生的代码}catch(要抓捕的异常){异常处理方式}”块包裹,如果出现异常try{}就会捕获异常,终止代码的运行,将捕获的异常交给catch(){}去处理异常。

6.8.try{}catch(){}finally{}的用法

1、异常可以自己处理掉--通过try-catch代码块处理异常

格式:

try{

//异常可能发生的代码

}catch(//要抓捕的异常){

//异常处理方式

}finally{

//最终代码

}

  1. try{}--捕获可能发生的异常
  2. catch(//要抓捕的异常){//异常处理方式}---处理异常

   catch后面的“()”中专门定义具体异常类型的。

   catch的{}--- 具体异常的处理过程。

  1. finally{}--有无异常都要执行的动作

例如:

package com.wangxing.test1;

public class TestMain {

         public static void main(String[] args) {

                  //1.当我们无法判断try{}何种具体异常的时候,

                  //我们可以在catch块的参数中通过定义Exception/Throwable类的对象来代替具体异常类型。

                  /*

                  try {

                          int res=10/0;

                          System.out.println("res=="+res);

                  }catch(Exception e) {

                          System.out.println("处理异常!");

                  }

                  */

                  //2.一个try{}后面可以跟随多个catch块,多个catch块需要按照具体异常的级别由第到高排列

                  try{

                  int  numbers[]=new int[2];

                  numbers[0]=10;

                  numbers[1]=0;

                  int num1=numbers[0];

                  int num2=numbers[1];

                  //int num3=num1/num2;

                  //numbers[2]=num3;

                  System.out.println("程序执行完毕!!");

                  }catch(IndexOutOfBoundsException e3) {

                          System.out.println("处理数组下标越界异常!");

                  }catch(ArithmeticException e2) {

                          System.out.println("处理除数为0的异常!");

                  }catch(Exception e1) {

                          System.out.println("exception异常!");

                  }catch(Throwable e) {

                          System.out.println("Throwable异常!");

                  }finally {

                          System.out.println("有无异常都要执行");

                  }

         }

}

  1. 当我们无法判断try{}何种具体异常的时候,我们可以在catch块的参数中通过定义Exception/Throwable类的对象来代替具体异常类型。

2.一个try{}后面可以跟随多个catch块,多个catch块需要按照具体异常的级别由第到高排列

3.finally{}--有无异常都要执行的动作

4.当try{}catch(){}finally{}出现在一个有返回值的方法中时,finally{}中的内容实在本方法的return语句之前运行。

例如:

package com.wangxing.test2;

public class TestClass {

         public  int  testMehtod() {

                  try {

                          int a=10;

                          return a;

                  }catch(Exception e) {

                          //控制台打印具体异常

                          e.printStackTrace();

                  }finally {

                          System.out.println("有无异常都执行");

                  }

                  return 0;

         }

}

6.9. throws与throw关键字的用法

throws--声明方法抛出异常给上一级【谁调用谁就是上一级】

格式: 访问限制修饰符  返回值类型  方法名称()throws 具体异常类型{  }

      当我们无法判读具体异常类型的时候使用Exception/Throwable代替。

package com.wangxing.test3;

public class DoClass {

         public  int  testMethod() throws Exception{

                  int  a=10/0;

                  return a;

         }

}



package com.wangxing.test3;

public class TestMain {

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

                  DoClass  dc=new DoClass();

                  int res=dc.testMethod();

                  System.out.println("res=="+res);

         }

}

throw---手动引发一个具体异常

自定义异常--编写一个新类,继承Throwable/Exception/RumtimeException,在构造中访问父类的构造方法。

package com.wangxing.test4;

/**

 * 我自己定义的异常类

 * @author Administrator

 *

 */

public class MyException extends Exception{

         public  MyException(String info) {

                  super(info);

         }

}



package com.wangxing.test4;

public class Person {

         private int  age;

         public  void setAge(int inputage) throws MyException{

                  if(inputage > 0 && inputage <= 200) {

                          age=inputage;

                  }else{

                          throw new MyException("你提供的年龄不符合要求!!");

                  }

         }

         public  int  getAge() {

                  return age;

         }

}



package com.wangxing.test4;

public class TestMain {

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

                  Person  person=new  Person();

                  person.setAge(-10);

                  System.out.println("age=="+person.getAge());

         }

}

6.10.java中的常见运行时异常

  1. NullPointerException - 空指针引用异常
  2. ClassCastException - 类型强制转换异常。
  3. IllegalArgumentException - 传递非法参数异常。
  4. ArithmeticException - 算术运算异常
  5. ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
  6. IndexOutOfBoundsException - 下标越界异常
  7. NegativeArraySizeException - 创建一个大小为负数的数组错误异常
  8. NumberFormatException - 数字格式异常
  9. SecurityException - 安全异常
  10. UnsupportedOperationException - 不支持的操作异常
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值