テキストが言うように、静的メソッドは非静的データにアクセスしないので、ほぼすべてのプログラミング言語のmain()メソッド(静的として宣言)はどのようにしてインスタンスメンバーで機能することができますか?
5 に答える
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;
}
}
もう1つ
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;
}
}
静的Main
メソッドは、少なくともC#では、アプリケーションで使用されるクラスのインスタンスを作成するために使用されます。これらのインスタンスは、インスタンス変数にアクセスするために使用されます。
ほとんどのアプリケーションnew
では、Main
メソッドでの呼び出しが表示されます。これにより、インスタンス変数にアクセスできるクラスのインスタンスが作成されます。
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() {}
}
保護されたインスタンスメンバーまたはプライベートインスタンスメンバーに直接アクセスすることしかできません。
メソッドは、を保持するmain
クラスの非静的フィールドにアクセスできません。インスタンスを提供する(またはメソッド内に新しいインスタンスを作成する)と、それらに正常にアクセスできます。これに似ています: main
public static void foo(String s) {
System.out.println(s.toUpperCase());
}
「静的メソッドは非静的データにアクセスしません」より正確には:静的メソッドは非静的メンバーにアクセスしません。