JAVA异常处理

目录

一、什么是异常,如何处理异常

二、throws与throw关键字

三、RuntimeException和Exception的区别


一、什么是异常,如何处理异常

程序在运行过程中,都有可能存在大量的未知问题,就以下面这段代码为例,输入两个数做除法运算,但是当除数为0时会产生异常。

package test;

import java.util.Scanner;

public class Except {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int i=sc.nextInt();
		int j=sc.nextInt();
		int temp=i/j;
		System.out.println("计算结果"+temp);
		System.out.println("**************");
		System.out.println("结束");
	}

}

从运行结果可以看,如果不对异常进行处理的话,一旦出现异常,程序就会立刻退出,所以后面的两条语句就没有执行。

这就需要我们对异常进行处理,在Java中,异常处理有着自己的格式

try{
//有可能出现的异常语句
}catch(异常类 异常对象){
//编写异常的处理语句
}[catch(异常类 异常对象){
//编写异常的处理语句
}catch(异常类 异常对象){
//编写异常的处理语句
}...]
[finally{
//一定会运行到的代码
}]   //finally可以省略

 对上述代码进行异常捕捉

package test;

import java.util.Scanner;

public class Except {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int i=sc.nextInt();
		int j=sc.nextInt();
		try {
		int temp=i/j;
		System.out.println("计算结果"+temp);
		}catch(Exception e) {
			e.printStackTrace();
		}
		System.out.println("**************");
		System.out.println("结束");
	}

}

从程序运行结果可以清楚的发现,因为程序中加入了异常处理的代码,所以当有异常发生之后,整个程序也不会因为异常发生而中断执行。

二、throws与throw关键字

1、throws关键字

在定义一个方法的时候可以使用throws关键字,使用throws声明的方法表示此方法不处理异常,而交给方法的调用处处理

使用格式

public 返回值类型 方法名称(参数列表...)throws 异常类 {}

例如

package test;

import java.util.Scanner;

class Math{
	public int div(int i,int j)throws Exception{   //本方法中可以不处理异常
		int temp=i/j;    //此处有可能产生异常
		return temp;     //返回计算结果
	}
	
}

public class Except {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("开始计算");
		Math m=new Math();     //实例化Math对象
		try {      //因为有throws,不管是否有异常,都必须处理
		int num=m.div(10, 0);
		System.out.println(num);
		}catch(Exception e) {
			e.printStackTrace();   //打印异常
		}
		System.out.println("**************");
		System.out.println("结束");
	}

}

运行结果如下:

在上述代码中,不管是否有问题,都要使用try...catch块进行异常的捕捉与处理,既然throws是在方法处定义的,那么主方法上也可以使用throws关键字,但是主方法为程序的起点,所以主方法抛出异常时,只能将异常抛给JVM进行处理。就好比一个公司,部门事情处理不了就要报给经理,经理处理不了就要报给董事长,到董事长也就到头了,那么Java的“头”就是JVM了。所以如果主方法出现异常,程序将无法执行

2、throw关键字

与throws关键字不同的是,可以直接使用throw关键字抛出一个异常,抛出时直接抛出异常类的实例化对象即可。

package test;

import java.util.Scanner;


public class Except {

	public static void main(String[] args)throws Exception {
		// TODO Auto-generated method stub
		try {
			throw new Exception("抛出异常");
		}catch(Exception e) {
			e.printStackTrace();
		}
	}

}

上述代码并不难以理解,因为异常产生时肯定会由系统产生一个异常类的实例化对象,只是此时异常类的实例化对象是手工产生的而已, 程序执行结果:

 问:为什么要有throw关键字,在开发中,代码肯定是不产生异常才是最好的,那为什么要提供一个throw让用户自己产生异常,这不是不合理的吗?

答:抛出自己的异常。实际上,Java中所有的异常也是使用throw抛出的,只不过这部分代码已经被Java隐藏起来,大家感受不到而已。

三、RuntimeException和Exception的区别

常见面试题分析:请解释一下RuntimeException和Exception的区别,请举例常见的RuntimeException

(1)RuntimeException是Exception的子类

(2)Exception定义了必须处理的异常,而RuntimeException定义了异常可以选择性的进行处理

(3)常见的RuntimeException:NumberFormatException、ClassCastException、NullPointerException、ArithmeticException、ArrayIndexOutOfBoundsException

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朱颜辞镜花辞树>

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值