1.异常
受检异常(checked exception):在编译时需要检查的异常,需要用try-catch或throws处理。在java中主要指除了Error和RuntimeException之外的异常
非受检异常(unchecked exception):不需要在编译时处理的异常。在java中派生于Error和RuntimeException的异常都是unchecked exception,其他都是checked exception
注意点:
前面使用的异常都是
RuntimeException
类或是它的子类,这些类的异常的特
点是:即使没有使用
try
和
catch
捕获,
Java
自己也能捕获,并且编译通过
(
但运行时会发生异常使得程序运行终止
)
。
如果抛出的异常是
IOException
等类型的非运行时异常,则
必须捕获,否则
编译错误
。也就是说,我们必须处理编译时异常,将异常进行捕捉,转化为
运行时异常
@Test
public void test4(){
String []str = new String[]{"AA","BB","CC"};
try {
for (int i = 0; i < 5; i++) {
System.out.println(str[i]);//数组越界
}
} catch (Exception e) {
e.printStackTrace();//打印异常类名、异常信息、异常所处位置
System.out.println("--------------");
System.out.println(e.getMessage());//获取异常信息
} finally {
}
}
2.手动抛出异常
首先要生成异常类对象,然后通过
throw
语句实现抛出操作
(
提交给
Java
运行环境)
。
IOException e = new IOException();
throw e;
可以抛出的异常必须是
Throwable
或其子类的实例。下面的语句在编译时将会产生语法错误:
throw new String("want to throw");
3.用户自定义异常类
用户自定义得异常类必须通过手动抛出 throw new MyException()
一般地,用户自定义异常类都是
RuntimeException
的子类。
自定义异常类通常需要编写几个
重载的构造器
。一个空参构造器,一个带String message构造器
自定义异常需要提供
serialVersionUID
自定义的异常通过
throw
抛出
。
自定义异常最重要的是异常类的名字,当异常出现时,可以根据名字判断异常类型。
//自定义异常类
public class MyException extends Exception{
//1.首先得有一个UID
static final long serialVersionUID = -33875169929948L;
//有一个自己得ID
private int idnumber;
//2.重载的构造器
public MyException(String message, int idnumber) {
super(message);//new一个自定义异常类时所包含得信息,throw new MyException("人数不能为负数,不合理",2);
this.idnumber = idnumber;
}
//3.get方法
public int getIdnumber() {
return idnumber;
}
}
//测试MyException
public class MyExpTest {
//1.有一个登记人数得方法
public void regist(int num) throws MyException {
if(num<0){
throw new MyException("人数不能为负数,不合理",2);
}else{
System.out.println("登记人数:"+num);
}
}
//2.一个管理方法
public void manager() {
//首先我们等级人数,登记100个人
try {
regist(-1);
} catch (MyException e) {
// e.printStackTrace();//打印异常类名,异常信息,异常所处位置
// System.out.println("登记失败,出错种类"+e.getIdnumber());
System.out.println(e.getMessage());
} finally {
System.out.println("本次登记结束");
}
}
//3.main方法
public static void main(String[] args) {
MyExpTest t= new MyExpTest();
t.manager();
}
}
4.总结