----------android培训、java培训期待与您交流!----------
异常的基本概念
异常是导致程序中断运行的一种指令流,如果部队异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失。在java中一切的异常都秉着面向对象的设计思想,所有的异常类都以类和对象的形式存在,除了java中已经提供的各种异常类外,用户也可以根据需要定义自己的异常类
代码实例--认识异常
public class Demo{
public static void main(String args[]){
System. out.println("**********计算开始 ***********") ;
int i = 10; //定义整型变量
int j = 0; //定义整型变量
int temp = i / j ; //此处产生了异常
System. out.println("两个数字相除的结果:" + temp) ;
System. out.println("**********计算结束 ***********") ;
}
};
结果:
********** 计算开始 ***********
Exception in thread "main" java.lang.ArithmeticException: / by zero
attest.Demo.main( Demo.java:7)
以上程序中,因为被除数为0,所以程序中出现了一场。从运行结果可以发现,如果不对异常进行处理,则一旦出现了异常后,程序就立刻退出,所以后面的2条语句并没有打印出信息。。
在程序中使用异常处理
异常处理格式
try{
编写异常的处理语句
}catch(异常类异常对象)finally{
一定会运行到的程序代码}
对异常进行捕捉
代码实例
public class Demo{
public static void main(String args[]){
System. out.println("**********计算开始 ***********") ;
int i = 10; //定义整型变量
int j = 0; //定义整型变量
try{
int temp = i / j ; //此处产生了异常
System. out.println("两个数字相除的结果:" + temp) ;
System. out.println("----------------------------" ) ;
} catch(ArithmeticException e){
System. out.println("出现异常了:" + e) ;
}
System. out.println("**********计算结束 ***********") ;
}
};
结果:**********计算开始 ***********
出现异常了: java.lang.ArithmeticException: / by zero
********** 计算结束 ***********
上述代码中加入了异常处理,所以当有异常发生时,整个程序也并不会因为异常的产生而中断执行。
验证finally关键字
public class Demo{
public static void main(String args[]){
System. out.println("**********计算开始 ***********") ;
int i = 10; //定义整型变量
int j = 0; //定义整型变量
try{
int temp = i / j ; //此处产生了异常
System. out.println("两个数字相除的结果:" + temp) ;
System. out.println("----------------------------" ) ;
} catch(ArithmeticException e){ //捕获算术异常
System. out.println("出现异常了:" + e) ;
} finally{ //作为异常的统一出口,无论如何都会执行此代码
System. out.println("不管是否出现异常,都执行此代码" ) ;
}
System. out.println("**********计算结束 ***********") ;
}
};
结果:
********** 计算开始 ***********
出现异常了: java.lang.ArithmeticException: / by zero
不管是否出现异常,都执行此代码
********** 计算结束 ***********
异常类的继承结构
在整个java的异常结构中,实际上有2个最常用的类,分别为Excetion和Error,这2个类都是Throwable类的子类
Throwable类
|------>Exception类
|------>Error类
Exception:一般表示的是程序中出现的问题,可以直接使用try。。。catch处理
Error:一般指的是JVM错误,程序中无法处理
java的异常处理机制
在整个java的异常处理中,实际上也是按照面向对象的方式进行处理,步骤如下
1产生一个异常类的实例化对象
2在try语句中对此异常对象进行捕捉
3产生的异常对象与catch语句中的各个异常类进行匹配,如果匹配成功,则执行catch语句中的代码
代码实例
public class Demo{
public static void main(String args[]){
System. out.println("**********计算开始 ***********") ;
int i = 0 ; //定义整型变量
int j = 0; //定义整型变量
try{
Stringstr1 = args[0] ; //接收第一个参数
Stringstr2 = args[1] ; //接收第二个参数
i= Integer. parseInt(str1) ; //将第一个参数由字符串变为整型
j= Integer. parseInt(str2) ; //将第二个参数由字符串变为整型
int temp = i / j ; //此处产生了异常
System. out.println("两个数字相除的结果:" + temp) ;
System. out.println("----------------------------" ) ;
} catch(ArithmeticException e){ //捕获算术异常
// System.out.println("算术异常:" + e) ;
e.printStackTrace();
} catch(NumberFormatExceptione){ //捕获数字转换异常
System. out.println("数字转换异常:" + e);
} catch(ArrayIndexOutOfBoundsExceptione){ //捕获数组越界异常
System. out.println("数组越界异常:" + e) ;
} catch(Exception e){
System. out.println("其他异常:" + e) ;
}
System. out.println("**********计算结束 ***********") ;
}
};
结果:**********计算开始 ***********
数组越界异常: java.lang.ArrayIndexOutOfBoundsException : 0
********** 计算结束 ***********
ps:一般开发时,不管出现任何异常都可以直接使用Exception进行处理,这样会比较方便
throws与throw关键字
throws关键字
在定义一个方法时可以使用throws关键字声明,使用throws声明的方法表示此方法不处理异常,而交给方法的调用处进行处理,throws使用格式如下
public 返回值类型方法名称(参数列表....)throws异常类{}
代码实例----使用throws关键字
class Math{
public int div(int i,int j) throws Exception{ //定义除法操作,如果有异常,则交给被调用处处理
System. out.println("*****计算开始 *****") ;
int temp = 0 ; //定义局部变量
try{
temp= i / j ; //计算,但是此处有可能出现异常
} catch(Exception e){
throw e ;
} finally{ //不管是否有异常,都要执行统一出口
System. out.println("*****计算结束 *****") ;
}
return temp ;
}
};
public class Demo{
public static void main(String args[]){
Mathm = new Math() ;
try{
System. out.println("除法操作:" + m.div(10,0)) ;
} catch(Exception e){
System. out.println("异常产生:" + e) ;
}
}
};
结果:*****计算开始 *****
***** 计算结束 *****
异常产生: java.lang.ArithmeticException: / by zero
throw关键字
与与throws不同的是,直接使用throw抛出一个异常,抛出时直接抛出异常类的实例化对象即可。。
代码实例--抛出异常
public class Demo{
public static void main(String args[]){
try{
throw new Exception("自己抛着玩的。") ; // 抛出异常的实例化对象
} catch(Exception e){//打印异常信息
System. out.println(e) ;
}
}
};
结果:java.lang.Exception :自己抛着玩的。
Exception类与RuntimeException类
Exception类在程序中必须使用try....catch进行处理
RuntimeException可以不使用处理,但是如果有异常产生,则异常由jvm处理
Exception
|_______>>RuntimeException
自定义异常类
在java中已经提供了大量的异常类,但是这些类有时也很难满足开发的要求,所以用户可以根据自己的需要定义自己的异常类,定义异常类只需要继承Exception类即可
class MyException extends Exception{ //自定义异常类,继承Exception类
public MyException(String msg){
super(msg) ; //调用Exception类中有一个参数的构造方法,传递错误信息
}
};
public class Demo{
public static void main(String args[]){
try{
throw new MyException("自定义异常。") ; // 抛出异常
} catch(Exception e){
System. out.println(e) ;
}
}
}
结果:test.MyException :自定义异常。
小结
1 异常是导致程序中断运行的一种指令流,如果部队异常进行正确的处理,则可能导致程序的中断执行
2 异常可以使用try....catch进行处理,也开始使用try....catch...finally进行处理
3 异常的最大父类是Throwable。其分为2个子类,分别为Exception,Error。。。Exception表示程序处理的异常,而Error表示JVM错误,一般不由程序开发人员处理
4 throws用在方法声明处,表示本方法不处理异常
5 throw表示在方法中手工抛出一个异常