我有一个类“A”,它读取XML文件并进行一些处理。我在构造函数中添加了一个方法“load”,但我想知道如果XML文件大小很大并且需要时间加载会发生什么。
class A
{
public String fileName;
A(String fileName)
{
this.fileName = fileName;
load();
}
private load()
{
//here i load some xml file by given file name;
}
public searchByTag(String sometag)
{
//some search
}
public extractData()
{
//extract some data
}
}
例如,如果我们有以下情况:
A a = new A("somefile");
a.searchByTag("tag");
a.extractData();
对象“a”是在加载文件后创建的,对吧?
答案 0 :(得分:10)
是的,执行该段代码的线程将在返回A实例之前通过所有负载。
从技术上讲,对象“a”是在加载之前创建的(内部加载可以安全地引用它),但只有在构造函数返回时它才被赋值给变量“a”,这意味着当它也完成执行时load()方法。
答案 1 :(得分:3)
由于从构造函数调用load()
,实例构造将花费解析XML文件所需的时间。构造函数仅在完成时退出,即对象准备就绪。在您的情况下,仅在解析XML时。
答案 2 :(得分:1)
程序的控制流程在所有代码都被执行之前不会返回到constructur调用,除非发生错误,在这种情况下会抛出异常。
如果没有发生错误,则会在加载文件后创建对象,如您所述。
答案 3 :(得分:-1)
只要您调用了构造函数,就会创建该对象,但除非返回了load方法,否则它不会返回给您。
但问题是基本设计不对。您不应该从构造函数中调用load方法。让构造函数只调用该对象,然后在其上调用load方法来读取xml文件。您需要在类中具有过载的读取方法,如下所示:
private load()
{
//here i load some xml file by given file name;
}
//for loading from default location
private load(String filePath)
{
//here i load some xml file by given file name;
}
private load(File file)
{
//here i load some xml file by given file name;
}
你明白了!然后你的调用程序可以灵活地针对不同情况调用load方法。
首先获取文件大小,然后使用相应的方法,您还应该有两到三种不同的方法。
Have a look at this thread http://stackoverflow.com/questions/116574/java-get-file-size-efficiently to get a better idea about an efficient way to deduce file size.