尝试在静态方法中使用自定义异常时出错

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 ...