1.何为异常
程序运行过程中,由于一个不可能执行的操作而导致的程序中断
2.Java中异常
1.一种组织程序正常执行的错误
2.一个特殊的对象,Exception的子类
3.Java中错误
一个合理的应用程序不能截获的严重问题,比如VM(虚拟机)的一个故障
错误也是对象,是Error的子类
异常和错误的区别
1.异常是程序本身可以处理的,是由程序和外部环境所引起的
2.错误是系统本来自带的,一半无法处理也不想需要程序员来处理
4.Java API中异常结构关系
RuntimeException及其子类的异常都属于免检异常(编译是不解决或抛出这种异常编译不会报错)。
RuntimeException以外的异常,类型上都属于Exception类及其子类,需进行处理。
5.异常处理步骤
1.抛出异常:
当语音限制被违反是,将会抛出(throw)异常,及产生一个异常事件,生成一个异常对象,并把它交给一个运行系统,再由运行系统寻找相应的代码来处理异常
2.捕获异常:
异常抛出后,运行时系统从生成一场对象的代码开始,艳方法的调用栈开始查找,直到找到包含相应处理的方法代码,并把异常对象交给该方法为止。
package exception;
import java.io.IOException;
import java.util.Scanner;
public class Exceptiondemo {
public static void main(String[] args) {
try {
Scanner in = new Scanner(System.in);
System.out.println("请输入被除数");
int x = in.nextInt();
System.out.println("请输入除数");
int y = in .nextInt();
int res = divide(x,y);
System.out.println(res);
}
// catch(ArithmeticException e) {
// System.out.println("除数不能为0");
// e.printStackTrace();
// }
catch(Exception e1) {
e1.printStackTrace();
}
}
public static int divide(int x,int y) {
return x/y;
}
}
处理异常方式
1.使用try。。。catch。。。finally语句处理异常
2.使用throws关键字传递异常 并在调用函数是解决异常
以下为用throws关键词抛出异常并在调用函数时捕获并处理异常
package methoud;
class Math{
public int div(int i,int j) throws Exception{ // 定义除法操作,如果有异常,则交给被调用处处理
System.out.println("***** 计算开始 *****") ;
int temp = 0 ; // 定义局部变量
try{
temp = i / j ; // 计算,但是此处有可能出现异常
}catch(Exception e){
}
System.out.println("***** 计算结束 *****") ;
return temp ;
}
};
public class ThisDemo06{
public static void main(String args[]){
Math m = new Math() ;
try{
System.out.println("除法操作:" + m.div(10,0)) ; //调用函数
}catch(Exception e){
System.out.println("异常产生:" + e) ;
}
}
};
运行结果:
***** 计算开始 *****
***** 计算结束 *****
异常产生:java.lang.ArithmeticException: / by zero
主方法中也可以抛出异常
如果在主方法的声明也使用了throws关键字呢,那么是不是意味着主方法也可以不处理异常。
class Math{
public int div(int i,int j) throws Exception{ // 定义除法操作,如果有异常,则交给被调用处处理
int temp = i / j ; // 计算,但是此处有可能出现异常
return temp ;
}
};
public class ThrowsDemo02{
// 在主方法中的所有异常都可以不使用try...catch进行处理
public static void main(String args[]) throws Exception{
Math m = new Math() ; // 实例化Math类对象
System.out.println("除法操作:" + m.div(10,0)) ;
}
};
运行结果:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at methoud.Math.div(ThisDemo06.java:4)
at methoud.ThisDemo06.main(ThisDemo06.java:12)
throw关键字
throw关键字作用是抛出一个异常,抛出的时候是抛出的是一个异常类的实例化对象,
在异常处理中,try语句要捕获的是一个异常对象,那么此异常对象也可以自己抛出
package methoud;
public class ThisDemo06{
public static void main(String args[]){
try{
throw new Exception("自己抛着玩的。") ; // 抛出异常的实例化对象
}catch(Exception e){
System.out.println(e) ;
}
}
};
总结:
在JAVA异常处理机制中,
1)如果抛出的是EXception的类型,则必须进行try …catch进行处理。
2)如果抛出的是RuntimeException的类型,则可以不使用try。。catch处理,一旦发生异常之后,将由JVM处理。
为了保证程序的健康性,在有可能出现异常的时候还是老实使用try …catch处理。
throw与throws关键字联合使用问题。
1)throw:抛出异常。
2)throws:在方法声明处使用,表示此方法不处理异常,而在调用此方法处处理异常。
Exception是必须处理的,而RuntimeException异常是可以不处理的。但是为了保证程序正常运行,最好处理。
如果自定义异常,直接继承异常即可。
注:本篇文章部分代码参考博客[https://www.cnblogs.com/alsf/p/5626384.html]