一、throws抛出异常
throws关键字主要用于方法声明上,自己不做处理,指的是当前方法之中异常后交给被调用处处理;
用在方法声明后面,跟的是异常类名
可以跟多个异常类名,用逗号隔开
表示抛出异常,由该方法的调用者来处理
throws表示出现异常的一种可能性,并不一定会发生这些异常
实例
public class ThrowsTest2{
//因为test();会抛出IOException,main方法是调用者
//则需要使用try...catch进行捕获或者抛给JVM
//抛出时要遵循父类声明抛出“大于”子类声明抛出的原则
public static void main(String[] args) throws Exception {
test();
}
public static void test() throws IOException() {
//因为FileInputStream构造器会抛出IOException
//所以需要使用try...catch块进行处理或使用throws抛给调用者
FileInputStream fis = new FileInputStream("a.txt");
}
}
二.使用throw抛出异常
程序员也可以通过throw语句手动显式的抛出一个异常。throw语句的后面必须是一个异常对象。
throw 语句必须写在函数中,执行throw 语句的地方就是一个异常抛出点,它和由JRE自动形成的异常抛出点没有任何差别。
它可以单独使用,也可以结合catch块捕获使用。如果抛出的异常对象时Checked异常则处于try块里被catch捕获或者放在一个带throws的方法里;如果抛出的是RuntimeException则既可以显示使用try…catch捕获也可以不理会它
用在方法体内,跟的是异常对象名
只能抛出一个异常对象名
表示抛出异常,由方法体内的语句处理
throw则是抛出了异常,执行throw则一定抛出了某种异常
实例
throw 就是自己处理一个异常,有两种方式要么是自己捕获异常try…catch代码块,要么是抛出一个异常(throws 异常)
public class ThrowTest {
public static void main(String[] args) {
try{
throwChecked(3);
}catch(Exception e) {
System.out.println(e.getMessage());
}
throwRuntime(-3);
}
//该方法内抛出一个Exception异常对象,必须捕获或抛给调用者
public static void throwChecked(int a) throws Exception {
if(a < 0) {
throw new Exception("a的值应大于0,不符合要求")
}
}
//该方法内抛出一个RuntimeException对象,可以不理会直接交给JVM处理
public static void throwRuntime(int a) {
if(a < 0) {
throw new RuntimeException("a的值应大于0,不符合要求")
}
}
}
三、自定义异常
当已有的异常类型不能满足你的需求时,这时你就需要自己定义一个异常处理类,自定义的异常处理的类需要继承或者实现已有的异常类,直接上代码,自定义的异常类
public class MyException extends Exception{
private String message;
public MyException(String message) {
super(message);
this.message= message;
}
}
测试自定义的类
//自己捕获
public class TestMyException {
public static void main(String[] args){
try {
throw new MyException("哼哼的博客");
} catch (MyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//抛出去给调用者处理
public class TestMyException {
public static void main(String[] args) throws MyException{
throw new MyException("哼哼的博客");
}
}
//这两种捕获的方法都可以实现异常的处理
输出结果
cn.bzu.look.dao.MyException: 哼哼的博客
at cn.bzu.look.dao.TestMyException.main(TestMyException.java:6)