[英]Where should I put my code in java?
我有一些很费时的代码,您可以将其视为从磁盘加载数据(但不仅限于此)。 但是我在初始化中只需要这段代码一次,但是完成后,我可以直接和快速地使用与之相关的一些方法。
现在我不知道该把这段代码放在哪里,这是我的想法:我将它放在A类的构造函数中,然后放在B类中,该类需要多次调用某种方法,所以我在B的构造函数中创建A的新实例,这是非常理想的,因为每次我需要A的方法时,我都可以直接访问它,并且A的构造函数仅被调用一次。
但这是问题所在,我还有其他一些类C,它们生成许多B实例(新B()),然后每次C生成B的新实例时,都会调用A的构造函数,这又非常耗时,如何组织代码来避免这种情况?
请参阅代码以进行澄清。
class A{
public A(){
some time-consuming code;
}
public void methodInA(){
some method in A;
}
}
class B{
public B(){
A a = new A();
for (i=0; i<10000;i++)
methodInB();
}
public void methodInB(){
methodInA();
}
}
//so far, everything is perfect, but I have another class C
class C{
public C(){
some code;
}
public void methodInC(){
for (i = 0; i<10000; i++)
new B();
}
}
方法1:将A类中的方法设为静态,并在静态块中进行初始化。
请参阅此SO answer
。
class A {
// if any variable then make them static
static {
// some time-consuming code;
}
public static void methodInA() {
// some method in A;
}
}
class B {
public B() {
for (int i = 0; i < 10000; i++)
methodInB();
}
public void methodInB() {
A.methodInA(); // directly call static method
}
}
方法2:将A类设为singleton
。 但这在@BalusC的SO answer
not recommended
这样做。
因此,您已经确定了将“耗时的代码碎片”放入类A的构造函数中的问题。如果经常调用耗时的构造函数,那么如果生成许多类a的Object,则将有一个整体耗时的程序。 以您的情况为例
mehodInC(){
//some code
}
C类将创建10.000个新的B对象,并且由于每个B对象都会在构造函数中自动创建一个A对象,因此您最终将调用该耗时的代码片段10.000次。
现在这显然不是最佳选择,我们如何解决呢? 如果我是你,我会将代码片段移到方法中,因为它可以让您更好地控制何时调用它。 (请为进一步的参数调用该方法methTimeConsuming())它还分隔了程序的不同功能。 这有助于最终代码的整体可读性。
因此,即使您创建许多对象,也只调用一次耗时的代码一次的方法是:
A myObj = new A();
myObj.methTimeConsuming();
for(int x = 0; x < 9999; x++){ //9999 because you already called it once outside of for-loop
myObj = newA();
}
显然这是一个非常基本的代码片段,但是可以从那里扩展想法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.