Java异常处理

Java异常处理

1.定义

1.异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。

2.Java常见的三种异常类型
检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。

运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。

错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

2.Exception

1.所有的异常类是从 java.lang.Exception 类继承的子类。

2.Java 程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。

3.异常类有两个主要的子类:IOException 类和 RuntimeException 类。

4.Exception 类是 Throwable 类的子类。除了Exception类外,Throwable还有一个子类Error 。

5.Error 用来指示运行时环境发生的错误(不可恢复,JVM停止)。

3.Java的部分异常及描述(附图)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.关键字 Try/Catch/finally/throw/throws

1.使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。try/catch代码块中的代码称为保护代码,Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。( Alt + Shift + z 快捷键生成常用代码块)使用 try/catch 的语法如下:

    try {
			//输入所需保护的代码
			
		} catch (Exception e) { //括号内声明异常类型
			// TODO: handle exception
		}

多捕获异常

语法如下:

    try {
			//代码快
		} catch (ArithmeticException ex) {
			System.out.println("xxxxxx");
		} catch (IllegalFormatConversionException ex) {
			System.out.println("yyyyyy");
		} catch (Exception ex) {
			System.out.println("zzzzzz");
		}
	

上面的代码段包含了 3 个 catch块。
可以在 try 语句后面添加任意数量的 catch 块。
如果保护代码中发生异常,异常被抛给第一个 catch 块。
如果抛出异常的数据类型与 第一个匹配,它在这里就会被捕获。
如果不匹配,它会被传递给第二个 catch 块。
如此,直到异常被捕获或者通过所有的 catch 块。

2.finally

finally 关键字用来创建在 try 代码块后面执行的代码块。
无论是否发生异常,finally 代码块中的代码总会被执行。
(除非有System.exit(0); 退出虚拟机)在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。
finally 代码块出现在 catch 代码块最后,语法如下:

public static void main(String[] args) {
		try {
			//代码快
		} catch (ArithmeticException ex) {
			System.out.println("xxxxxx");
		} catch (IllegalFormatConversionException ex) {
			System.out.println("yyyyyy");
		} catch (Exception ex) {
			System.out.println("zzzzzz");
		}finally {
			System.out.println("最终");
		}

3.throw/throws 关键字:

如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。

public static void dosth() throws FileNotFoundException{
		int a = 23,b=33;
	
		if(a > b) {
			// 如果抛出的异常对象类型是一个No Checked异常,则可以使用throws声明异常类型
			// throw new NullPointerException();
			
			// 如果抛出的异常对象类型是一个Checked异常,则必须使用throws声明异常类型
			throw new FileNotFoundException();
		}
		
		System.out.println();
	}

5.自定义异常

在 Java 中你可以自定义异常。编写自己的异常类时需要记住下面的几点。
1.所有异常都必须是 Throwable 的子类。
2.如果希望写一个检查性异常类,则需要继承 Exception 类。
3.如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。

public static void donothing() throws CountTooLargeException{
		int count = 9990;
		if(count >= 999) {
			// 	创建并抛出自定义异常对象
			// 	throw new CountTooLargeException(); //使用无参构造方法创建,采用默认提示信息
			
			//	使用有参构造方法创建,采用自定义提示信息
			throw new CountTooLargeException("抢购商品数量过大!");
		}
	}

部分异常体系如下

NO Checked
Throwable类
异常Exception类
Error错误类
运行时异常RuntimeException类
NullPointerException
IndexOutOfBoundsException
IllegalArgumentException
ArrayIndexOutOfBoundsException
StringIndexOutOfBoundsException
NumberFormatException
Checked异常
SQLException类
IOException类
自定义异常
FileNotFoundException
VirtualMachineError 虚拟机错误
OutOfMemoryError 内存溢出错误

部分异常类:

算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
违背安全原则异常:SecturityException
文件已结束异常:EOFException
文件未找到异常:FileNotFoundException
字符串转换为数字异常:NumberFormatException
操作数据库异常:SQLException
输入输出异常:IOException
方法未找到异常:NoSuchMethodException

注:在Exception中,No Checked异常可处理可不处理,但Checked 异常中,该异常必须处理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值