- static void main classは、どのクラスがそれを呼び出すかに関係なく、プログラムへの入り口ですか...それともその特定のクラスの入り口メソッドだけですか...
これは一体どのように機能しますか?
public class init{ public static void main(String[] args){ new init(); } public init(){ System.out.print("hi"); } }
プログラムがそれ自体のインスタンスを作成する方法がわかりません...なぜこれを実行できないのですか?
public class init{ public static void main(String[] args){ start(); } public static void start(){ System.out.print("hi"); } }
静的は、単純なパブリックに対して、いったい何をするのでしょうか。
6 に答える
static
とpublic
は異なるキーワードです。
アクセス修飾子public
です。
クラス全体のメンバーを指定するだけです。static
public static void main
これは、JVMがプログラムの実行を開始する時点を認識できるようにするためです。1つのエントリポイントのみを選択し、他のエントリポイントがある場合は無視します。
どちらの方法でも機能しますが、結局は設計に帰着します。つまり、コンストラクターにメッセージを表示させますか、それともその責任を別のメソッドに委任しますか?また、そのメソッドも静的である必要はありません。あなたはそれをそのようにすることができます:
new init().start() ;
これがプログラミングが素晴らしく、そのようなPITAである理由です;)1つのことを成し遂げる方法はたくさんあります。
1)main
は、Javaクラスを「実行」する方法です。プログラムは複数のクラスを持つことができ、それぞれに独自のがありmain
ます。実行するときは、実行するクラスを指定します。
2)それは可能ですが、通常はクラスよりもオブジェクトのインスタンスを処理する方が適切です。これを行う理由はさまざまです。
3)static
は、インスタンス変数/メソッドではなく、クラスレベルの変数/メソッドであることを意味します。それらは、クラス自体(たとえばSystem.out
)またはインスタンス(null参照でさえ)で「オン」と呼ぶことができますが、それは貧弱な形式と見なされます。
static void main classは、どのクラスがそれを呼び出すかに関係なく、プログラムへの入り口ですか...それともその特定のクラスの入り口メソッドだけですか?
main
これは、C / C ++プログラムの機能と非常によく似た、プログラムを開始できるJVMを言う方法です。このメソッドを使用するクラスが複数ある場合は、どのクラスがプログラムの入り口になるかをJVMに指示する必要があります。
静的は、単純なパブリックに対して、いったい何をするのか
static
キーワードはメソッド/変数がクラスに属することを意味し、単にprivate / protected / public / defaultはメソッド/変数がクラスインスタンス(オブジェクト)に属することを意味します。
これは一体どのように機能しますか
init
クラスのインスタンスを作成しています。Javaコードでそれを行うのは悪いことではありません。クラスコンストラクタでは、プログラムはHi
コンソールに単語を出力します。
うーん、まあ、あなたは2番目のことをすることができます。確かに、私はそれをコンパイルしただけで、実行され、次のように述べました。
hi>
静的は実際にはパブリックとは関係ありません。静的対動的です。パブリック対プライベートです。
読んでください:「static」キーワードはクラスで何をしますか?
ちなみに、shhh-プログラムを開始するためにstaticキーワードを持っている必要はありません。あなたはただ言うことができます:
public void main(String[] args)
そして、ほとんどの場合、あなたは通り抜けますが、あなたの場合はそうではありません!
最初のものを削除すると、次のようになりstatic
ます。
java.lang.NullPointerException
エラー 。理由を理解する必要があります。だから、static void main
Javaを十分に理解するまで頑張ってください!
プログラムへの入り口
クラスはそれ自体のインスタンスを作成します。これは、最終的には、System.out.printを実行するだけでなく、さらに多くのデータをカプセル化する必要がある場合があるためです。
staticは、この場合、Classメソッドを定義します。つまり、そのクラスからインスタンス化されたオブジェクトではなく、クラスによって呼び出されるメソッドです。
Javaのエントリポイントは常に指定されたmain
メソッドです。init
最初の例では、タイプ(クラス名はinit
)の新しいオブジェクトを作成し
ます。initクラスのコンストラクターで、hiを書き込むように指示します。new
キーワードを使用して新しいインスタンスを作成するように指示します。コンストラクターは、クラス名と一致するメソッドです。
2番目の例では、インスタンスは作成されません。start
hiを出力するメソッドを呼び出します。init.start();
静的メソッドは常にtype(class)を参照しますが、非静的メソッドは実行するために常にオブジェクト参照を必要とするため、作成すること
もできます。
これを示すために、最初の例の修正バージョンを次に示します。
public class Init{
public static void main(String[] args){
Init i = new Init();
i.goodBye();
}
public Init(){
System.out.print("hi");
}
public void goodBye() {
System.out.print("Good Bye");
}
}