1、异常概述
在程序中,可能产生没有预料的各种情况,或者超出可控的范围环境因素。
异常是一个在程序执行期间发生的事件,它中断了环境正在执行的程序的正常指令流。
例:
public class Test
{
public static void main(String[] args){
int result=3/0;
System.out.println(result);
}
}
程序报出算数异常:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Test.main(Test.java:4)
系统不再继续执行下去,提前结束,这就是所说的异常。
2、处理异常
可以使用在Java中捕获异常的方法。
异常产生后,如果不做任何处理,程序就会被终止,不再执行下面的语句。
可以通过捕获异常语句来处理:
异常捕获结构由三部分组成,try、catch、finally,try是存放是可能发生异常的语句,catch程序块在try语句块之后,用来激发被捕获的异常,finally语句块是异常处理结构最后执行的语句。
try{
//程序代码块
}
catch(Exceptiontype1 e){
//语句块
}
...
finally{
//程序块
}
(1)try-catch
public class Test {
public static void main(String[] args){
try{
String str="fan";
System.out.println(str+"年龄是");
int age=Integer.parseInt("20L");
System.out.println(age);
}catch(Exception e){
e.printStackTrace();
}
System.out.println("program over");
}
}
fan年龄是
java.lang.NumberFormatException: For input string: "20L"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at Test.main(Test.java:6)
program over
Integer.parseInt():将一个字符串转化成一个整数,如果字符串不是整数形式,就会抛出异常。
上面例子中,先执行try语句块中的代码,当执行到:
int age=Integer.parseInt("20L");
发生异常,程序转接到catch代码块中执行,输出异常信息。
最后继续执行后面的代码。
异常处理常用以下三个函数来获取相关信息:
getMessage():输出错误的性质;
toString():给出异常类型与性质;
printStackTrace():指出异常的类型,性质,栈层次及出现在程序中的位置。
(2)finally
完整的异常处理语句一定要包含finally语句,无论程序中有无异常发生,都会执行finally语句;
下面四种情况不会执行finally语句块:
在finally语句中发生异常;
在前面的代码中使用了System.exit退出程序;
程序所在的线程死亡;
关闭CPU;
3、Java中比较常见的异常
所有的类都是Throwable类的子类,Throwable类派生了两个类,分别是Exception和Error类。
Error类:用来描述java系统中的内部错误以及资源耗尽的错误,这些错误比较严重。
Exception:非致命性质类,可以通过捕获处理程序继续执行。还可以分为:IOException和RuntimeException异常;
- 算术异常类:ArithmeticExecption
- 空指针异常类:NullPointerException
- 类型强制转换异常:ClassCastException
- 数组负下标异常:NegativeArrayException
- 数组下标越界异常:ArrayIndexOutOfBoundsException
- 违背安全原则异常:SecturityException
- 文件已结束异常:EOFException
- 文件未找到异常:FileNotFoundException
- 字符串转换为数字异常:NumberFormatException
- 操作数据库异常:SQLException
- 输入输出异常:IOException
4、自定义异常
使用Java中异常类可以描述在编程时出现的大部分异常情况,除此之外,用户只需继承Exception类即可定义异常类。
在程序中使用自定义异常步骤:
- 创建自定义异常类
- 在方法中通过throw关键字抛出异常
- 进行下一步
public class MyException extends Exception {//创建自定义异常,继承Exception类
public MyException(String ErrorMessage){ //构造方法
super(ErrorMessage); //父类构造方法
}
}
public class Tran {
static int avg(int num1,int num2) throws MyException{
if(num1<0||num2<0){
throw new MyException("不可以使用负数");
}
if(num1>100||num2>100){
throw new MyException("数值太大了");
}
return (num1+num2)/2;
}
public static void main(String[] args){
try{
int result=avg(103,105);
System.out.println(result);
}catch (MyException e){
System.out.println(e);
}
}
}
MyException: 数值太大了