如何在方法外使用对象的构造函数实例化对象 java
How to instantiate an object using it's constructor outside a method java
我想在方法之外用它的构造函数实例化一个对象。示例:
public class Toplevel {
Configuration config = new Configuration("testconfig.properties");
public void method1() {
config.getValue();
...etc
}
}
如果我现在这样做...我会收到此错误...
Default constructor cannot handle exception type IOException thrown by implicit super constructor. Must define an explicit constructor
我想做这样的事情,这样我就可以在我的 class 中的任何地方调用配置,现在我一直不得不实例化配置对象...必须有一种方法可以做到这一点。 ..任何帮助将不胜感激,提前致谢。
编辑:
配置class:
public class Configuration {
private String mainSchemaFile;
public Configuration() {
}
public Configuration( String configPath ) throws IOException {
Properties prop = new Properties();
prop.load( new FileInputStream( configPath ));
this.mainSchemaFile= prop.getProperty("MAINSCHEMA_FILE");
}
您的 Configuration
构造函数被声明为抛出 IOException
。任何使用此构造函数实例化 Configuration
的代码都必须捕获它。如果您使用变量初始值设定项,那么您将无法捕获它,因为您无法提供 catch
块;您不能在此处放置任何块,只能放置一个表达式。两者都没有声明 throws
子句的方法。
您的备选方案:
在 Toplevel
构造函数中实例化 Configuration
。您可以 catch
构造函数主体中的异常,或者您可以声明该构造函数 throws
异常。
public class Toplevel {
Configuration config;
public Toplevel() {
try {
config = new Configuration("testconfig.properties");
} catch (IOException e) { // handle here }
}
// ...
在TopLevel
class中的实例初始化器中实例化Configuration
,在那里你可以catch
异常并处理它。
public class Toplevel {
Configuration config;
{
try {
config = new Configuration("testconfig.properties");
} catch (IOException e) { // handle here }
}
// ...
在 Configuration
构造函数中捕获并处理异常,因此调用代码不必捕获异常。这不是首选,因为您可能实例化了一个无效的 Configuration
对象。调用代码仍然需要确定它是否有效。
public class Configuration {
// Your instance variables
private boolean isValid;
public Configuration( String configPath ) {
try {
// Your code that might throw an IOE
isValid = true;
} catch (IOException e) {
isValid = false;
}
}
当你创建一个新的 Toplevel 对象时,你还没有为它声明一个特定的构造函数,并且 Toplevel 的属性被实例化,就像你的代码用 Configuration config = new Configuration("testconfig.properties");
描述的那样
所以你没有处理Configuration构造函数的IoException!
更好的方法是像这样声明 Toplevel 的特定构造函数:
public Toplevel(){
try{
this.config = new Configuration("testconfig.properties");
} catch (IOException e) {
// handle Exception
}
}
我想在方法之外用它的构造函数实例化一个对象。示例:
public class Toplevel {
Configuration config = new Configuration("testconfig.properties");
public void method1() {
config.getValue();
...etc
}
}
如果我现在这样做...我会收到此错误...
Default constructor cannot handle exception type IOException thrown by implicit super constructor. Must define an explicit constructor
我想做这样的事情,这样我就可以在我的 class 中的任何地方调用配置,现在我一直不得不实例化配置对象...必须有一种方法可以做到这一点。 ..任何帮助将不胜感激,提前致谢。
编辑:
配置class:
public class Configuration {
private String mainSchemaFile;
public Configuration() {
}
public Configuration( String configPath ) throws IOException {
Properties prop = new Properties();
prop.load( new FileInputStream( configPath ));
this.mainSchemaFile= prop.getProperty("MAINSCHEMA_FILE");
}
您的 Configuration
构造函数被声明为抛出 IOException
。任何使用此构造函数实例化 Configuration
的代码都必须捕获它。如果您使用变量初始值设定项,那么您将无法捕获它,因为您无法提供 catch
块;您不能在此处放置任何块,只能放置一个表达式。两者都没有声明 throws
子句的方法。
您的备选方案:
在
Toplevel
构造函数中实例化Configuration
。您可以catch
构造函数主体中的异常,或者您可以声明该构造函数throws
异常。public class Toplevel { Configuration config; public Toplevel() { try { config = new Configuration("testconfig.properties"); } catch (IOException e) { // handle here } } // ...
在
TopLevel
class中的实例初始化器中实例化Configuration
,在那里你可以catch
异常并处理它。public class Toplevel { Configuration config; { try { config = new Configuration("testconfig.properties"); } catch (IOException e) { // handle here } } // ...
在
Configuration
构造函数中捕获并处理异常,因此调用代码不必捕获异常。这不是首选,因为您可能实例化了一个无效的Configuration
对象。调用代码仍然需要确定它是否有效。public class Configuration { // Your instance variables private boolean isValid; public Configuration( String configPath ) { try { // Your code that might throw an IOE isValid = true; } catch (IOException e) { isValid = false; } }
当你创建一个新的 Toplevel 对象时,你还没有为它声明一个特定的构造函数,并且 Toplevel 的属性被实例化,就像你的代码用 Configuration config = new Configuration("testconfig.properties");
所以你没有处理Configuration构造函数的IoException! 更好的方法是像这样声明 Toplevel 的特定构造函数:
public Toplevel(){
try{
this.config = new Configuration("testconfig.properties");
} catch (IOException e) {
// handle Exception
}
}