Java 从引发异常的方法中恢复
我对java相当陌生,尤其是一些编码实践。我遇到了这样一种情况:一个方法抛出一个Java 从引发异常的方法中恢复,java,exception,Java,Exception,我对java相当陌生,尤其是一些编码实践。我遇到了这样一种情况:一个方法抛出一个NullPointerException,调用方法捕获它 try { String test = Class.method(arg) } catch (Exception ex) { ... } public String method(arg){ String str; ... if(str == null) throw(exception) return str; } 现在类中的某个方
NullPointerException
,调用方法捕获它
try {
String test = Class.method(arg)
}
catch (Exception ex) {
...
}
public String method(arg){
String str;
...
if(str == null) throw(exception)
return str;
}
现在类中的某个方法。方法(arg)
抛出一个NullPointerException
,并在上面的捕获中捕获它(如上图所示)。相反,我想做如下事情:
if (test == null) { do something else }
在try块内部
处理这个问题的最佳方法是什么?我可以删除throw-inside方法并使其返回null吗?您应该在
method(arg)
中捕获异常,并在出现异常时返回null
示例程序:
public class Test1 {
public static void main(String[] args) {
try{
String test = method("1");
if(test==null){
//do something else
}
}catch(Exception e){
}
}
private static String method(String str) throws Exception{
if(str.equals("1")) return null;
else if(str.equals("2")) throw new Exception("My Exception");
else return str;
}
}
现在您可以将方法更改为类似的方式,这完全取决于您的需求:
private static String method(String str) throws Exception{
try{
if(str.equals("1")) return null;
else if(str.equals("2")) throw new Exception("My Exception");
else return str;
}catch(Exception e){
return null;
}
}
您应该在
方法(arg)
中捕获异常,并在出现异常时返回null
示例程序:
public class Test1 {
public static void main(String[] args) {
try{
String test = method("1");
if(test==null){
//do something else
}
}catch(Exception e){
}
}
private static String method(String str) throws Exception{
if(str.equals("1")) return null;
else if(str.equals("2")) throw new Exception("My Exception");
else return str;
}
}
现在您可以将方法更改为类似的方式,这完全取决于您的需求:
private static String method(String str) throws Exception{
try{
if(str.equals("1")) return null;
else if(str.equals("2")) throw new Exception("My Exception");
else return str;
}catch(Exception e){
return null;
}
}
您可以为
NullPointerException
指定catch子句,尤其是:
try {
String test = Class.method(arg)
}
catch (NullPointerException ex) {
// test == null
// do something
}
catch (Exception ex) {
// ?
}
但您可能不想在<代码> catch < /COD>子句中添加太多的逻辑/行为,所以只考虑将<<代码>如果尝试捕获< /代码>块:
try {
String test = Class.method(arg)
}
catch (NullPointerException ex) {
// At least log the exception; never swallow exceptions. NEVER.
System.out.println(ex);
}
catch (Exception ex) {
// ?
}
if(test != null) {
// do something
}
else {
// do something else
}
您可以为
NullPointerException
指定catch子句,尤其是:
try {
String test = Class.method(arg)
}
catch (NullPointerException ex) {
// test == null
// do something
}
catch (Exception ex) {
// ?
}
但您可能不想在<代码> catch < /COD>子句中添加太多的逻辑/行为,所以只考虑将<<代码>如果尝试捕获< /代码>块:
try {
String test = Class.method(arg)
}
catch (NullPointerException ex) {
// At least log the exception; never swallow exceptions. NEVER.
System.out.println(ex);
}
catch (Exception ex) {
// ?
}
if(test != null) {
// do something
}
else {
// do something else
}
期望出现空指针异常有一些不好的味道。难道不可能在
方法中添加一个空测试,并在不等待异常的情况下返回商定的结果吗
所以不是
public String method(String arg) {
try {
return arg.toString();
} catch (NullPointerException npe) {
return null;
}
}
你真的应该这么做
public String method(String arg) {
if (arg == null) {
return null;
}
return arg.toString();
}
一个重要的替代方法是抛出一个NPE以外的异常来提示问题,因为返回null
通常是个坏主意:
public String method(String arg) {
if (arg == null) {
throw new IllegalArgumentException("Passing null is illegal");
}
return arg.toString();
}
期望出现空指针异常有一些不好的味道。难道不可能在方法中添加一个空测试,并在不等待异常的情况下返回商定的结果吗
所以不是
public String method(String arg) {
try {
return arg.toString();
} catch (NullPointerException npe) {
return null;
}
}
你真的应该这么做
public String method(String arg) {
if (arg == null) {
return null;
}
return arg.toString();
}
一个重要的替代方法是抛出一个NPE以外的异常来提示问题,因为返回null
通常是个坏主意:
public String method(String arg) {
if (arg == null) {
throw new IllegalArgumentException("Passing null is illegal");
}
return arg.toString();
}
测试是否为空,或者是否有其他原因导致异常?是。其中一个方法中存在对null的测试,因此它会直接抛出异常。@SairamSankaran该方法不应该这样做是因为测试null,还是其他原因导致了异常?是的。其中一个方法中有一个null测试,因此它直接抛出异常。@SairamSankaran该方法不应该这样做是的。异常被捕获并发送到日志。但我想采取行动。因此,与内部方法引发异常不同,我想做一些其他事情,如果方法(arg)返回null,如果方法()返回null,您可以使用if语句来做其他事情。我不明白这里的问题。该方法直接抛出异常,而不是返回null。但是我想在方法之外处理null。这正是我要寻找的。在我的方法中,我已经明确了这一点[如果(str.equals(“2”))抛出新的异常(“我的异常”);]。我是否可以将其删除并替换为[if(str.equals(“1”))return null;]。我不确定在方法中抛出异常有什么好处,它只是一个示例,不是真实的编程场景。我显式地抛出异常以显示使用它的不同方式。你可以根据你的要求做任何事情。异常被捕获并发送到日志。但我想采取行动。因此,与内部方法引发异常不同,我想做一些其他事情,如果方法(arg)返回null,如果方法()返回null,您可以使用if语句来做其他事情。我不明白这里的问题。该方法直接抛出异常,而不是返回null。但是我想在方法之外处理null。这正是我要寻找的。在我的方法中,我已经明确了这一点[如果(str.equals(“2”))抛出新的异常(“我的异常”);]。我是否可以将其删除并替换为[if(str.equals(“1”))return null;]。我不确定在方法中抛出异常有什么好处,它只是一个示例,不是真实的编程场景。我显式地抛出异常以显示使用它的不同方式。根据您的要求,您可以使用此功能执行任何操作。