参考书籍:Java面向对象程序设计(第二版)--耿祥义 张跃平编著
所谓异常就是程序在运行时候可能出现一些错误,如打开一个不存在的文件,异常处理将会改变程序的控制流程,让程序有机会对错误做出处理
Java的异常出现在方法的调用过程中,即在方法调用过程中抛出异常对象,即在方法调用过程中抛出异常对象,导致程序运行出现异常,并等待处理。如流对象在调用read方法读取一个不存在的文件,会抛出IOException异常。
异常对象可以调用以下方法得到或输出有关异常的信息:
public String getMessage();
public void printStackTrace();
public String String();
一: try-catch语句
格式:
Try{
包含可能发生的异常语句(发生异常的语句后跳到catch里面,异常语句下面那些不再执行)
}
catch(ExceptionSubClass1 e){
...
}
catch(ExceptionSubClass2 e){
...
}
各个catch参数中的异常都是Exception的某个子类,表明try部分可能发生的异常,这些子类之间不能有父子关系,否则保留一个含有父类参数的catch即可。
Java.lang包中的Integer类调用其类方法:
public static int parseInt(String s)
可以将“数字”格式的字符串(如“982”)转化为int型数据,但是当试图将字符串“ab85”转化成数字时,例如:
Int number=Integer.parseInt(“ab85”);
方法parseInt在执行过程中会抛出NumberFormatException对象,即程序运行时出现NumberFormatException异常(数字格式异常)
二:自定义异常类
我们也可以扩展Exception类定义自己的异常类,然后规定哪些方法产生这样的异常。
一个方法在声明时可以使用throws关键字声明要产生的若干个异常,并在该方法的方法体中具体给出产生异常的操作,即用对应的异常类创建对象,并使用throw关键字抛出该异常对象,导致该方法结束执行。
程序必须在try-catch块语句中调用能发生异常的方法,其中catch的作用就是捕获throw方法抛出的异常。
注意:throw和throws是两个不同的关键字
IntegerEx类
package p4;
public class IntegerEx extends Exception{
String message;
public IntegerEx(int a){ //带参数的构造方法
message=a+"不合理";
}
public String toString(){
return message;
}
}
People类
package p4;
public class People {
private int age=1;
public void setAge(int age) throws IntegerEx{
if(age>=100||age<=0){
throw new IntegerEx(age); //方法抛出异常,导致方法结束
}
else{
this.age=age;
}
}
public int getAge(){
System.out.println(age+"合理");
return age;
}
}
主类
package p4;
public class P4 {
public static void main(String args[]){
People chy=new People();
People hhx=new People();
try{
chy.setAge(120); //调用方法
System.out.println(chy.getAge());
}
catch (IntegerEx e){
System.out.println(e.toString());
}
try{
hhx.setAge(20);
System.out.println(hhx.getAge());
}
catch (IntegerEx e){
System.out.println(e.toString());
}
}
}