1:什么是异常
简单来说:
异常情况是指程序在运行时,可能由与外部系统的条件变更(与我们一厢情愿所设想的不一设)而导致程序可能会出错的情况
import java.util.Scanner;
/**
* 演示除数为0的情况
* @author pactera
*
*/
public class TestException {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入被除数:");
int num1 = input.nextInt();
System.out.println("请输入除数:");
int num2 = input.nextInt();
System.out.println("计算结果如下:");
System.out.println(num1+"/"+num2+"="+(num1/num2));
}
}
//对于除数为0是 程序就会报错
2. 异常的体系结构
1:Error为错误,是程序无法处理的,如OutOfMemoryError、ThreadDeath等,出现这种情况你唯一能做的就是听之任之,交由JVM来处理,不过JVM在大多数情况下会选择终止线程。
2:Throwable:代表程序运行过程中所有的异常 异常根类
理解:
Error 错误:一般是计算机的问题,计算机硬件坏死
Exception开发中常见遇到的异常:
运行时异常:一个异常类是继承RuntimeException或者其子类
编译时异常:不是继承RuntimeException或其子类,但继承自Exception的异常
重点:语法错误不在异常体系中,无论try中的代码是否异常finally中的代码都会被执行一次
3:异常的处理
3.1 try-catch
try{
可能抛出异常的代码. . .
//如果没有问题出理,执行如下面的代码
(A)其它计算代码…
}catch(Exception ef){
//如果出现异常后执行的代码:
(B)出了异常情况的计算代码. . .
e.printStackTrace();//可以在控制台打印详细的异常信息,在开发阶段使用,便于调试代码
//异常的处理,我们简单输出一句话,但是在真实的项目中,不能只是输出一句话,而是要做相应的处理
}
//未异常就继续执行,出现异常就执行B
异常分为强制检测和非强制检测二种
强制检测:代码检查到了就能够出现异常的汇报
非强制检测:数组越界,程序员编码是出现的逻辑错误
int[] ia=new int[10];
ia[10]=100;
String s="123abc";
int sa=Integer.parseInt(s);//转为int型
//
运行时会抛出:
`java.lang.NumberFormatException: For input string: "123abc"`
因为要将s解析为int时,s中的字符必须是0~9之间的。
catch多个异常时:范围小的写在最前面
3.2 try-catch-finally
不管是否异常都会执行finally
注意:
1.try 代码段包含的是可能产生异常的代码
2.try 代码段后跟一个或多个catch代码段。(或跟一个finally代码段)
3.当异常发生时,程序会中止当前的流程去执行相应的catch代码段。
4.写catch代码时,先捕获的异常的范围不能大于后捕获的异常的范围。
5.finally段的代码无论是否发生异常都执行。
3.3 throw 与throws
throw表示抛出异常,语法是:
throw new 异常类型([异常信息]);
比如说: throw new Exception(“抛个异常玩玩”);
throws表示用来声明方法可能会抛出那些异常: 语法是:
throws 异常类型1,异常类型2…
代码演示:
//定义一个除法的方法,并声明异常
public int division(int num1 ,int num2) throws ArithmeticException{
if(num2 == 0){
//抛出异常,如果抛出异常,则抛出异常后面的代码不会执行
throw new ArithmeticException("除数不能为0");
}
return num1/num2;
}
面试题:throw和throws的区别
throw 在方法体中 抛出一个异常对象
new throw Exception();
可使用自定义的异常-
throws 出现在方法的申明上,表示调用者来调用这个方法的时候
告诉调用者,该方法可能出现异常
4:自定义异常
4.1:创建异常类
创建自定义异常,需要继承Exception 或其子类。习惯上包装一下父类的构造方法。
public class MyException extends Exception {
public MyException() {
super();
}
public MyException(String msg) {
super(msg);
}
public MyException(Throwable cause) {
super(cause);
}
public MyException(String msg, Throwable cause) {
super(msg, cause);
}
}
4.2:使用自定义异常类
public String[] createArray(int length) throws MyException {
if (length < 0) {
throw new MyException("数组长度小于0,不合法");
}
return new String[length];
}
5:总结
1:面试题:throw和throws的区别:一个是调用 一个是声明中
2:常用的异常:自定义异常,首选需要继承父类,再进行方法的重写,在利用自定义方法的对象进行调用自定义的异常方法
3: try-catch-finally和try-catch的区别在于finally不管是否抛出异常都会执行
4:catch多个异常时:范围小的写在最前面 或者说只使用一个异常抛出(最大的异常类eg.Exception)
6:建议采纳
如有建议或者错误请私信我进行修改,感谢!