-1

私は最近、GUI をコーディングするのに邪魔にならないプログラミング言語を探して Java を学んでいます (ウィンドウを作成してインターフェイス要素を追加する簡単な方法を求めるのは多すぎますか?)。 Java で動的プログラミングと静的プログラミングがどのように混ざり合っているかについては、やや興味があります。Java から、メイン クラス/エントリ ポイントを次のように宣言するように求められます。

public static void main(String[] args)...

main 内では、次のようにインスタンスを宣言できます。

JFrame frame = new JFrame();

frame = new JFrame();Java で完全に有効であるのとは対照的に、それはなぜですか?

特に、最初のものを精神的に「解析」すると、「JFrameのインスタンスであるフレームは、JFrameの新しいインスタンスです」と読みました。私には、それはやや冗長に思えます。「フレームはJFrameの新しいインスタンスです」と私が読んだ後者は、はるかに合理的です。

次に進むと、多くの場合、クラスの上部近くで、頻繁に使用される変数、特に定数または永続的な表示オブジェクトを定義します。そのため、単純なクラスを作成するときは通常、 のようなものを宣言しますpublic JFrame frame

JFrame frame = new JFrame()これらの宣言を問題なく削除できる理由は、適切なインスタンス化の冗長性ですか?

    public class Display {
        //The line below can be deleted with no apparent difference
        public JFrame frame; 

        public static void main(String[] args) {
        /* Why do I need to declare the type of a variable I have 
         * already declared above? */
        JFrame frame = new JFrame();

        frame.setSize(800, 600);
        frame.setVisible(true);
        }
     }

その宣言を一番上で削除した場合、フレームがメイン メソッドの子になると想定してもよろしいですか? その場合、それを上に宣言すると、それは Display? の子になります。

全体として、静的クラスによるインスタンス化の説明が欲しいです。ばかげた質問をしていないことを本当に願っていますが、オンラインの「チュートリアル」は通常、コードが何をするかを説明するウォークスルーの形をとっていますが、なぜそのように使用されるのかはわかりません。基本的に、私は他の場所で答えを見つけることができず、皆さんが多くの知識を持っていることを知っています. 思慮深い回答と、可能であれば、各例で宣言された「フレーム」と対話する方法の説明をいただければ幸いです。

public JFrame frame私がトップに宣言したとしても、frame = new JFrameが無効である理由の説明にも非常に満足しています。

この度はお読みいただき、またご回答いただきまして誠にありがとうございました^_^

4

2 に答える 2

4

以下の間には非常に大きな違いがあります。

JFrame frame = new JFrame();

frame = new JFrame();

最初のバージョンでは、(指定したコンテキストで) 新しいローカル変数を宣言し、それに値を割り当てます。Displayそのローカル変数は、クラス内で宣言したインスタンス変数とは完全に別のものです。

後者のスニペットは、既存の変数に新しい値を割り当てます。ただし、この場合は、インスタンス変数はあるが のインスタンスがないため、機能しませんDisplay

frame変数をインスタンス変数としてstaticではなくとして宣言する場合は、mainメソッド内でそれに割り当てることができます。

public class Display {
    public static JFrame frame; 

    public static void main(String[] args) {
        frame = new JFrame();
        frame.setSize(800, 600);
        frame.setVisible(true);
    }
 }

または、新しいインスタンスを作成し、Displayその中のインスタンス変数に値を代入することもできます:

public class Display {
    public JFrame frame; 

    public static void main(String[] args) {
        Display display = new Display();
        display.frame = new JFrame();
        display.frame.setSize(800, 600);
        display.frame.setVisible(true);
    }
 }

でも:

  • Displayとにかく、インスタンス/静的変数を使用するという兆候はありません
  • フィールドを常に非公開にすることを強くお勧めします
于 2013-09-17T06:12:45.940 に答える
1
//The line below can be deleted with no apparent difference
public JFrame frame; 

はい、未使用の変数であるためです。

frameコードでインスタンス フィールドを使用していません。

代わりにあなたが持っている

 public static void main(String[] args) {
    /* Why do I need to declare the type of a variable I have 
     * already declared above? */
    JFrame frame = new JFrame();

同じ名前と型のまったく無関係な新しいローカル変数を宣言します。

于 2013-09-17T06:13:36.480 に答える