------- android培训、java培训、期待与您交流! ----------
异常
一旦长须发现异常,将导致程序中断执行,我们希望即使程序出现了异常,我们也希望程序正常执行完毕。所以我们需要处理异常try catch finally
try{
//有可能出现异常的代码
}catch(Exception e){
//异常处理代码
}finally{
//不管是否异常,都要执行的代码
}
如果需要知道异常的完整信息,那么可以调用异常类之中的printStackTrace()方法
ArrayIndexOutOfBoundsException,如果接收主函数的参数,有可能出现这个异常,数组越界异常
try{
int x=Integer.parseInt(args[0]);
int y=Integer.parseInt(args[1]);
System.out.println(x/y);
//有可能出现异常的代码
int i=10/6;
}catch(Exception e){
//异常处理代码
System.out.println("出现异常");
e.printStackTrace();
}finally{
//不管是否异常,都要执行的代码
System.out.println("计算结果");
}
如果输入的不是数字,可能出现NumberFormatException这个异常,数据格式异常
如果输入的被除数是0则会出现ArithmeticException算术异常
所以我们需要多个catch来捕获异常,并进行处理
异常的处理流程:
java之所以用异常处理,是为了减少if else判断,所以以上的处理方案,只是一种严格的方案,如果某些代码分析起来比较麻烦,那么编写多个catch就不那么好用。
error:表示JVM系统出错,程序没执行。处理不了
Exception表示程序运行过程出现的异常,用户可以进行处理
如果在要求不严的情况下,可以用Exceprion来处理所有异常信息
throws关键字
在类之中所有的操作都是以方法体现的,那么在操作中也可能出现异常,如果这样我们也希望异常进行处理,这时就使用throws进行声明抛出异常,然后在调用时使用trycatch来进行处理
在主方法main()也可以使用throws,表示主方法不处理异常,交给JVM来处理
public class Test03 {
public static void main(String[] args){
//这里处理异常
try {
System.out.println(Math.div(5,9));
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Math{
//在这里抛出异常,在调用出用try catch来处理
public static int div(int x,int y) throws Exception{
return x/y;
}
}
throw关键字
在处理异常之中,可以使用throw人为抛出一个异常对象。
public class Test03 {
public static void main(String[] args){
try {
Math.div();
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Math{
public static void div() throws Exception{
throw new Exception("自己抛的异常");
}
}
throw和throws的区别:
throw是认为抛出一个实例化异常对象。
而throws用在方法当中,表示此处不处理异常,交给被调用处处理
异常处理标准格式:
public class Test03 {
public static void main(String[] args){
try {
System.out.println("程序计算结果"+Math.div(19,0));
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Math{
public static int div(int x,int y) throws Exception{
int result=0;
System.out.println("计算开始");
try{
result=x/y;
}catch(Exception e){
throw e;
}finally{
System.out.println("计算结束");
}
return result;
}
}
RuntimeException类:
为了方便用户处理,并不是所有的异常都必须强制处理,那么RuntimeException就可以由用户选择处理,它是Exception的子类,它由用户选择性处理,如果不处理,那么则会由JVM进行默认处理
它的子类有很多,比如
ArithmeticException,ClassCastException,NumberFormatExceprion,等