2 sinat 33415638 sinat_33415638 于 2016.02.01 10:22 提问

缺省构造函数不能处理隐式超构造函数抛出的异常类型 IOException。必须定义显式构造函数

int lastnum = getNum(source.getProperty("fileName"));
public static int getNum(String Filename) throws IOException {

    InputStream myxls;
    myxls = new FileInputStream(Filename);
    sr = new XSSFWorkbook(myxls);
    XSSFSheet sheet = sr.getSheetAt(0);// 第一个工作表
    return sheet.getLastRowNum();// 获取第一个工作表的行数
}

第一行报错:缺省构造函数不能处理隐式超构造函数抛出的异常类型 IOException。必须定义显式构造函数

5个回答

fk002008
fk002008   2016.02.01 12:17
已采纳
    public FileInputStream(String name) throws FileNotFoundException {
        this(name != null ? new File(name) : null);
    }

第一行它报的是FileNotFoundException
这个没有错误啊
你的流打开了是不是没有关闭阿

sinat_33415638
sinat_33415638 关了也没用
2 年多之前 回复
sinat_33415638
sinat_33415638 回复sinat_33415638: 关了也没用
2 年多之前 回复
sinat_33415638
sinat_33415638 我这个编译就不通过
2 年多之前 回复
fk002008
fk002008   2016.02.01 13:48

再次确认下:
你这个方法应该没有问题
那么可能是 你定义的这个方法被谁调用了

getNum这个方法抛出了IOException

调用的地方是不是不能有这个IOException阿
我怀疑你在哪个构造函数中调用这个方法了

sinat_33415638
sinat_33415638 没有 只有lastNum用这个方法了
2 年多之前 回复
fk002008
fk002008   2016.02.01 14:55

那你这个 lastNum又在哪里用了。
缺省的构造函数我觉得是你自己写的这个类的

察看一下调用链,自己的构造器里面有没有用到这个调用链

sinat_33415638
sinat_33415638 解决了 我这么写就没事了
2 年多之前 回复
sinat_33415638
sinat_33415638 解决了 我这么写就没事了
2 年多之前 回复
sinat_33415638
sinat_33415638 解决了 我这么写就没事了
2 年多之前 回复
sinat_33415638
sinat_33415638 解决了 我这么写就没事了
2 年多之前 回复
sinat_33415638
sinat_33415638   2016.02.01 14:59

解决了 我这么写就没事了
int lastnum = getNum(source.getProperty("fileName"));
public static int getNum(String Filename) {
try {
InputStream myxls;
myxls = new FileInputStream(Filename);
sr = new XSSFWorkbook(myxls);
XSSFSheet sheet = sr.getSheetAt(0);// 第一个工作表
return sheet.getLastRowNum();// 获取第一个工作表的行数
} catch (IOException e) {
// TODO: handle exception
return 0;
}
}

fk002008
fk002008   2016.02.01 15:04

首先恭喜下
从解决方法看应该是跑出的异常导致的.

调用这个int lastnum = getNum(source.getProperty("fileName"));

的函数可能对外的声名是没有异常的

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于隐式提供缺省构造函数的一个误区
很多C++的教材中都讲:“如果一个定义一个类,并且不提供任何构造函数的话,那么编译器将会隐式的提供一个缺省构造函数”。以下节录ISO C++ 99的文档的原文:The default constructor (12.1), copy constructor and copy assignment operator (12.8), and destructor (12.4)are special m
C++中构造函数的显式调用和隐式调用
class Test1 { public: Test1(int n) { num=n; }//普通构造函数 private: int num; }; class Test2 { public: explicit Test2(int n) { num=n; }//explicit(显式)构造函数 private:...
java构造方法,以及super、this关键字、隐式调用、显式调用
首先需要明白的是,当创建java对象时,程序总是依次调用每个父类的非静态初始化块、父类构造器(总是从Object开始)执行初始化,最后才调用该类的非静态初始化块、构造器执行初始化。 如果你不明白初始化的本质,请看这篇博文http://blog.csdn.net/xuejingfu1/article/details/51480687。 为了说明问题,这里贴出一个小例子: class Paren
基类和派生类的构造函数,隐式调用与显式调用
1. 顺序        当创建一个派生类的对象时,系统首先自动创建一个基类对象,也就是说,在调用派生类构造函数创建派生类对象之前,系统首先调用基类的构造函数创建基类对象。当派生类对象生命期结束时,首先调用派生类的析构函数,然后调用基类的析构函数。简而言之,就是说,构造函数:基类->派生类。析构函数:派生类->基类。 这个我们完全可以通过一个小程序来说明:         //通过输出就
关于父类没有缺省的构造函数时,子类如何建立构造函数
关于父类没有缺省的构造函数时,子类如何建立构造函数 我们都知道,在类定义了带参数的构造函数后,便不再提供默认构造函数,但是子类的构造函数需要父类的缺省构造函数才能定义,否则编译时将会出错,这时有两种解决方法,一种是利用构造函数重载,重载一个缺省的构造函数,另一种方法如下; 例: class Tree //构造一个树类作为父类 { private: int height; int ci
显式调用构造函数
#include "stdafx.h" #include using namespace std; int i=1; /*数组构造*/ class testv1 { public: int v1; testv1() {v1=i++;} }; int _tmain(int argc, _TCHAR* argv[]) { #define ARRAY_SIZE 10 //testv1 test
转换构造函数和隐式构造函数
// converthiddenconstructor.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include class String { public: // brief : 构造函数 // param : nil String() {
java继承之(隐式或显式)调用父类的构造函数
java继承中对构造函数是不继承的,只是调用(隐式或显式)。 以下是例子:  public class FatherClass {  public FatherClass() {        System.out.println(100);  }  public FatherClass(int age) {       System.out.println(age);  }
隐式超级构造函数Fu()未定义。
该错误显示:隐式超级构造函数Fu()未定义。 必须显式调用另一个构造函数。也就是当java类中没有构造函数时,java会默认有一个隐藏的没有带参数的构造函数,这时是不需要定义构造函数的,但是当java类中定义了其它带参数的构造函数时,必须要定义一个未带参数的构造函数。如,改正错误在Zi类中加上 super(x);...
Explicit Constructors(显式构造函数)
 按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p ); // 用C风格的字符串p作为初始化值//…}String s1 = “hello”; //OK 隐式转换,等价于String s1 = String(“hello”);