正如文本所说,静态方法不访问非静态数据,因此几乎所有编程语言中的main()方法(声明为静态)如何能够在实例成员上工作?
答案 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)
“静态方法无法访问非静态数据”更精确地:静态方法无法访问非静态成员。