ここに私の問題があります:同じパッケージの一部である複数のクラスがあり、特定のファイルパスにアクセスする必要があります
String filePath = "D:/Users/Mine/School/Java/CZ2002_Assignment/src/"
すべてのクラスで同じ Filepath を宣言するのではなく、この FilePath の変数の「グローバル」タイプを単純に持つことで、すべてのクラスがそれにアクセスでき、一度だけ宣言して更新する必要があります。
ありがとう
ここに私の問題があります:同じパッケージの一部である複数のクラスがあり、特定のファイルパスにアクセスする必要があります
String filePath = "D:/Users/Mine/School/Java/CZ2002_Assignment/src/"
すべてのクラスで同じ Filepath を宣言するのではなく、この FilePath の変数の「グローバル」タイプを単純に持つことで、すべてのクラスがそれにアクセスでき、一度だけ宣言して更新する必要があります。
ありがとう
次のように宣言すると
public class TestClass {
public static String filePath="D:/Users/Mine/School/Java/CZ2002_Assignment/src/";
}
どこでもアクセスできるようになりますTestClass.filePath
これは便利な場合があります (ユース ケースは理にかなっています) が、public static 変数は諸刃の剣であり、カプセル化を破ってプログラムを不明確にする可能性があるため、どこからでも変更されるものにアクセスできるようにするために過度に使用するべきではありません。
文字列が別の文字列に変更されない場合は、キーワード を追加できますfinal
。これにより、この変更されない動作が強制されるだけでなく、JVM が追加の効率向上を行うことができます (心配する必要はありません)。
public class Test {
public static final String FILE_PATH = "D:/Users/Mine/School/Java/CZ2002_Assignment/src/";
}
次のように呼び出します。Test.FILE_PATH
final
一度だけ宣言したいので注意してください。
アンダースコア「_」文字で区切られたコンポーネントを使用して、すべての最終的な定数に名前を付けるというコード規則も使用されていました。結局は好みの問題かもしれませんが。
一言final
- 文字列フィールドが定数変数の場合、その値はそれを参照する多くのクラスで重複する可能性があります。1) 文字列が大きすぎるため、これを避けたい場合があります。2) 文字列が変更された場合、それを参照するすべてのクラスを再コンパイルする必要があります。
私たちはそれを避けることができます
public static final String filePath;
static{ filePath="D:/Users/Mine/School/Java/CZ2002_Assignment/src/"; }
http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.4を参照してください。
final であり、コンパイル時の定数式 (§15.28) で初期化されるプリミティブ型または型 String の変数は、定数変数と呼ばれます。
public class One
{
public final static String FILEPATH = "D:/Users/Mine/School/Java/CZ2002_Assignment/src/";
}//class one
public class Two
{
public static void main(String[] args)
{
//sample operation to access the filePath value
System.out.println(One.FILEPATH);
}//main
}//class Two
ノート:
1)構成ファイル/プロパティファイルを使用する方が理想的です。これにより、再コンパイルせずにパスを変更できます。
2) 静的変数の使用は避けてください! (ほぼ常に)
http://www.offthehill.org/articles/2011/06/03/java-static-variables-are-wrong-almost-always/