Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

初心者です。

あるページのサンプルコードについて質問させてくださ
い。

import java.awt.*;
import java.awt.event.*;
 
public class Test5 extends JFrame {
    JLabel mylabel;
    JButton mybutton;
 
    public Test5() {
        super();
        setTitle("Hello");
        setSize(300,150);
        setLayout(null);
         
        mylabel = new JLabel("Hello World.");
        mylabel.setBounds(50,50,200,30);
        this.add(mylabel);
         
        mybutton = new JButton("OK");
        mybutton.setBounds(100,100,100,25);
        this.add(mybutton);
         
        mybutton.addActionListener(new 
ClickAction());
    }
 
     public static void main (String args []) {
        new Test5().setVisible(true);
    } 
    class ClickAction implements ActionListener { 
        public void actionPerformed(ActionEvent 
ev){
            mylabel.setText("You are clicked!");
        }
    }
}

ここで「JLabel mylabel;」と「mylabel = new 
JLabel("Hello World.");」が別々に書かれているのは
なぜなのでしょうか。

「JLabel mylabel;」を残したまま、
「mylabel = new Label("Hello World.");」の所を
「JLabel mylabel = new JLabel("Hello World.");」と
書くとエラーになるのはなぜなのかも教えてください。

もしかしたら、すごく基本的な事なのかもしれません
が、どうかよろしくお願いします。

2

回答

93812

閲覧

2件の回答

評価

30

>別々に書かれているのはなぜ・・・

サンプルでは単にnewするだけではなく、newにより生成し
たインスタンスに対して他の初期化コードを実行していま
す。フィールドの定義箇所でこれら全ての初期化コードを
記述できないので、このサンプルを書いた人がnewも含め
てコンストラクターでまとめて初期化をしようと思ったん
ですね。多分多くのプログラマーがそうすると思います。

>エラーになるのはなぜ
そのように記述してしまうとフィールドmylabelが初期化
されずnullのままになります。actionPerformedを実行す
るとNPE(NullPointerException)が発生します。

質問の内容からフィールドとローカル変数の概念を十分把
握しておられないようにお見受けします。
初歩的なものでよいので最初は教科書などで基本をおさえ
ておくことをお勧めします。

評価

0

回答ありがとうございました!

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。