1.系统自动抛出的异常
系统定义的编译和运行异常都可以由系统自动抛出,称为<strong>标准异常。
2.语句抛出的异常
用户程序自定义的异常和应用程序特定的异常,必须借助 throws 和 throw 抛出。throw抛出一个异常。需要自己捕获,并进行相应处理。
语法:throws是声明方法中可能抛出的所有异常(在声明方法处表示该方法可能要抛出异常),通常不显示的捕获异常,由系统自动将所有捕获的异常抛给上级方法;
语法:public void doA(int a) throws Exception1,Exception3{......} 1、throws出现在方法函数头,声明函数可能抛出的所有异常(用在方法声明后面,表示异常由该方法的调用者处理);而throw出现在函数体,抛出一个异常实例,由方法体内的语句处理。
2、两者都是消极处理异常的方式(消极并不是说不好),只是异常不会由函数处理,而是由函数的上层调用处理。</p>
(抛出一个异常是为了,在有些时候,出现某些错误,原来在页面上出现相应的错误,而不是报一堆代码错误,空指针等)
一种写法:
package yiccl;
class MyException extends Exception {
private int id;
MyException(String Message, int id) {
super(Message);
this.id = id;
}
int getId() {
return id;
}
}
//在throw一个异常之后, 方法体将异常在方法头上将异常抛出了,在后面调用方法体的时候,必须捕获这个异常
//(try块里面,异常后面的语句不会执行,try块外面的语句都会执行)
public class pcyc
{
public void regist(int num) throws MyException{
if(num<0){
throw new MyException("人数为负数,不合理", 3);
}
//抛出异常就不执行下面的打印语句
System.out.println("登录人数"+num);
}
public static void main(String args[]) {
pcyc aa=new pcyc();
try {
aa.regist(-100);
System.out.println("aaa");
} catch (MyException e) {
//TODO Auto-generated catch block
e.printStackTrace();
System.out.println("bbb");
}
System.out.println("ccc");
}
}
第二种写法:
//自己定义一个异常的时候,通过throw new 一个异常,可以将异常捕获了,这样在其他方法调用的时候,就不用捕获异常了。
package yiccl;
class MyException extends Exception{
private int id;
MyException(String Message,int id)
{
super(Message);
this.id=id;
}
int getId()
{
return id;
}
}
public class testycer {
public void regist(int num) {
if(num<0){
try {
throw new MyException("人数为负数,不合理", 3);
} catch (MyException e) {
e.printStackTrace();
}
}
System.out.println("登录人数"+num);
}
public static void main(String args[]) {
testycer aa=new testycer();
aa.regist(-100);
}
}