Java⾃带⽅法强制使⽤trycatch的原因
⼀、场景简述
今天和⼀位同学聊天的时候,同学问我“为啥Thread.sleep(1000)要进⾏try/catch异常捕获”,在这⾥我想可能会有很多同学也⼀下⼦想不通,笔者今天就揭秘,为什么好多jdk封装的⽅法会需要异常捕获
⼆、场景实现
下⾯代码就是Thread.sleep异常捕获的场景,如果不进⾏try/catch就会报错
@Override
public void run(){
try {
for (int i = 0;i < 10;i++){
Thread.sleep(1000);
}
try catch的使用方法
}catch (InterruptedException e){
e.printStackTrace();
}
}
三、解决⽅案
既然想知道为什么该⽅法需要异常捕获,很简单,源码⾥有你需要的⼀切!
以下是Java源码中sleep的两种静态⽅法,可以很明显发现,源码中该⽅法使⽤了throws抛出异常,所以你必须对它进⾏异常捕获,也就是说在往常代码中,出现必须要你异常捕获的⽅法都是这种情况,内部抛出了异常,⾄于为什么要抛出异常,是每个⽅法的作⽤决定的
//第⼀种,抛出异常InterruptedException
public static native void sleep(long millis) throws InterruptedException;
//第⼆种,抛出异常InterruptedException
public static void sleep(long millis, int nanos)
throws InterruptedException {
if (millis < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException(
"nanosecond timeout value out of range");
}
if (nanos >= 500000 || (nanos != 0 && millis == 0)) {
millis++;
}
sleep(millis);
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论