这是我的问题:我有多个属于同一个包的类,它们需要访问某个文件路径
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
这可能很有用(并且您的用例很有意义),但公共静态变量是一把双刃剑,不应过度使用它们来访问从任何地方发生变化的事物,因为它们可能会破坏封装并使您的程序不那么清晰。
如果字符串永远不会再更改,您可以添加关键字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
原始类型或 String 类型的变量,它是 final 并使用编译时常量表达式(第 15.28 节)进行初始化,称为常量变量。
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/