java异常篇

简单示例

下面是一个简单的示例,说明了Java中异常处理的过程:

`java

public class ExceptionExample {

public static void main(String[] args) {

try {

int result = divide(10, 0);

System.out.println("结果:" + result);

} catch (ArithmeticException e) {

System.out.println("除数不能为0!");

}

System.out.println("程序继续执行...");

}

public static int divide(int dividend, int divisor) {

return dividend / divisor;

}

`

在上面的示例中,我们定义了一个divide方法,用于进行两个数的除法运算。当除数为0时,会抛出一个ArithmeticException异常。在main方法中,我们使用try-catch语句块来捕获这个异常,并在catch块中打印出错误信息。

当程序执行到divide方法时,由于除数为0,会抛出一个ArithmeticException异常。程序会立即停止当前的执行流程,并跳转到catch块中执行异常处理代码。在catch块中,我们打印出了错误信息"除数不能为0!"。

在异常处理完成后,程序会继续执行catch块之后的代码,即打印"程序继续执行..."。这表明,即使抛出了异常,Java程序仍然可以继续执行,而不会终止。

需要注意的是,如果在try块中抛出异常后没有相应的catch块来处理异常,那么异常将会被抛到调用栈的上一级,直到找到合适的catch块来处理异常,或者程序终止。

异常及其体系介绍


基本概念
Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)
执行过程中所发生的异常事件可分为两大类
1)Error(错误):Java虚拟机无法解决的严重问题。如: JVM系统内部错误.资耗尽等严重情况。比如: StackOverflowError[栈溢出]和O0M(out ofmemory)内存溢出,Error 是严重错误,程序会崩溃
2)Exception: 其它因编程错误或偶然的外在因素导致的一般性问题,可以使用网络连接对性的代码进行处理。例如空指针访问,试图读取不存在的文件,断等等,Exception 分为两大类: 运行时异常[和编译时异常[

 在程序遇到异常时,程序会无法执行,所以引入了异常处理机制,使得程序继续执行,保证了程序的健壮性。

常见的运行时异常包括


1)NullPointerException空指针异常

2)ArithmeticException数学运算异常

3)ArraylndexOutOfBoundsException数组下标越界异常

4)ClassCastException类型转换异常

5)NumberFormatException数字格式不正确异常

常见的编译异常


编译异常是指在编译期间,就必须处理的异常,否则代码不能通过编译


常见的编译异常
SQLException //操作数据库时,查询表可能发生异常

IOException //操作文件时,发生的异常

FileNotFoundException //当操作一个不存在的文件时,发生异常

ClassNotFoundException //加载类,而该类不存在时,异常

EOFException // 操作文件,到文件未尾,发生异常

lllegalArguementException //参数异常

异常处理机制

1、try catch finally

2、throws

异常处理机制细节

一、 try catch finally

try-catch方式处理异常-注意事项 
1)如果异常发生了,则异常发生后面的代码不会执行,直接进入到catch块

2)如果异常没有发生,则顺序执行try的代码块,不会进入到catch.

3)如果希望不管是否发生异常都执行某段代码(比如关闭连接,释放资源等)则使用如下代码- finally{}
tryl {

//可疑代码

}

]catch(异常)

{....}

finally{

//释放资源等

}
try {int a = Integer.parselnt(str):System.out.println("数字:"+ a);}catch (Exception e) {e.printStackTrace();} finally {System.out.println("不管是否发生异常,始终执行的代码~~”;}

4)可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,比如(Exception 在后,NullPointerException 在前),如果发生异常,只会匹配一个catch,案例演示
try{

} catch(NullPointerExcetpion e) {}

catch(Exception e){}

finally{}

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

try {

//代码...

}

finally{ //总是执行

}

二、throws

注意事项和使用细节

1)对于编译异常,程序中必须处理,比如try-catch 或者throws

2)对于运行时异常,程序中如果没有处理,默认就是throws的方式处理[举例]

3)子类重写父类的方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常的类型的子类型[举例]

4)在throws 过程中,如果有方法try-catch,就相当于处理异常,就可以不必throws

throw 与 throws 的区别

意义位置后面跟的东西
throws异常处理的一种方式方法声明处异常类型
throw手动生成异常对象的关键字方法体中异常对象

 使用格式: throw new xxxException(“异常产生的原因”)

/*
  定义一个方法,获取数组指定索引处的元素
  参数:
   int[] arr
   int index
  以后(在工作中)我们首先必须对方法传递过来的参数进行合法性校验
  如果参数不合法,那么我们就必须使用抛出异常的方式,告知方法的调用者,传递的参数有问题。
  注意:
   NullPointerException是一个运行期异常,我们不用处理,默认交给JVM处理
   ArrayIndexOutOfBoundsException是一个运行期异常,我们不用处理,默认交给JVM处理
 */
public static int getElement(int[] arr, int index) {
 	/*
	   我们可以对传递过来的参数数组,进行合法性校验
	   如果数组arr的值是null
	   那么我们就抛出空指针异常,告知方法的调用者“传递的数组的值是null”
	  */
	 if(arr == null) {
 		 throw new NullPointerException("传递的数组的值是空!");
	 }
	 /*
	   我们可以对传递过来的参数index进行合法性校验
	   如果index的范围不在数组的索引范围内
	   那么我们就抛出数组索引越界异常,告知方法的调用者“传递的索引超出了数组的适用范围”
	  */
	if(index < 0 || index > arr.length-1) {
		throw new ArrayIndexOutOfBoundsException("传递的索引超出了数组的使用范围");
	}
	int ele = arr[index];
	return ele;
}
————————————————
版权声明:本文为CSDN博主「黄叶都」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44764207/article/details/106862531

自定义异常

基本概念

当程序中出现了某些“错误”,但该错误信息并没有在Throwable子类中描述处理,这个时候可以自己设计异常类,用于描述该错误信息。

自定义异常的步骤·

1)定义类:自定义异常类名(程序员自己写)继承Exception或RuntimeException

2)如果继承Exception,属于编译异常

3)如果继承RuntimeException,属于运行异常(一般来说,继承RuntimeException,因为Exception还需要在调用的位置处声明一个抛出异常)

简单示例

public class Exception_ {
    public static void main(String[] args) {
        int age = 130;
        if (0<age&&age>100) {
            throw new AgeException("您的年龄输入不正确");
        }
        System.out.println("您的年龄输入正确");
    }

}
class AgeException extends RuntimeException {
    public  AgeException (String message) { //构造器 , 消息参数message
        super(message); //调用父类构造器,最终调用了Throwable的构造器
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值