練習問題 解答
2.8 練習問題 解答
問1
① ×:フィールド変数のみ、メソッドのみ、フィールド変数+メソッドの3パターンがクラスには存在します。
② ○
③ ×:オブジェクトそのものではなく、オブジェクト参照情報を保持している。
④ ○
⑤ ×:明示的に区別がつくのでthisを付けるほうが好ましい。後同じ名前の変数であってもthisを付ける事でフィールド変数とその他の変数を区別することができる。
問2
1 | package jp.co.f1.basic.ch02exercise; |
8 | public void showPerson() { |
9 | System.out.println( "この人の名前は" + this .name + "で、年齢は" + this .age + "歳です。" ); |
フィールド変数に「String型変数name」と「int型変数age」、メソッドに戻り値・引数ともに無しの「showPersonメソッド」を定義しています。
問3
1 | package jp.co.f1.basic.ch02exercise; |
8 | public void showPerson() { |
9 | System.out.println( "この人の名前は" + this .name + "で、年齢は" + this .age + "歳です。" ); |
13 | public class Practice0201 { |
14 | public static void main(String[] args) { |
16 | Person02 person1 = new Person02(); |
17 | Person02 person2 = new Person02(); |
20 | person1.name = "神田太郎" ; |
22 | person2.name = "神田花子" ; |
問4
1 | package jp.co.f1.basic.ch02exercise; |
8 | public void showPerson() { |
9 | System.out.println( "この人の名前は" + this .name + "で、年齢は" + this .age + "歳です。" ); |
13 | public void setName(String name) { |
18 | public void setAge( int age) { |
23 | public String getName() { |
問5
b. 実行時エラーになりエラーメッセージが表示される。
解説
オブジェクト変数personにはnew演算子オブジェクト参照情報が既に格納されています。初期値に「null」を設定しなくても途中でオブジェクト変数personに「null」を代入してしまうと、オブジェクト参照情報が分からなくなりメンバにアクセスできなくなります。よって実行時エラーとなってしまいます。
問6
「この人の名前は山田花子で、年齢は25歳です。」
解説
1 | public void showPerson(){ |
4 | System.out.println( "この人の名前は" + name + "で、年齢は" + age + "歳です。" ); |
ポイントはshowPersonメソッドのローカル変数がフィールド変数名と同じ所です。画面に結果を表示する際に「this」キーワードが付いていないため、フィールド変数よりもローカル変数の名前が優先されてしまいます。
結果フィールド変数の値「神田太郎」、「30」よりもローカル変数の値「山田花子」、「25」が表示されることになります。
ローカル変数フィールド変数と同じ名前がある場合で、フィールド変数を明示的に利用したいなら「this」キーワードを付ければ利用できることを覚えておいて下さい。
NEXT>> 3 アクセス修飾子とカプセル化