前回記事、オブジェクト指向とは何なのかを簡単に説明してみるの練習題材です。
仕様
以下の会員クラスを作成し、Mainクラスで表示する。
会員クラスには、「会員」という単位で持つことできる値(フィールド)と
機能(メソッド)を実装していきます。
会員クラス
・クラス名:Memberとする。
・以下のフィールドを持つ。
氏名、性別、年齢
・インスタンス生成時に、全フィールドの値を指定する。
・以下のメソッドを持つ。
名前の取得(引数:なし、戻り値:名前)
性別の取得(引数:なし、戻り値:性別)
年齢の取得(引数:なし、戻り値:年齢)
ユーザ情報の取得(引数:なし、戻り値:名前+性別+年齢)
Mainクラス
・クラス名:Mainとする。
・Memberクラスのインスタンスを生成する。
・Memberクラスのユーザ情報を表示する。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
package samples.member; /** * 会員クラス * */ public class Member { // フィールド private String name; private String sex; private int age; // コンストラクター Member(String name, String sex, int age){ this.name = name; this.sex = sex; this.age = age; } // メソッド // 名前 public String name() { return name; } // 年齢 public int age() { return age; } // 性別 public String sex() { String sexJa = ""; if(sex.equals("male")) sexJa = "男"; if(sex.equals("female")) sexJa = "女"; if(sex.equals("other")) sexJa = "その他"; return sexJa; } // メンバー情報 public String info() { return String.format("Name:%s Age:%d Sex:%s", name(), age(), sex()); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package samples.member; /** * Mainクラス * */ public class Main { public static void main(String...strings) { Member taro = new Member("Taro","male",10); Member hanako = new Member("Hanako","female",0); Member hatena = new Member("Hatena","other",30); Member fusuu = new Member("fusuu","male",-30); System.out.println(taro.info()); System.out.println(hanako.info()); System.out.println(hatena.info()); System.out.println(fusuu.info()); } } |
1 2 3 4 5 6 7 |
// 実行結果 Name:Taro Age:10 Sex:男 Name:Hanako Age:0 Sex:女 Name:Hatena Age:30 Sex:その他 Name:fusuu Age:-30 Sex:男 |
年齢の負数入力への対処
サンプルコードでは、年齢は負数の入力が可能になっています。
負数入力時は、例外を投げるように修正し、正数のみ入力可能となるように修正します。
挿入場所
コンストラクターの、this.age = age; の手前に挿入します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// コンストラクター Member(String name, String sex, int age){ this.name = name; this.sex = sex; if(age < 0) { throw new IllegalArgumentException( MessageFormat.format( "年齢は0以上とすること。name={0} age={1}", name, age)); } this.age = age; } |
解説
MessageFormat.format()は、メッセージを整形して出力するメソッドです。
指定したインデックスと値を紐づけることができます。
今回の場合、name={0} age={1} の0と1は以下のように紐づきます。
0 ← name、1 ← age
(図解)
実行結果
実行すると、fusuuの会員オブジェクトが例外となったことを確認できました。
1 2 3 4 5 |
Exception in thread "main" java.lang.IllegalArgumentException: 年齢は0以上とすること。name=fusuu age=-30 at samples.member.Member.<init>(Member.java:20) at samples.member.Main.main(Main.java:12) |
まとめ
・「会員」オブジェクトで持つべき値(フィールド)と機能(メソッド)を定義する。
・インスタンスを生成する際の値は、コンストラクタで定義する。
・インスタンス生成後、そのオブジェクトのメソッドを使用することができる。
・不正値はコンストラクターで例外処理にかけることができる。