这是我的问题:我有多个类属于同一个包,他们需要访问某个文件路径
String filePath = "D:/Users/Mine/School/Java/CZ2002_Assignment/src/"
不是在每个类中声明相同的Filepath,而是可以简单地使用此FilePath的“全局”类型的变量,以便所有类都可以访问它,我只需要声明并更新一次。
由于
答案 0 :(得分:17)
如果您将其声明为
public class TestClass {
public static String filePath="D:/Users/Mine/School/Java/CZ2002_Assignment/src/";
}
它随处可见TestClass.filePath
这可能很有用(并且你的用例很有意义),但是公共静态变量是一把双刃剑,不应该过度使用以便能够访问从任何地方变化的东西,因为它们可以破坏封装并使你的程序不太清楚。
如果永远不会更改字符串,您可以添加关键字final
,这将强制执行此永不改变的行为,并允许JVM进行额外的效率增强(您无需担心约)
答案 1 :(得分:10)
public class Test {
public static final String FILE_PATH = "D:/Users/Mine/School/Java/CZ2002_Assignment/src/";
}
这样称呼:Test.FILE_PATH
请注意final
,因为您只想声明一次。
还有一个code convention来命名最终常量全部大写,组件用下划线“_”字符分隔。最后,这可能是一个偏好问题。
答案 2 :(得分:2)
关于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
基本类型或类型String的变量,是最终的并使用编译时常量表达式(第15.28节)初始化,称为常量变量。
答案 3 :(得分:1)
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/