Java异常

文章详细介绍了计算机编程中异常的概念,特别关注Java环境下的异常分类,包括Error和Exception,强调了编译时异常和运行时异常的区别。此外,讨论了异常处理机制,如try-catch-finally结构,以及如何手动或自动抛出异常。还提到了自定义异常的创建和使用场景。
摘要由CSDN通过智能技术生成

1.什么叫异常

(1)在使⽤计算机语⾔进⾏项⽬开发的过程中,即使程序员把代码写得尽善尽美, 在系统的运⾏过程中仍然会遇到⼀些问题,因为很多问题不是靠代码能够避免 的,⽐如:客户输⼊数据的格式,读取⽂件是否存在,⽹络是否始终保持通畅 等等。
(2)在Java中,将程序执行中发生的不正常情况称为——异常
(3)开发过程中的语法错误和逻辑错误不是异常

2.异常的分类

(1)Error

Java虚拟机⽆法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况⽐如StackOverflowError和OOM。⼀般不编写针对性的代码进⾏处理。

(2)Exception

其它因编程错误或偶然的外在因素导致的⼀般性问题,可以使⽤针对性的代码进⾏处理

(3)对于这些错误的解决办法
①一遇到错误就终止程序的执行
②在编写程序时,就考虑到错误的检测,错误消息的提示,以及错误的处理

3. Exception分类

(1)编译时异常

是指编译器要求必须处置的异常。即程序在运⾏时由于外界因素造成的⼀般性异常。编译器要求Java程序必须捕获 或声明所有编译时异常。

(2)运行时异常
①是指编译器不要求强制处置的异常。⼀般是指编程时的逻辑错误,是程序员 应 该积极避免其出现的异常。 java.lang.RuntimeException类及它的⼦类 都是运⾏时异常
②对于这类异常,可以不作处理,因为这类异常很普遍,若全处理可能会对程 序的可读性和运⾏效率产⽣影响。 ⽐如 NullPointerException 等

4. 常见异常

Java.lang.Throwable
Java.lang.Error:一般不编写针对性的代码进行处理
Java.lang.Exception:可以进行异常处理
	编译时异常(checked)
		IOException
			FileNotFoundException
		ClassNotFoundException
	运行时异常(unchecked)
		NullPointerException——空指针异常
		ArrayIndexOutBoundException——数组索引越界
		ClassCaseException——类型转换异常
		NumberFormatException——String转数字异常
		InputMismatchException——输入类型异常
		AritmaticWxception——算数异常

5. 异常处理

(1)捕获异常:try——catch——finally
①第一步是用try{…}语句块选定捕获异常的范围,将可能出现异常 的代码放 在try语句块中。
②在catch语句块中是对异常对象进行处理的代码。每个try语句块可以伴随一 个或多个catch语句,用于处理可能产生的不同类型的异常对象。
③最后⼀步是通过finally语句为异常处理提供⼀个统⼀的出⼝,使得在控制流 转到程序的其它部分以前,能够对程序的状态作统⼀的管理。不论在try代 码块中是否发⽣了异常事件,catch语句是否执⾏,catch语句是否有异常, catch语句中是否有 return,finally块中的语句都会被执⾏
④捕获异常的有关信息:
1)getMessage() 获取异常信息,返回字符串
2)printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的位 置。返回值void。
⑤捕获异常的流程

在这里插入图片描述

(2)抛出异常:
①如果⼀个⽅法(中的语句执⾏时)可能⽣成某种异常,但是并不能确定如何处 理这种异常,则此⽅法应显示地声明抛出异常,表明该⽅法将不对这些异常 进⾏处理,⽽由该⽅法的调⽤者负责处理。
(3)自动抛出异常:throws+异常类型
①在⽅法声明中⽤throws语句可以声明抛出异常的列表,throws后⾯的异常类型可以是⽅法中产⽣的异常类型,也可以是它的⽗类。
②方法调用时就抛出,将异常交给调用的上级去处理
③throws+Exception时表示时必须处理的异常,调用此方法时必须try-catch
④public static void div() throws ArithmeticException{
	System.out.println(10 / 0);
}
(4)手动抛出异常:throw new 异常类型
public  static  void div( int  a ,  int  b) {
	If(b!=0){
		System.out.println(a/b);
	}else{
		throw  new  ArithmeticException(“被除数不能为0”);
	}
}

6. nextLine()——上一次输入的错误的年龄在缓存中,nextLine表示跳过缓存的那条信息进入下一条

7.两种异常的使用场景

(1)如果⽗类中被重写的⽅法没有throws⽅式处理异常,则⼦类重写的⽅法也不能使⽤throws,意味着如果⼦类重写的⽅法中有异常,必须使⽤try-catch-finally⽅式处理
(2)执⾏的⽅法a中,先后⼜调⽤了另外的⼏个⽅法,这⼏个⽅法是递进关系执⾏的。我们建议这⼏个⽅法使⽤ throws 的⽅式进⾏处理。⽽执⾏的⽅法a可以考虑使⽤try-catch-finally⽅式进⾏处理

8.自定义异常类

(1)⼀般地,⽤户⾃定义异常类都是RuntimeException的⼦类
(2)⾃定义异常类通常需要编写⼏个重载的构造器。
(3)⾃定义异常需要提供serialVersionUID
(4)⾃定义的异常通过throw抛出。
(5)⾃定义异常最重要的是异常类的名字,当异常出现时,可以根据名字判断异常类型
public class MyException extends RuntimeException{
static final  long  serialVersionUID  = -7834897193246939L;
public MyException(){
}
public MyException(String s){
    super(s);
}

}

9.异常类总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值