17.Java中的异常处理

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

        1.程序运行时出现异常或者错误是一种正常现象,就像人会生病一样。
        2.Java 中异常处理类中的顶级类是java.long.Throwable类。
        顶级类--其他的我们见到的异常处理类都是Throwable类的子类。
        3.Throwable类产生了两个只要子类,分别是Error【错误】/ Exception【异常】。

2.Error【错误】与 Exception【异常】的区别?【面试题】

        Exception【异常】:程序正常运行中可以预料的意外情况,可能并且应该被捕获,进行相应处理。
        Exception【异常】被被分为两大类:检查性异常/非检查性异常

        Error【错误】:指在正常情况下不大可能出现的情况,绝大部分的Error都会导致程序(比如JVM自身)处于非正常的、不可恢复状态。【癌症晚期】
        既然是非正常情况,所以不便于也不需要捕获,常见的比如OutOfMemoryError之类,都是Error的子类。

3.检查性异常与非检查性异常的区别

        检查性异常:在源代码里必须显式地进行捕获处理

        非检查性异常:就是所谓的运行时异常,通常是可以编码避免的逻辑错误,具体根据需要来判断是否需要捕获,并不会在编译期强制要求捕获处理。

4.Java异常处理的原理   

1.try…catch捕获处理异常
    格式:
    try{
        可能出现异常的java代码
    }catch(异常对象){
        异常对象---处理异常    
        }
    当程序没有异常的时候,那么程序正常运行不会进入try…catch中;
    当程序出现异常的时候,try块就会将出现的具体异常捕获,程序将不会继续向下执行,转而执行catch块,并将try块捕获的异常封装成一个异常对交给catch块,由catch块处理异常,处理完成以后就接着之前出现异常的位置继续向下执行。

	public static void main(String[] args) {
		try {
			int a = 10;
			int b = 0;
			int c = a / b;
			System.out.println("c==" + c);
		} catch (ArithmeticException e) {
			e.printStackTrace();
		}
	}

注意:

        1.将可能出现异常的java代码用try{}块包围。
        2.catch后面的异常对象应该是一个具体的异常对象。
        我们目前所见到的异常有限,我们可能不能知道这个异常的具体名称,这时我们可以使用Exception或者Throwable对象代替。

        3.一个try{}块后面可以有多个catch块,多个catch块要按照异常类型由小到大排列。

public static void main(String[] args) {
		try {
			int a = 10;
			int b = 0;
			int c = a / b;
			System.out.println("c==" + c);
		}catch (ArithmeticException e) {
			System.out.println("假装出里异常");
			e.printStackTrace();
		}catch (Exception e) {
			System.out.println("假装出里异常");
			e.printStackTrace();
		}catch (Throwable e) {
			System.out.println("假装出里异常");
			e.printStackTrace();
		}
	}

        4. finally{}块出现在最后一个catch块后面,无论程序是否发生异常都会执行。

public static void main(String[] args) {
		try {
			int a = 10;
			int b = 0;
			int c = a / b;
			System.out.println("c==" + c);
		}catch (ArithmeticException e1) {
			System.out.println("假装出里异常");
			e1.printStackTrace();
		}catch (Exception e2) {
			System.out.println("假装出里异常");
			e2.printStackTrace();
		}catch (Throwable e3) {
			System.out.println("假装出里异常");
			e3.printStackTrace();
		}finally{
			System.out.println("无论程序是否发生异常都会执行");
		}
	}

Tip:由于异常Exception本身是程序正常运行中可以预料的意外情况,我们通过修改程序可以避免这个异常的发生,所以我们在try{}catch(Exception e){}的catch块中不进行具体异常的处理,而是通过异常对象的printStackTrace()方法将异常类型和异常原因以及出现异常的位置找到,然后修改程序来避免这个异常的发生。

2.不断向上抛出,交由jvm来处理
    throws--声明方法抛出异常
    访问限制修饰符  返回值类型  方法名称([参数])throws 异常类型{}
    访问限制修饰符  返回值类型  方法名称([参数])throws 异常类型1,异常类型2...{}
    throws--声明方法抛出异常,结果是在那里调用这个方法你就要处理方法上的异常

        1.try…catch捕获处理异常

	public class Person {
		// throws--声明方法抛出异常
		// 访问限制修饰符 返回值类型 方法名称([参数])throws 异常类型{}
		public void testPerson() throws Exception {
			int num = 10 / 0;
			System.out.println("num==" + num);
		}
	}

        2.向上抛出,交由jvm来处理

package com.wangxing.test3;
public class Person {
	//throws--声明方法抛出异常
	//访问限制修饰符  返回值类型  方法名称([参数])throws 异常类型{}
	public  void  testPerson()throws Exception{
		int num=10/0;
		System.out.println("num=="+num);
	}
}

package com.wangxing.test3;
public class TestMain3 {
	public static void main(String[] args)throws Exception {
		Person p2=new Person();
		p2.testPerson();
		
	}
}



Exception in thread "main" java.lang.ArithmeticException: / by zero
	at com.wangxing.test3.Person.testPerson(Person.java:7)
	at com.wangxing.test3.TestMain3.main(TestMain3.java:15)

5.throw 关键字的用法

throw关键字表示手动产生一个异常。
    目的:为了提醒用户怎么操作。
    throw new 异常类名称([提示语言]);

  通过一个简单的自定义异常来使用throw关键字
  自定义异常:java开发库中没有提供,我们自己创建的异常。
  很多收java发库中提供异常类型是满足我们的开发使用的,很少自定义异常。
  怎么做一个自定义异常的简单的方法:
      1.创建一个新类,继承一下Exception/Throwable
      2.重新构建一下子类的构造方法,通过super([参数])调用父类的构造方法。

public class Test2 extends Exception{
	public Test2(String msg){
		super(msg);
	}
}
public class Test3 {
	//数组大小
	private int size;
	//通过构造方法设置数组大小
	public Test3(int size)throws Test2{
		if(size<=0){
			//手动产生一个异常,提示提醒用户不用使用负数
			throw new Test2("数组大小不能是负数!");
		}else{
			this.size=size;
		}
	}
	//创建一个字符串类型的数组
	public  String[]  createArray(){
		String  stringarray[]=new String[this.size];
		return stringarray;
	}
}

Java中的常见异常
    NullPointerException(空指针异常)
    ArrayIndexOutOfBoundsException

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值