2016-01-26 166 views
1

我在我的小程序中只有一個主類,它使用了很多路徑。 因爲程序運行時它們不會改變,所以我認爲我可以在聲明中加入一個「靜態」,但不能確定最終結果。此外,我不確定哪裏是宣佈我的路徑的最佳地點,它是在主要班級還是理所當然? 下面是我的代碼示例:Java中的靜態字符串路徑

package classtest; 

public class ClassTest { 
    // Should I put the path here ? 
    public static void main(String[] args) { 
     String dirPath = "C:/Users/test1/"; 
     String pathOut = "C:/Users/stats.csv"; 
      // or here ? 

    } 
} 

感謝您的幫助。

+0

當然,你可以聲明爲final,因此它們不能被改變之後,它看起來像你想要什麼:「因爲它們不會在程序正在運行時更改「 – Berger

回答

0

你可以做這樣的重構:

public class ClassTest { 
    // Specify a base path for all paths to be used 
    public static final String BASE_PATH = "C:/Users"; 
    // 1. If these paths will be used in several methods, declare them here 
    public static final String dirPath = BASE_PATH + "/test1/"; 
    public static final String pathOut = BASE_PATH + "/stats.csv"; 

    public static void main(String[] args) { 
     // 2. If those paths will be used in the main method only, declare them here 
     final String dirPath = BASE_PATH + "/test1/"; 
     final String pathOut = BASE_PATH + "/stats.csv"; 
    } 
} 

靜態類的成員應該被宣佈任何類方法的範圍。

+0

謝謝先生,那正是我所期待的。 – zardlemalefique

+0

不客氣@zardlemalefique –

1

另一種方法是從Properties文件中讀取你的路:

Properties prop = new Properties(); 

,使用屬性,無論你想。它使得以後的重構變得非常簡單:

prop.getProperty("diPath"); 
prop.getProperty("pathOut"); 
1

使路徑參數變得更常見,因此它們可以由運行程序的人來設置。

public class ClassTest { 
    public static void main(String[] args) { 
     if (args.length < 2) { 
      System.err.println("Usage: java ClassTest {dir} {output}"); 
      return; 
     } 
     String dirPath = args[0]; 
     String pathOut = args[1]; 

    } 
} 
+0

我並不熟悉這種方法,但它看起來也很方便,謝謝Peter! – zardlemalefique

+0

@zardlemalefique這是通常使用的命令行參數。 –

1

final keyword意味着這個值將從未重新分配

static關鍵字讓變量是類變量代替實例變量。

還有一點需要注意,通常類的常量是用大寫字母和下劃線分隔符寫的,所以我改了名字。

所以,如果你想將它們聲明「全球」最好是使用類似於下面的代碼。

public class ClassTest { 
    public static final String DIR_PATH = "C:/Users/test1/"; 
    public static final String PATH_OUT = "C:/Users/stats.csv"; 


    public static void main(String[] args) { 
     // Use DIR_PATH or PATH_OUT as needed 
    } 
} 

注意,以前的代碼是有益的,只有你在重複使用不同的方法DIR_PATHPATH_OUT變量。否則,定義主要方法的本地變量是正確的,以限制僅使用它的代碼部分的可見性。

+0

感謝您提及最好的風格實踐並做出適當的調整。 – Neil

+0

謝謝大衛,這個答案也非常明確和有幫助。 – zardlemalefique

-1

試試這個..這是最徹底的方法:

public class ClassTest implements StaticPath { 

    public static void main(String[] args) { 

      System.out.print(PATH_OUT); 

    } 
} 


interface StaticPath { 

    public final static String PATH = "C:/Users/"; 

    public final static String PATH_OUT = PATH + "stats.csv"; 
    public final static String PATH_IN = PATH + "dyn.csv"; 

} 
+1

這會對閱讀此程序的人產生不必要的混淆。此外,這不會編譯。 – Neil

+0

這個編譯好!如果你想存儲100個路徑,而不是用buisness邏輯在同一個java類中聲明它們,我是最好的方法。也許這不是最好的辦法,但代碼編譯得很好;)和減號 –

+1

有些事情在這方面是主觀的,我會給你的。從接口派生(並因此混淆了項目空間),以便您可以引用公共而不是私有常量值當然不是這種情況。另外,將它複製並粘貼到IDE中,並在爲我貼上騙子標籤之前自行測試。此代碼不會*編譯。 – Neil