java学习---异常

异常的概念

java语言中,将程序执行过程中发生的不正常情况称为“ 异常 ”,(开发过程中的语法错误和逻辑错误不是异常)

执行过程中发生的异常事件可以分为两大类:

1.Error(错误):java虚拟机无法解决的严重问题,如:JVM系统内部错误,资源耗尽等严重情况,比如:StackOverFlowError(栈溢出)和OOM(out of memory),error是严重错误,程序会崩溃。

2.Exception:其他因编程错误或者偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。可以分为两类:<1>运行时异常 <2>编译时异常

异常体系图

在这里插入图片描述
1.运行时异常,编译器检查不出来,一般是指编程时的逻辑错误,是程序员应该避免出现的异常,java.long.RuntimeException类及它的子类都是运行时异常。

2.对于运行时异常,可以不做处理,因为这种异常很普遍,完全处理可能会对程序的可读性和运行效率产生影响。

3.编译时异常,是编译器要求必须处理的异常。

常见的异常

  1. NullPointerException 空指针异常

  2. ArithmeticException 数学运算异常

  3. ArrayIndexOutOfBoundsException 数组下标越界异常

  4. ClassCastException 类型转换异常
    当试图将对象强制转换为不是实例的子类时,抛出该异常。

  5. NumberFormatException 数字格式不正确异常[]
    当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常 => 使用异常我们 可以确保输入是满足条件数字.

异常处理

try-catch-finally

try{
//代码可能会有异常
}catch(Exception e){
//当异常发生时,将异常封装成Exception对象e,程序员自行处理
//如果没有发生异常,catch块不会被执行
}finally{
//不管代码块是否有异常,始终要执行finally
//通常放释放资源的代码
}

使用细节:
1.如果异常发生了,那么异常发生后面的代码不会执行,直接进入catch块,但是try-catch-finally结构外的代码还会执行。

2.如果代码块中可能有多个异常,可以使用多个catch语句分别进行捕获,但是要求子类异常在前,父类异常在后,如果发生异常,只会匹配一个catch。

3.可以进行try-finally的使用,这种用法相当于没有捕获异常,因此程序会直接退出。应用场景:就是直接执行一段代码,不管是否发生异常,都必须执行某个业务逻辑。

throws

在这里插入图片描述
每个方法都有两种处理异常的方式,选择其中一个,当没有指出时,表示采用throws方法。
使用细节:
1.如果一个方法中的语句执行时可能出现某种异常,但是并不能确定如何处理这种异常,则此方法应显示的声明抛出异常,交给调用者处理。

2.在方法中使用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。

public void f1() throws Exception{
		int n1 =10;
		int n2 = 0;
		int n3 = n1/n2;
	}

3.子类重写父类的方法时,对抛出异常的规定:要么抛出和父类相同的异常类型,要么抛出父类异常类型的子类型。

自定义异常

如果继承的是Exception,那么它是编译异常,如果继承的是RuntimeException,那么就是运行异常。

class Untitled {
	public static void main(String[] args) {
		int age = 200;
		if(!(age>1&&age<=120)){
			throw new AgeException("年龄有误!!");
		}
		System.out.println("你的年龄范围正确");
	}
	
}
class AgeException extends RuntimeException{
	public AgeException(String message){
		super(message);
	}
}

throw和throws的对比

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值