如果我正确理解每个关键字的含义,public
表示任何人都可以访问该方法(类的实例,方法的直接调用等),而static
表示方法只能在类中访问(甚至不能在类的实例中访问)。也就是说,public
关键字在这种情况下没有用,因为该方法只能在类中使用。我写了一个小程序来测试它,没有将public
关键字放在方法前面,我没有得到任何错误或警告。任何人都可以解释为什么有时使用public static
方法? (例如public static void main(String[] args)
)
提前谢谢!
答案 0 :(得分:3)
静态方法意味着您不需要实例化类来调用该方法,它并不意味着您无法从应用程序中的任何位置调用它。
答案 1 :(得分:1)
公共静态方法是一种不需要运行类的实例并且可以从任何地方运行的方法。通常,它用于某些实用程序函数,它不使用类的成员变量,并且在其逻辑中自包含。
下面的代码根据图像文件名选择存储图像的路径,以便将许多图像存储在小文件夹树中。
public static String getImagePathString(String key){
String res = key.substring(3, 4)+File.separator+
key.substring(2, 3)+File.separator+
key.substring(1, 2)+File.separator+
key.substring(0, 1);
return res;
}
它不需要其他信息(可以对密钥大小进行安全检查)
答案 2 :(得分:1)
其他人已经解释了static
的正确含义。
有人可以解释为什么有时会使用公共静态方法吗?
public static void main
方法 - java程序的标准入口点。
public
因为需要从外界调用它。
它是 static
,因为它不会对start a program from an object instance产生影响。
static
。
也就是说,并不总是使用static
关键字,因为您希望在不实例化的情况下访问类中的某些成员,而是因为它有意义。您保留在一个位置的所有实例之间共享的属性,而不是在每个实例中保存它的副本。
public static
(或甚至public static final
)的第三种常见用法 - 常量的定义。
答案 3 :(得分:1)
一些选项的快速指南......
public class Foo {
public static void doo() {
}
private static void dont() {
}
public Foo() {
doo(); // this works
dont(); // this works
Foo.doo(); // this works
Foo.dont(); // this works
this.doo(); // this works but is silly - its just Foo.doo();
this.dont(); // this works but is silly - its just Foo.dont();
}
public static void main(String[] args) {
doo(); // this works
dont(); // this works
Foo.doo(); // this works
Foo.dont(); // this works
Foo foo = new Foo();
foo.doo(); // this works but is silly - its just Foo.doo();
}
}
public class Another {
public static void main(String[] args) {
Foo.doo(); // this works
Foo.dont(); // this DOESN'T work. dont is private
doo(); // this DOESN'T work. where is doo()? I cant find it?
}
}