1

正如文本所说,静态方法不访问非静态数据,那么几乎所有编程语言中的 main() 方法(声明为静态)如何能够在实例成员上工作?

4

5 回答 5

4

就 Java 而言,这不是真的,您只能在 main 中创建该类的实例后访问实例变量。

当您创建一个类的实例时,它就成为本地方法而不是实例,然后您正在访问该对象的属性,但是在 main 方法中您不能直接使用实例变量。

例如

public class TestStatic1 {
    private int number = 0;

    private static int staticnumber = 0;

    public static void main(String[] args) {
        number = 10; // cannot compile at this line.

        staticnumber = 10;
    }
}

另一个

public class TestStatic1 {
    private int number = 0;

    private static int staticnumber = 0;

    public static void main(String[] args) {
        TestStatic1 static1 = new TestStatic1();
        static1.number = 10; // perfectly fine, accessed via an object.

        staticnumber = 10;
    }
}
于 2012-05-28T17:52:26.493 回答
2

Main至少在 C# 中,静态方法用于创建应用程序使用的类的实例——这些实例用于访问它们的实例变量。

您将在大多数应用程序中看到newMain方法的调用。这将创建一个可以访问实例变量的类的实例。

于 2012-05-28T17:55:27.337 回答
1

Main-Method 是一个静态入口点。在 Java 中,它大多看起来像这样:

public class MainClass { 
    public static void main(String[] args){ 
        MainClass m = new MainClass();
        m.DoSomething();
        m.DoSomethingPrivate();

        DoSomethingStatic
    }

    public void DoSomething() {}
    private void DoSomethingPrivate() {}

    public static void DocSomethingStatic() {} 
}

它只能直接访问受保护或私有实例成员。

于 2012-05-28T17:56:59.460 回答
0

方法main不能访问包含 main. 如果您为它提供一个实例(或在方法中创建一个新实例),它可以访问这些实例。与此类似:

public static void foo(String s) {
    System.out.println(s.toUpperCase());
}
于 2012-05-28T17:56:21.157 回答
0

静态方法不访问非静态数据更准确地说:静态方法不访问非静态成员

于 2012-05-28T17:56:55.623 回答