Javaでは,自分で型を作成することもできます.
まずは,人の氏名(姓,名)を持つ型 Person
を作成してみましょう.
public class Person{
String givenName;
String familyName;
}
これで,Person
型の作成は完了です.Person
型は2つの String
型のフィールド変数
を持っています.givenName
(名)とfamilyName
(姓)です.
このプログラムだけでは何もできませんので,Person
型を利用するプログラムPersonManager
を作成しましょう.
public class PersonManager{
void run(){
Person person1 =
this.createPerson("Haruaki", "Tamada");
this.printPerson(person1);
}
Person createPerson(String name1, String name2){
Person person = new Person();
person.givenName = name1;
person.familyName = name2;
return person;
}
void printPerson(Person person){
System.out.printf("%s, %s%n",
person.familyName, person.givenName);
}
public static void main(String[] args){
PersonManager app = new PersonManager();
app.run();
}
}
以上のプログラムを作成し,実行してみましょう.
なお,Person.java
とPersonManager.java
は同じディレクトリに置いておく必要があります.
上で作成した PersonManager
型を以下の指示に従って拡張しましょう.PersonManager.java
のrun
メソッドに以下の処理を追加してください.
その際,メモリの状態を想像しながらプログラムを書きましょう.
フィールドの参照・代入もメソッド呼び出しと同じように,どの実体のフィールドなのかを
意識して指定してください.Person
型のフィールドgivenName
には,上記のperson.givenName = name1
のように,Person
型の変数を介してしかアクセスできません.
Person
型の変数 person2
を宣言してください.person2
に自分の名前を持つ Person
型の実体を作成して,代入してください.person2
の情報を画面に出力してください.Person person2 <span style="color:#f92672">=</span> createPerson<span style="color:#f92672">(</span><span style="color:#e6db74">"名前"</span><span style="color:#f92672">,</span> <span style="color:#e6db74">"自分の"</span><span style="color:#f92672">)</span><span style="color:#f92672">;</span>
<span style="color:#66d9ef">this</span><span style="color:#f92672">.</span><span style="color:#a6e22e">printPerson</span><span style="color:#f92672">(</span>person2<span style="color:#f92672">)</span><span style="color:#f92672">;</span>
} Person createPerson(String name1, String name2){ Person person = new Person(); person.givenName = name1; person.familyName = name2; return person; } void printPerson(Person person){ System.out.printf("%s, %s%n", person.familyName, person.givenName); } public static void main(String[] args){ PersonManager app = new PersonManager(); app.run(); } }
PersonManager.java
のコンパイル,実行には,同じディレクトリにPerson.java
を置いておく必要があります.
次の処理を PersonManager
の run
メソッドに追加していきましょう.
Person
型の変数 person3
を宣言してください.person3
に person1
を代入してください.person3
の familyName
を全て大文字にしてください.
person3.familyName = person3.familyName.toUpperCase();
person1
の情報を画面に出力してください.Person person2 <span style="color:#f92672">=</span> createPerson<span style="color:#f92672">(</span><span style="color:#e6db74">"名前"</span><span style="color:#f92672">,</span> <span style="color:#e6db74">"自分の"</span><span style="color:#f92672">)</span><span style="color:#f92672">;</span>
<span style="color:#66d9ef">this</span><span style="color:#f92672">.</span><span style="color:#a6e22e">printPerson</span><span style="color:#f92672">(</span>person2<span style="color:#f92672">)</span><span style="color:#f92672">;</span>
Person person3 <span style="color:#f92672">=</span> person1<span style="color:#f92672">;</span>
person3<span style="color:#f92672">.</span><span style="color:#a6e22e">familyName</span> <span style="color:#f92672">=</span> person3<span style="color:#f92672">.</span><span style="color:#a6e22e">familyName</span><span style="color:#f92672">.</span><span style="color:#a6e22e">toUpperCase</span><span style="color:#f92672">(</span><span style="color:#f92672">)</span><span style="color:#f92672">;</span> <span style="color:#75715e">// <= person3 の値を更新する.
this.printPerson(person1); // <= person1 を出力する. } Person createPerson(String name1, String name2){ Person person = new Person(); person.givenName = name1; person.familyName = name2; return person; } void printPerson(Person person){ System.out.printf("%s, %s%n", person.familyName, person.givenName); } public static void main(String[] args){ PersonManager app = new PersonManager(); app.run(); } }
上で作成したPerson
型の実体 person1
〜person3
をArrayList
に入れて出力部分をまとめてみましょう.
ArrayList
には,Integer
型以外でもどのような型でも入れられますので,
上記のように,ArrayList
にどのような型を入れるのか,入っている型が何かをしっかりと認識しましょう.
void run(){
// 今までの処理内容.
// ただし,printPersonの行は全て削除しておく.
ArrayList<何を格納するのか> list = new ArrayList<>();
// listに person1 〜 person3 を追加する.
this.printPersons(list);
}
void printPersons(...){ // <= printPerson を変更する.
// 引数で与えられた list から要素を一つずつ取り出し,出力する.
}
Person person2 <span style="color:#f92672">=</span> createPerson<span style="color:#f92672">(</span><span style="color:#e6db74">"名前"</span><span style="color:#f92672">,</span> <span style="color:#e6db74">"自分の"</span><span style="color:#f92672">)</span><span style="color:#f92672">;</span>
Person person3 <span style="color:#f92672">=</span> person1<span style="color:#f92672">;</span>
person3<span style="color:#f92672">.</span><span style="color:#a6e22e">familyName</span> <span style="color:#f92672">=</span> person3<span style="color:#f92672">.</span><span style="color:#a6e22e">familyName</span><span style="color:#f92672">.</span><span style="color:#a6e22e">toUpperCase</span><span style="color:#f92672">(</span><span style="color:#f92672">)</span><span style="color:#f92672">;</span> <span style="color:#75715e">// <= person3 の値を更新する.
ArrayList<Person> list = new ArrayList<>(); printPersons(list); } Person createPerson(String name1, String name2){ Person person = new Person(); person.givenName = name1; person.familyName = name2; return person; } void printPerson(ArrayList<Person> persons){ for(Person person: persons){ System.out.printf("%s, %s%n", person.familyName, person.givenName); } } public static void main(String[] args){ PersonManager app = new PersonManager(); app.run(); } }