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();
}
}
以上のプログラムを作成し,実行してみましょう.
上で作成した PersonManager
型を以下の指示に従って拡張しましょう.PersonManager.java
のrun
メソッドに以下の処理を追加してください.
その際,メモリの状態を想像しながらプログラムを書きましょう.
フィールドの参照・代入もメソッド呼び出しと同じように,どの実体のフィールドなのかを
意識して指定してください.Person
型のフィールドgivenName
には,上記のperson.givenName = name1
のように,Person
型の変数を介してしかアクセスできません.
Person
型の変数 person2
を宣言してください.person2
に自分の名前を持つ Person
型の実体を作成して,代入してください.person2
の情報を画面に出力してください.public class PersonManager{
void run(){
Person person1 =
this.createPerson("Haruaki", "Tamada");
this.printPerson(person1);
Person person2 = createPerson("名前", "自分の");
this.printPerson(person2);
}
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
の run
メソッドに追加していきましょう.
Person
型の変数 person3
を宣言してください.person3
に person1
を代入してください.person3
の familyName
を全て大文字にしてください.
person3.familyName = person3.familyName.toUpperCase();
person1
の情報を画面に出力してください.public class PersonManager{
void run(){
Person person1 =
this.createPerson("Haruaki", "Tamada");
this.printPerson(person1);
Person person2 = createPerson("名前", "自分の");
this.printPerson(person2);
Person person3 = person1;
person3.familyName = person3.familyName.toUpperCase(); // <= 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 から要素を一つずつ取り出し,出力する.
}
public class PersonManager{
void run(){
Person person1 =
this.createPerson("Haruaki", "Tamada");
Person person2 = createPerson("名前", "自分の");
Person person3 = person1;
person3.familyName = person3.familyName.toUpperCase(); // <= 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();
}
}