Java 捕获空字符串。使用哪种例外情况?

Java 捕获空字符串。使用哪种例外情况?,java,swing,exception,Java,Swing,Exception,正如标题所示,我试图抓住一个空字符串。我有一个类(我试图创建的对象的类),当字符串为null或空时抛出异常(请使用str.isEmpty检查)。 当我尝试在另一个类中使用空字符串创建对象时,它会按预期工作并引发异常。但是,我希望此类捕获该异常并通知用户。但它似乎永远也捕捉不到异常,即使我尝试编写Catch(exceptionexc)。 现在我知道null或空字符串并不违法。但是我的意图是对象类应该这样做。相反,似乎捕手根本不在乎。我开始认为我必须创建自己的某种异常类。。。还是我遗漏了什么?以下是

正如标题所示,我试图抓住一个空字符串。我有一个类(我试图创建的对象的类),当字符串为null或空时抛出异常(请使用str.isEmpty检查)。 当我尝试在另一个类中使用空字符串创建对象时,它会按预期工作并引发异常。但是,我希望此类捕获该异常并通知用户。但它似乎永远也捕捉不到异常,即使我尝试编写Catch(exceptionexc)。 现在我知道null或空字符串并不违法。但是我的意图是对象类应该这样做。相反,似乎捕手根本不在乎。我开始认为我必须创建自己的某种异常类。。。还是我遗漏了什么?以下是守则的相关部分:

对象类构造函数:

    public Valueables(String name){
    //name.trim().length() == 0
    if(name == null || name.isEmpty()){
        try {
            throw new Exception("Subclasses of Valueables cannot take in an empty String or null value for the \"name\" constructor");
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(2);
        }
    }
    else
        this.name = name;
}
另一个类(新的韦小宝对象是Valueables的一个子类。具有上述构造函数代码的类):


尝试将其捕获为泛型异常,替换NumberFormatException和NullpointerException

您也可以在Java中执行此操作

try {
    //Some Code here
} catch (NumberFormatException | NullPointerException ex) {
    //Handle NumberFormat and NullPointer exceptions here    
} catch (Exception ex) {
    //Handle generic exception here
}

首先对有价值的对象抛出RuntimeException:

public Valueables(String name){
    //name.trim().length() == 0
    if(name == null || name.isEmpty()){
        throw new RuntimeException("Subclasses of Valueables cannot take in an empty String or null value for the \"name\" constructor");

    }
    else
        this.name = name;
}
不要捕捉异常

其次,在另一个类上捕获RuntimeException并显示mesage:

...}catch(RuntimeException exc) {
                        JOptionPane.showMessageDialog(exc.getMessage());
                    }

希望对你有帮助

已经对空字符串提出了一个问题,空字符串仍然不是null,因此如果您想捕获它,它必须抛出“IllegalArgumentException”。

如果它是非法参数,为什么不
IllegalArgumentException
?您知道打印堆栈跟踪时不必抛出并捕获异常吗<代码>新异常(“消息”).printStackTrace()也可以。您在哪里调用新的值(名称)?您的try-catch毫无意义:您抛出一个异常并立即捕获它并退出系统。另外,我们也不知道韦小宝的代码是什么。你应该检查
name.trim().isEmpty()
.trim()
删除前导和尾随空格)而不是
name.isEmpty()
,因为
.isEmpty()
是as
当且仅当length()为0时返回true。
。因此,如果名称仅包含空格,则检查未修剪的名称可能会允许其通过。捕获
异常
是一个坏主意,除非您不幸遇到抛出
异常
的代码,除非绝对必要,否则应避免编写该代码,因为它是返回
对象
的异常等价物(它基本上不提供类型信息)。如果需要特定处理的新异常(例如,
InterruptedException
)被添加到方法签名中,捕获
Exception
是一种很好的方法,可以在以后隐藏问题。我提到我尝试过这个方法。它不起作用。还有,我想象着用异常捕捉所有类型的异常是丑陋的?因为我认为异常是其他异常的超类,比如NumberFormatException?是的!现在我明白了,我在对象类中捕获了异常,然后才有机会在frame类facepalm中捕获它。非常感谢你!
...}catch(RuntimeException exc) {
                        JOptionPane.showMessageDialog(exc.getMessage());
                    }