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

Java 为什么需要从其他静态空洞调用静态空洞?,java,static,void,Java,Static,Void,我在高中有一门计算机编程-K课程,我们使用Java作为我们的语言。我注意到您似乎需要在每个脚本的开头使用public*static*void main(String[]args)。我们的主要结构是: public class ( void main() void input() void process() void output() ) 我们必须使所有void方法都是静态的,以便能够相互调用,因为我们不能使用非静态的main。为什么?静态在Java中意味着

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

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

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

静态意味着调用该方法不需要类的实例

public class Foo {
    public static void main(String[] args) {
        invokeBar();
    }

    public void invokeBar() {
        System.out.println("Yay, bar!");
    }
}

static void main
正是Java需要的特定函数,因此它知道从哪里开始运行代码。每个程序都必须包含一个且正好包含一个,
static void main

我注意到您似乎需要在每个脚本的开头使用“public static void main(String[]args)。

这样做的原因是,当JVM运行程序时,它需要能够在不创建包含main方法的entry类实例的情况下运行程序。有时,包含main方法的类可能有构造函数,这些构造函数需要参数来创建它的实例,那么JVM如何知道它必须传递什么值才能自己创建它的实例呢,这就是为什么java强制您将main作为静态方法,这样JVM就不需要担心创建一个main类的实例来调用main方法,而main方法是应用程序的入口点

我们必须使所有空隙保持静止

这是一个错误的假设。您不需要将void方法设置为静态。有两种方法可以通过类的对象(这些方法称为实例方法)或通过类变量(名称)(这些方法称为静态方法)调用方法。如果您不想使您的方法成为静态的,那么您需要创建一个类的实例并调用您的方法

静态在Java中是什么意思?
静态是Java中的一个修饰符。您可以将其用于实例变量、方法或内部类。该关键字使资源(实例变量/方法/内部类)成为基础类的属性,因此在该类的所有实例(对象)之间共享

首先,声明为
public static void
main
由以下机构强制执行:

方法
main
必须声明为
public
static
void
。它必须指定一个形式参数(§8.4.1),其声明类型为字符串数组

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

它也不重要,它可以在该类的中间,在顶部,在底部,或者在完全不同的文件中-只要你的程序有一个<>代码>主< /COD>它实际运行的方法。< /P> 至于

静态的含义
,这取决于上下文

  • 如果对字段(即类中包含的变量)使用
    static
    ,则会出现错误

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

例如,稍后您将讨论
Integer.parseInt
;这是一个静态方法,绑定到
Integer
,不需要调用
Integer
的实例

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

你唯一一次被迫声明某个东西是静态的,就是你自己在静态上下文中使用它。由于您没有创建类的实例(通过
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!");
    }
}

啊。我现在明白了,静态只是一种说法,‘这是这个方法的唯一实例’?记住上下文。如果是一个字段,那么该字段只有一个实例。如果它是一个方法,那么该方法不需要有它所连接的对象的实例来调用它(例如)。