有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么需要从其他静态空洞调用静态空洞?

我在高中有一门计算机编程-K课程,我们使用Java作为我们的语言。我注意到你似乎需要在每个脚本的开头加上public *static* void main(String[] args)。我们的主要结构是:

public class
   ( void main()
     void input()
     void process()
     void output() )

我们必须使所有void方法都是静态的,以便能够相互调用,因为我们不能使用非静态的main。为什么?静态在Java中意味着什么


共 (1) 个答案

  1. # 1 楼答案

    首先,被宣布为public static voidmain是由Java Language Specification规定的:

    The method main must be declared public, static, and void. It must specify a formal parameter (§8.4.1) whose declared type is array of String.

    事情就是这样;没有它,Java将无法执行您的脚本,因为缺少主方法

    也不重要, >你放它——它可以在中间,在顶部,在底部,或者在完全不同的文件中——只要你的程序有一个^ {CD1>}它实际运行的方法。

    至于static的含义,这取决于上下文

    • 如果对字段(即类中包含的变量)使用static,则会出现only ever be one instance of that field

    • 如果在方法(如main或其他方法)上使用static,则这是一个class method,不需要对象的实例来调用和使用它。这些特定的方法不应该依赖于调用它们的类的内部状态

    例如,你将在稍后的某个时间讨论Integer.parseInt;这是一个静态方法,与Integer绑定,不需要Integer的实例来调用

    接下来,不要认为static方法的声明对于代码来说是司空见惯的。坦率地说,这代表了纯粹的过程编程(也就是说,定义方法来做这些特定的事情,而不考虑状态,而不是一个面向对象的设计,可能也可能不考虑状态)

    你唯一一次被迫声明某个东西是静态的,就是你自己在静态上下文中使用它。由于没有创建类的实例(通过new关键字),因此将无法使用在其中声明的任何方法

    这不会编译,因为main没有方法引用该方法

    public class Foo {
        public static void main(String[] args) {
            invokeBar();
        }
    
        public void invokeBar() {
            System.out.println("Yay, bar!");
        }
    }
    

    下面的编译,因为main确实有直接调用该方法的方法:

    public class Foo {
        public static void main(String[] args) {
            invokeBar();
        }
    
        public static void invokeBar() {
            System.out.println("Yay, bar!");
        }
    }