异常处理 Exception (in java.lang)
----------------------------------------------------------------------
Error:称为错误,由 Java 虚拟机生成并抛出。
Exception:所有异常类的父类。
Runtime Exception:一类特殊的异常,由系统自动检测并将它们交给缺省的异常处理程序(用户可不必对其处理)。如被 0 除、数组下标超范围等。
Throwable
//
Error Exception
| //
... ... RuntimeException//可以不声明
|
...
ClassNotFoundException
IOException
InterruptedException
RuntimeException
ArithmeticException
NullPointerException
IndexOutOfBoundsException
ArrayIndexOutObBoundsException
StringIndexOutObBoundsException
----------------------------------------------------------------------
try{
……
}catch(TheException x){
……//处理异常
}finally{
……//后续工作,如清除临时文件
}
x.printStackTrace() 输出堆栈信息
System.out.println(x.getMessage()) 输出异常事件信息
----------------------------------------------------------------------
捕获多个异常应该先逮小的再逮大的。否则编译不通过。
----------------------------------------------------------------------
自定义异常:
性别异常。
文件:Exception13.java
class SexException extends Exception{//仅仅是声明是个异常,和定义其他类一样,只需要继承Exception
SexException(String message){
super(message);
System.out.println("年龄异常");
}
}
class Exception13{
public void aa(int age)throws SexException{//抛出异常
if(age<18){
throw new SexException("联系管理员");//注意throw new 的顺序
}
}
public static void main(String[] args) {
Exception13 ex=new Exception13();
try{
ex.aa(17); //引用这个抛出了异常的方法
}catch(SexException se){ //然后解决(catch)这个异常吧
se.printStackTrace();
}
}
}
```````````````````````````````````````````````````````````````````````````
文件:Test_13.java
class MyException extends Exception {//仅仅是声明是个异常,和定义其他类一样,只需要继承Exception
private int id;
public MyException(String message,int id) {
super(message);
this.id = id;
}
public int getId() {
return id;
}
}
class Test_13 {
public void regist(int num) throws Exception {//抛出异常
if (num < 0) {
throw new MyException("人数为负值,不合理", 1);//抛出异常
}
System.out.println("登记人数 " + num);
}
public void manager() {
try {
regist(-100);//引用这个抛出了异常的方法
} catch (Exception e) {//然后解决(catch)这个异常吧
System.out.println("登记失败,出错类型码=" + ((MyException)e).getId());
e.printStackTrace();
}
System.out.print("操作结束");
}
public static void main(String[] args) {
Test_13 t = new Test_13();
t.manager();
}
}
----------------------------------------------------------------------
异常的其他用法:
判断String 是否为整数。
public class DataC{
public static void main(String[] args) {
DataC c=new DataC();
System.out.println(c.DataInt("123"));
}
boolean DataInt(String b){
boolean a;
try{
Integer.parseInt(b);
a=true;//只有上行转成功,程序才可以运行到这里。否则已经被捕捉
}catch(Exception ex){
a=false;
}
return a;
}
}