异常类处理

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

1 .程序出现异常是正常现象【就像人会生病一样】
2 .Java中异常类Throwable[类]顶级异常类。
3 .Throwable[类]有两个子类:1.Error(错误) 2.Exception(异常)
在这里插入图片描述

6.5.Error与Exception的区别

Error是java程序运行中不可预料的异常情况,这种异常发生以后,会直接导致JVM不可处理或者不可恢复的情况。所以这种异常不可能抓取到,比如OutOfMemoryError、NoClassDefFoundError等。【癌症】
Exception是java程序运行中可预料的异常情况,咱们可以获取到这种异常,并且对这种异常进行业务外的处理。【感冒】

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

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

6.7.Java异常处理的原理

1 .问题自己处理不了
如果出现异常,java会根据问题所描述的异常类,创建一个对象(实例)具体异常对象,然后将该对象抛给上一级【谁调用谁就是上一级】,具体步骤:
method具体出异常处 -> main主方法 -> jvm虚拟机 -> 将异常出现的位置和原因打印在控制台。
2 . 问题可以自己处理掉–通过try-catch代码块处理异常
将可能出现异常的java代码使用”try{异常可能发生的代码}catch(要抓捕的异常){异常处理方式}”块包裹,如果出现异常try{}就会捕获异常,终止代码的运行,将捕获的异常交给catch(){}去处理异常。

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

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

try{
//异常可能发生的代码
}catch//要抓捕的异常){
//异常处理方式
}finally{
//最终代码
}

1 、try{}–捕获可能发生的异常
2 、catch(//要抓捕的异常){//异常处理方式}—处理异常
catch后面的“()”中专门定义具体异常类型的。
catch的{}— 具体异常的处理过程。
3、finally{}–有无异常都要执行的动作
例如:

package wangxing20200815_1_1;

public class TestMain {
	public static void main(String[] args) {
  	//1.当我们无法判断try{}何种具体异常的时候,
  	//我们可以在catch块的参数中通过定义Exception/Throwable类的对象来代替具体异常类型。
  	/*
   	* try{
   	*   int res=10/0;
   	*   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 wangxing20200815_2_1;

public class TestClass {
	public int testMehtod(){
  		try{
    			int a=10;
    			return a;
  		}catch(Exception e){
   			//控制台打印具体异常
   			e.printStackTrace();
  		}finally{
   			System.out.println("有无异常都执行");
  		}
  		return 0;
  	}
  }
package wangxing20200815_2_1;

public class TestMain {
	public static void main(String[] args) {
  		TestClass tc=new TestClass();
  		System.out.println(tc.testMehtod());
 	}
}

在这里插入图片描述

6.9. throws与throw关键字的用法

throws–声明方法抛出异常给上一级【谁调用谁就是上一级】
格式: 访问限制修饰符 返回值类型 方法名称()throws 具体异常类型{ }
当我们无法判读具体异常类型的时候使用Exception/Throwable代替。

package wangxing20200815_3_1;

public class DoClass {
 	public  int  testMethod() throws Exception{
  		int  a=10/0;
  		return a;
 	}
}
package wangxing20200815_3_1;

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—手动引发一个具体异常
自定义异常–编写一个新类,继承Exception/Throwable,在构造中访问父类的构造方法。

package wangxing20200815_4_1;
/**
 * 我自己定义的异常类
 * @author 89247
 *
 */
 public class MyException extends Exception{
 	public MyException(String info){
 		super(info);
 	}
 }
package wangxing20200815_4_1;

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 wangxing20200815_4_1;

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 - 不支持的操作异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值