java基础之异常处理(throws和throw 的区别)

一、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)

Java基础之异常处理(try…catch…finally ,throw,throws)

你可能感兴趣的:(javase)