繁体   English   中英

我应该将代码放在Java的哪里?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM