我们在运行一段代码,做一个项目的时候遇到BUG、异常是再正常不过的事情。说到异常,异常种类是有很多种的,Throwable就是异常的根类。
常见的异常就有在Throwable下的子类 错误 - Error 和 异常 - Exception
Exception异常又分为一般异常和运行时异常 RuntimeException(运行时异常不需要代码显示捕获)
既然说了异常,那么重点就来了,常用的两个抛出异常的方法throw和throws,单独从外表看一个“s”的区别但用法却大了很多。。。。。
throw:
- 表示方法内抛出某种异常对象且只能是一个
- 用于程序员自行产生并抛出异常
- 位于方法体内部可以作为单独语句使用
- 如果异常对象是非RuntimeException 则需要在方法申明时加上该异常的抛出,也就是加上throws 语句或者在try catch中处理异常,否则编译器会报错
- 执行到 throw 语句则后面的语句块不再执行
代码示例:
package com.icss.interview;
import java.io.IOException;
/**
* 这是测试throw和throws的区别的
* @author HYF
*/
public class TestThrowThrows {
public static void main(String[] args) {
testThrows();
Integer i = null;
testThrow(i);
String filePath = null;
/**在 try catch 中处理异常**/
try{
testThrow(filePath);
} catch (IOException e){
e.printStackTrace();
}
}
/**
* 测试 throw 关键字 抛出运行时异常
* @param i
*/
public static void testThrow(Integer i ) {
if (i == null) {
/**运行时异常不需要在方法上申明**/
throw new NullPointerException();
}
}
/**
* 测试 throw 关键字抛出非运行时异常,需要方法体添加 throws 异常抛出申明
*/
public static void testThrow(String filePath) throws IOException {
if (filePath == null) {
/**非运行异常时需要在方法体上添加 throws 申明抛出异常**/
throw new IOException();
}
}
}
throws:
- 方法上定义上使用throws表示这个方法可能抛出某个异常(相比较于throw可能会有多个异常对象)------>当别人调用你的方法时看到有throws提醒别人可能存在异常需要注意,可能需要做出相应处理
- 还可以是用于声明该方法抛出异常
- 和throw的区别必须跟在方法参数列表后面,不能够单独使用
- 第一点提到的警告作用,所以在处理异常的时候需要由调用者进行异常处理
代码示例:
package com.icss.interview;
import java.io.IOException;
/**
* 这是测试thow和thows的区别的
* @author HYF
*/
public class TestThrowThrows {
public static void main(String[] args) {
testThrows();
Integer i = null;
testThrow(i);
String filePath = null;
try{
testThrow(filePath);
} catch (IOException e){
e.printStackTrace();
}
}
/**
* 测试 throws 关键字
* @thows NullPointerException
*/
public static void testThrows() throws NullPointerException {
Integer i = null;
System.out.println(i + 1);
}
最后的运行结果: