为什么在Java中使用公共静态方法?

时间:2014-12-04 00:19:14

标签: java methods static static-methods public

如果我正确理解每个关键字的含义,public表示任何人都可以访问该方法(类的实例,方法的直接调用等),而static表示方法只能在类中访问(甚至不能在类的实例中访问)。也就是说,public关键字在这种情况下没有用,因为该方法只能在类中使用。我写了一个小程序来测试它,没有将public关键字放在方法前面,我没有得到任何错误或警告。任何人都可以解释为什么有时使用public static方法? (例如public static void main(String[] args)) 提前谢谢!

4 个答案:

答案 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?
        }
    }