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