前回のvol.36で新しいクラスを作成するところまでやった。
もちろん、クラスを作っただけでは{ }の中身が空っぽだから何の役にも立たない。
クラスの中には基本的にオブジェクトの状態を表すデータ、メソッドが存在してプログラムを動かしている。
だからオブジェクトの要素を書く必要がある。
オブジェクトについてはこちら⇒クラスとオブジェクト、メソッドについてもう一度考えてみた by Javaプログラミング初心者 Vol.33
今回は状態を表すデータを新しく作ったクラスの中に書く方法について。
状態を表すデータを書く
書くのはオブジェクトが持っている特性の一つである、「状態」について。
クラスの名前は「Student(生徒)」にしてみた。
class Student{ }
ほかにも「得意科目」だったり「苦手科目」だったり、「成績」だったり、生徒によって変わる。「得意科目が数学で、苦手科目は社会、髪は茶色なのが生徒A」、「得意科目が国語で、苦手科目は体育、髪は黒なのが生徒B」といったように、状態にデータを付け加えることで誰の情報なのか分かるようになる。共通項目があり、生徒によってデータが変わる特性があるものをオブジェクトでは「状態」といっている。
今回は、生徒を表す状態として、「所属クラス」、「得意科目」、「学年末の平均点」を設定することにしてみた。
これを作ったクラスの中に書くと↓のような感じ。
class Student{
String classNumber = “3-1”;
String subject = “math”;
double average = 82.5;
}
今回は状態と一緒にデータも書いてみた。
classNumber・・・所属クラス「3-1(3年1組)」
subject・・・・・得意教科「数学」
average・・・・・平均「82.5」
クラスと教科は文字列で表すから「String」、平均は小数点を使うから「double」を使った。
メインメソッドの中で作ったクラスを呼び出す
ただ、これだけでは画面に表示されない。
「System.out.println();」を書けばいいと思うが、実は自分で作ったクラスの中に書いて実行しても画面に表示されない。
プログラムを実行したときにまずコンピューターが探すのがメインメソッド。
いくら頑張ってコードを書いても、コードがメインメソッド内で使われなければどこにも反映されないみたい。
でもclass Student{ }はメインメソッドのある外側に作ったから意味無いの?
※外側とは、下の図でいうと「新しいクラス」もしくは「新しいクラス2」に作ったということ。
全体的に見るとこんな感じ。
package JavaTakusanRenshu;
public class yobidashi {
public static void main(String[] args) { ←メインメソッド
}
}
class Student{
String classNumber = “3-1”;
String subject = “math”;
double average = 82.5;
}
オレンジ部分が、メインメソッドがあるメインクラス。
最初にクラスを作ったときに作成される部分。
作ったクラスの内容を画面に表示させるには、メインメソッドの中で呼び出すことが必要になる。
使うからおいで~って呼ぶのか。
※このままだと使えない。
使えるようにするために、これからコードを書いていく。
新しいオブジェクトを作成
作ったクラスを呼び出すには、まずオブジェクトを作る必要がある。
まずは何も考えずに、オブジェクトの作成をしよう。
以下のものが実際にオブジェクトを作ったコード。
Student Maria = new Student();
うーん。
1つ1つ分解して理解してみる。
まずは呼び出したいクラス名を宣言。
今回は「Student」。
そして、自分で作った「Student」クラスからオブジェクトを作るから、その作成されたオブジェクトに名前を付けないといけない。
適当に「Maria」としてみた。
「Student Maria」まで出来た。
「Maria」は新しく作られたオブジェクトの名前に過ぎないから、実際にオブジェクトを作るコードを書く必要がある。
それを「=」をまたいだ右辺に作る。
オブジェクトを新しく作るから「new」をまずつける。
どこからオブジェクトを作るかというと、「Student」クラスから作る。
だから「Student」と書く。
そして「()」をクラス名の後ろにつける。
最後にプログラムの末尾を表す「;(セミコロン)」を付ける。
全部続けると
Student Maria = new Student();
この「Maria」がStudentクラスのオブジェクトの名前で、この中にStudentクラスのデータの要素がすべて入っている。
何故オブジェクトを作らないといけないのか
これ以前の記事でも何度か述べたが、プログラムが実行されたときに、まずプログラムはメインメソッドを探す。
そしてメインメソッドの中の内容を処理する。
でも、今回作ったStudentクラスはメインメソッドの外側に書かれている。
だから、「オブジェクトを作って、メインメソッド内で呼び出す」ということをしないといけない。
なんでわざわざオブジェクトを作らないといけないの?
直接呼び出せばいいじゃん。
※初心者の下手な解釈です。
メインメソッドを自分の家と仮定して想像すると分かるかも?
物事を行うには家の中だと自由にできる。
ものを食べたり、お風呂に入ったり、などなど。
でもそれがほかの家(新しく作ったクラス)だとすると、玄関の鍵を持ってないから家の中に入れない。
クラスというのは、それぞれ鍵がかかっている。
そのため鍵を作成してほかの家でも中に入れるようにする。
この「鍵を作成する」というのが、プログラミングで言う「オブジェクトを」作成することに当たる。
鍵を作らないと、その家(クラス)の中にあるものは使えない。
鍵を作るってなんか泥棒みたいね。
例えが下手くそだからしょうがないの。
Javaはクラスとオブジェクトがあり、本来クラスはオブジェクト(鍵)を作らないと入れない。
でも最初に言った通り、メインメソッドはプログラムがまず初めに探すもの(自動で実行されるプログラム)。
つまりは自分の家の中だから鍵を作る必要がないということ。
だから、今までメインメソッドの中に直接書いてきたプログラムは、わざわざオブジェクトを作ったりはしなかった。
package JavaTakusanRenshu;
public class yobidashi {
public static void main(String[] args) { ←メインメソッド
int A = 5;
System.out.println(A);
}
}
注意点
まずは以下のコードを
package JavaTakusanRenshu;
public class yobidashi {
int A = 10;
public static void main(String[] args) { ←メインメソッド
System.out.println(A);
}
}
以下の記事でも述べたが、メインメソッドの中に書かないと、エラーを起こした。
参考:メインメソッドの項目を参照
以上のコードを実行してもエラーになる。
でも、「int A = 10;」というのは、よく見れば「public class yobidashi { }」の中にある。
つまり、メインメソッドがある「yobidashi」というクラスの中にある。
でもメインメソッド内ではない。
しつこくても何度も言うが、プログラムはまずメインメソッドを探す。
だから、メインメソッドの中に書かれていないから、いくらメインメソッドがある「yobidashiクラス」に書かれても蚊帳の外にあるのと同じこと。
だから、もし「int A = 10;」というデータを使いたかったら、同様にメインメソッド内にオブジェクトを作って呼んであげないといけない。
なんとなく理解できたでしょうか・・・
※また初心者の下手くそな解釈
要は、メインメソッドを家の中とすると、「int A = 10;」は「yobidashiクラス」という家の敷地内にあるものというところかな。
「int A = 10;」は家の外側にあるから、「int A = 10;」を使いたかったら家の鍵を開けないといけない。
自分の家(メインクラス)は内側から鍵が必要なタイプということにして・・・。
家の鍵は作らないと無いから、たとえ敷地内にあるものでもオブジェクト(鍵)を作る必要がある。
新しいクラスに作ったデータを使う方法(呼び出し方法)
「Student Maria = new Student();」と、オブジェクトの作成まで完了した。
最後に、新しいクラスで作ったデータを画面に表示させる方法を見ていく。
作ったクラスはこちら。
class Student{
String classNumber = “3-1”;
String subject = “math”;
double average = 82.5;
}
画面に表示させるには、お馴染みの「System.out.println( );」を使う。
この()の中に表示させるデータを書く。
オブジェクトの作成のところで、「Maria」というものの中にStudentクラスの要素がすべて入っていると言った。
Mariaに格納された内容を表示させたいから、まずは「Maria」と宣言する。
そして、表示させるデータを指定し、「.(ドット)」で繋ぐ。
データを指定するとは、変数名を書くということ。
例えば、所属クラスについて表示させたい場合は以下のようになる。
System.out.println(Maria.classNumber);
これを実行すると「classNumber」に格納されている「3-1」というデータが画面に表示される。
Mariaという中にあるStudentクラスのデータの内、「classNumber」を表示させると指定している形になる。
もし「教科(subject)」について表示させたかったら、「System.out.println(Maria.subject);」になる。
「平均(average)」だったら、「System.out.println(Maria.average);」
このようにして新しく作ったクラスに入力したデータを呼び出すことができる。
完成したコード
以上の事柄をまとめて完成したコードが以下。
package JavaTakusanRenshu;
public class yobidashi {
public static void main(String[] args) { ←メインメソッド
Student Maria = new Student();
System.out.println(Maria.classNumber);
}
}
class Student{
String classNumber = “3-1”;
String subject = “math”;
double average = 82.5;
}
ちなみに実行すると「3-1」が表示される。
「注意点」のところのコードの完成形
上の「注意点」のところで書いたエラーになってしまうコードを、オブジェクトを作成してエラーが出ないようにすると以下の書き方ができる。
package JavaTakusanRenshu;
public class yobidashi {
int A=10;
public static void main(String[] args) {
yobidashi Kazu = new yobidashi();
System.out.println(Kazu.A);
}
}
Kazuというオブジェクトをyobidashiクラスから作った。
そしてKazuの中にある「Aが10」というデータを表示させるようにしている。
ちなみに実行すると「10」が表示される。
最後に
長くなりそうだから、いったんここで切る。
オブジェクトを作らないといけない理由について、なかなか納得できなかったけど、やっと自分の中でスッキリしたと思う。
修正点があったらしれっと直そう・・・。
コメント