对于我下面的代码,我已经明确声明了我将要提出的异常情况(使用throws),仍然我的代码显示错误,为什么呢?

时间:2015-08-09 05:24:25

标签: java nullpointerexception

import java.io.*;
import java.io.IOException;
public class NullPointerExceptionExample1 {
public static void main(String... args)throws NullPointerException {
    String s=new String("Hello");
    s=null;
    System.out.println(s.length());
}
}

我故意尝试引发NullPointerException,并且我已经指出了我将要使用的异常情况(抛出NullPointerException)。但是我的代码仍显示错误(NullPointerException)

3 个答案:

答案 0 :(得分:3)

将方法声明为throws NullPointerException这一事实意味着它可以抛出该异常。在这种特殊情况下它没有意义,因为NullPointerException是一个未经检查的异常(它是RuntimeException的子类,即使没有该throws子句也可以通过您的方法抛出) 。

无论如何,在throws子句中声明异常并不能防止它被抛出而且无法捕获它,所以我不明白为什么你期望NullPointerException不要被抛出当s.length为空时,NullPointerException总会抛出s

答案 1 :(得分:1)

(1)没有必要在NullPointerException子句中指定任何运行时异常(例如throws)。

(2)throws子句只是警告该方法可能抛出异常;它并没有神奇地使触发异常的错误消失。您尝试在空引用上调用.length(),因此您获得了异常;你期望发生什么呢?

答案 2 :(得分:1)

我认为你想要的是一个try / catch组合。您声明throws NullPointerException这一事实并不意味着不会发生任何异常您只是让任何调用对象知道可能发生此类错误并应该处理它。这是一个try / catch。

import java.io.*; 
import java.io.IOException;

public class NullPointerExceptionExample1 { 

    public static void main(String... args) {
        String s=new String("Hello");
        s=null;
        try{
            System.out.println(s.length());
        } catch (NullPointerException e){
            // handle error here
            System.out.println("Caught NullPointerException");
        }
    } 
}