【问题标题】:While constructing the default constructor can not handle exception : type Exception thrown by implicit super constructor构造默认构造函数时无法处理异常:隐式超级构造函数抛出的类型异常
【发布时间】:2011-10-10 00:07:04
【问题描述】:

代码工作正常,直到我尝试将代码变成可构造的类。当我尝试从中构造一个对象时,我得到了错误

“默认构造函数无法处理隐式超级构造函数抛出的异常类型IOException。必须定义显式构造函数”

这是必须向FileReaderBufferedReader 抛出异常的时候。

谢谢

编辑:

FileReader textFilethree = new FileReader (xFile);
BufferedReader bufferedTextthree = new BufferedReader (textFilethree) ;
String lineThree = bufferedTextthree.readLine();

xFile 是从构造中获得的。请注意,在此构造中会引发异常。

【问题讨论】:

    标签: java exception


    【解决方案1】:

    默认构造函数隐式调用超级构造函数,假设它抛出了一些你需要在子类的构造函数中处理的异常。详细答案贴代码

    class Base{
    
      public Base() throw SomeException{
        //some code
      }
    
    }
    
    class Child extends Base{
      public Child(){
       //here it implicitly invokes `Base()`, So handle it here
      }
    }
    

    【讨论】:

    • 你需要添加相关的构造器
    • 它只是将 FileReader 的参数作为构造函数的参数,并引发异常。
    • 所以你需要在子类的构造函数中捕获或抛出它
    • 是的,我确实扔了它,但是当我尝试构建时,我在 IDE 中收到了错误消息。
    • 再次,您需要在构建时处理它。它传播
    【解决方案2】:

    基类 super.constructor 被扩展类构造函数隐式调用:

    class Base
    {
      public Base () throws Exception
      {
        throw <>;
      }
    }
    
    class Derived extends Base
    {
      public Derived ()
      {
      }
    }
    

    现在,需要处理Derived() 内部的异常或将构造函数设为,

    public Derived() throws Exception
    {
    }
    

    无论您使用newDerived 的对象使用什么方法,都可以将它包含在try-catch 中,或者使该方法像上面一样抛出Exception。 [注意:这是伪代码]

    【讨论】:

    • 我正在考虑忘记 ide 错误,我运行了它,它很好。如果我这样做,我以后会遇到问题吗?
    【解决方案3】:

    只需将您对构造函数的调用包含在 Try-Catch 中即可。

    【讨论】:

      【解决方案4】:

      任何继承超类的子类,其默认构造函数处理一些异常,子类必须有一个实现异常的默认构造函数

      超级类{ public Super() 抛出异常 {}}

      class Sub 扩展 Super{public Sub()throws Exception{/}}

      【讨论】:

        【解决方案5】:

        如果你有这样的事情

        class example{
            public void fileReader(String path) throws Exception{
                 //some code that throws Exception
            }
         }
        

        确保在您尝试制作对象的方法上使用相同的 sintaxis

        class implementation{
             public void someMethod() throws Exception{
                  example object = new example();
                  example.filereader("C:\\....");
              }
          }
        

        在使用 apache poi 时发生在我身上

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-03
          • 2017-04-14
          相关资源
          最近更新 更多