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