静态方法的数据访问

时间:2012-05-28 17:50:50

标签: c# java methods static instance-variables

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

5 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:2)

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

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

答案 2 :(得分: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() {} 
}

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

答案 3 :(得分:0)

main方法无法访问包含 main的类中的非静态字段。如果你为它提供一个实例(或在方法中创建一个新实例),它可以访问那些罚款。与此类似:

public static void foo(String s) {
    System.out.println(s.toUpperCase());
}

答案 4 :(得分:0)

静态方法无法访问非静态数据更精确地:静态方法无法访问非静态成员