一、异常的基本概念
1、在没有异常处理的语言中,如果要处理异常,就必须使用大量的判断语句。
2、异常处理机制的优点:易于使用,可自行定义异常类、处理抛出的异常又不会降低程序的运行速度。
二、异常处理的一般格式
try{
//有可能出现异常的语句
}
catch(异常类 异常对象){
//编写异常的处理语句
}
catch(异常类 异常对象){
//编写异常的处理语句
}、、、、、
finally{
//一定会运行到的程序代码
}
程序中加入异常处理代码,所以当有异常发生后,整个程序也不会因为异常的产生而中断执行;
三、异常类的继承结构
1、Throwable有两个子类:Exception和Error
(1)Exception:一般表示的是程序中出现的问题,可以直接使用try、、、catch处理
(2)Error:一般指的是JVM错误,程序中无法处理
四、throws与throw关键字
1、throws关键字
(1)格式:
public 返回值类型 方法名称(参数列表、、、) throws 异常类{ }
(2)示例:
package lkp;
class Math{
public int div(int i,int j) throws Exception{
int temp = i/j;
return temp;
}
}
public class Test{
public static void main(String args[]){
Math math = new Math();
try{
System.out.println("除法操作:" + math.div(10,2));
}catch(Exception e){
e.printStackTrace();
}
}
}
2、throw关键字
可以使用throw关键字认为的抛出一个异常,示例如下:
package lkp;
public class Test{
public static void main(String args[]){
try{
throw new Exception("自己抛出的异常");
}catch(Exception e){
e.printStackTrace();
}
}
}
PS:但是在一般情况下,throw不会单独使用;
3、throw和throws的综合应用
package lkp;
class Math{
public int div(int i,int j) throws Exception{//方法可以不处理异常
System.out.println("---计算开始---");
int temp = 0; //声明一个整型变量
try{
temp = i/j; //如果产生异常,则执行catch
}catch(Exception e){
throw e;
}finally{
System.out.println("---计算结束---");//不管是否异常都执行此方法
}
return temp;
}
}
class Test{
public static void main(String args[]){
Math math = new Math();
try{
System.out.println("除法运算:" + math.div(10,0));
}catch(Exception e){
System.out.println("异常产生:" + e);
}
}
}
五、Exception和RuntimeException的区别
1、Exception在程序中必须使用try...catch进行处理
2、RuntimeException可以不使用try...catch进行处理,但是如果有异常产生,则异常将有JVM进行处理
六、自定义异常类
仅需要继承Exception类即可,简单示例如下:
package lkp;
class MyException extends Exception{
public MyException(String msg){
super(msg);
}
}
class Test{
public static void main(String args[]){
try{
throw new MyException("自定义异常");
}catch(Exception e){
System.out.println(e);
}
}
}
七、断言
概念:就是肯定某一个结果的返回值是正确的,如果最终此结果的返回值是错误的,则通过断言检查肯定会提示错误信息。
格式:assert boolean 表达式;
assert boolean 表达式:详细的信息;
简单的示例如下:
package lkp;
public class Test{
public static void main(String args[]){
int x[] = {1,2,3};
assert x.length == 0:"数组长度不为0";
}
}
PS:运行时,要在命令行下加上参数-ea运行。
javac Test.java
java -ea Test