尝试在静态方法中使用自定义异常时出错
Error when trying to use a custom exception in a static method
我有一个 java class 叫 Exercise08.java。在这个 class 中,我制作了扩展 NumberFormatException
.
的内部 class HexFormatException
public class HexFormatException extends NumberFormatException {
public HexFormatException() {
super();
}
}
我还有静态方法 hexToDecimal(String)
如果字符串不是十六进制,它会抛出 HexFormatException
错误。
/** Converts hexadecimal to decimal.
@param hex The hexadecimal
@return The decimal value of hex
@throws HexFormatException if hex is not a hexadecimal
*/
public static int hexToDecimal(String hex) throws HexFormatException {
// Check if hex is a hexadecimal. Throw Exception if not.
boolean patternMatch = Pattern.matches("[0-9A-F]+", hex);
if (!patternMatch)
throw new HexFormatException();
// Convert hex to a decimal
int decimalValue = 0;
for (int i = 0; i < hex.length(); i++) {
char hexChar = hex.charAt(i);
decimalValue = decimalValue * 16 + hexCharToDecimal(hexChar);
}
// Return the decimal
return decimalValue;
}
相反,我收到此错误消息:
我真的很困惑如何解决这个问题。如果我抛出 NumberFormatException
,一切正常,但为什么它对我的自定义异常不起作用?
要在静态方法中使用内部 class,它也必须是静态的。
public static class HexFormatException extends NumberFormatException {
public HexFormatException() {
super();
}
}
您已将 HexFormatException 设为内部 class,这意味着它属于封闭实例。在静态方法中,没有默认的封闭实例,因此您会收到此错误。
一个简单的解决方法是用 static
:
声明 class
public static class HexFormatException ...
我有一个 java class 叫 Exercise08.java。在这个 class 中,我制作了扩展 NumberFormatException
.
HexFormatException
public class HexFormatException extends NumberFormatException {
public HexFormatException() {
super();
}
}
我还有静态方法 hexToDecimal(String)
如果字符串不是十六进制,它会抛出 HexFormatException
错误。
/** Converts hexadecimal to decimal.
@param hex The hexadecimal
@return The decimal value of hex
@throws HexFormatException if hex is not a hexadecimal
*/
public static int hexToDecimal(String hex) throws HexFormatException {
// Check if hex is a hexadecimal. Throw Exception if not.
boolean patternMatch = Pattern.matches("[0-9A-F]+", hex);
if (!patternMatch)
throw new HexFormatException();
// Convert hex to a decimal
int decimalValue = 0;
for (int i = 0; i < hex.length(); i++) {
char hexChar = hex.charAt(i);
decimalValue = decimalValue * 16 + hexCharToDecimal(hexChar);
}
// Return the decimal
return decimalValue;
}
相反,我收到此错误消息:
我真的很困惑如何解决这个问题。如果我抛出 NumberFormatException
,一切正常,但为什么它对我的自定义异常不起作用?
要在静态方法中使用内部 class,它也必须是静态的。
public static class HexFormatException extends NumberFormatException {
public HexFormatException() {
super();
}
}
您已将 HexFormatException 设为内部 class,这意味着它属于封闭实例。在静态方法中,没有默认的封闭实例,因此您会收到此错误。
一个简单的解决方法是用 static
:
public static class HexFormatException ...