JAVA。我收到一个'未报告的异常'编译器错误

时间:2017-06-12 11:12:20

标签: java exception checked-exceptions catch-exception

我正在尝试编译此代码,但它一直有错误,

errThrower.java:37: error: unreported exception Exception; must be caught or declared to be thrown
throw new Exception();  

callmethodErr()抛出了这个异常,我认为它已被主要捕获,但我无法弄清楚发生了什么。

谢谢大家。

import java.util.IllegalFormatConversionException;

public class errThrower 
{
  public static void main(String[] args)
  {
    try
    {
      callmethodErr();
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }

  public static void methodErr() throws Exception
  {
    System.out.println("error thrown from methodErr");  
  }

  public static void callmethodErr()
  {
    try
    {
      methodErr();
    }
    catch (Exception e)
    {
      System.out.println("error thrown from callMethodErr");
      throw new Exception();      
    }
  } 
}

3 个答案:

答案 0 :(得分:2)

此方法:

public static void callmethodErr()
{

包含以下行:

throw new Exception();          

但是并没有声明throws Exception因此:

public static void callmethodErr() throws Exception
{

答案 1 :(得分:1)

Exception是一个经过检查的异常,这意味着您必须在抛出它的方法中捕获它,或声明您的方法可能抛出此异常。您可以通过更改方法callmethodErr的签名来执行此操作:

public static void callmethodErr() throws Exception
{
    // ...
}

有关其工作原理的更多详细说明,请参阅Oracle Java教程中的The Catch or Specify Requirement

答案 2 :(得分:1)

正如编译器所说,方法callmethodErr可以抛出异常。因此,您必须在方法callmethodErr中捕获该异常,或者声明方法callmethodErr以抛出异常。是否在main方法中捕获它是不相关的,因为你也可以从另一个方法(不是main)调用方法callmethodErr而忘记捕获它,编译器必须阻止它。

声明像public static void callmethodErr() throws Exception

这样的方法