概要
プログラミングスクールを卒業して、転職活動中にProgateで主にJava、 MySQLを学習しています。
その際に、苦戦したところ、理解するために自分用のまとめとして書きます。
間違っていたらご指摘いただけると幸いです。
目次
- インスタンス
- インスタンスメソッド
- インスタンスフィールド
インスタンス
オブジェクトとも言われる。クラスと言うインスタンスの設計図をもとに作成される。
主に、インスタンスで作成するのは
・インスタンスフィールド(インスタンスの情報)
・インスタンスメソッド(インスタンスの動作)
この2つを、インスタンスのクラスに記述していき、メインメソッドで呼び出すイメージ。
インスタンスの生成
インスタンスを作成する際は
new クラス名();
これで作成する。例えば、Mainクラスの他に、Personクラスを作ったならば、
class Main{
public static void main (String[] args) {
new Person();
//インスタンスの作成
}
}
class Person{
}
と作り始める。
これでMainクラスの方でPersonというインスタンスができ、PersonクラスでPersonの詳細を作成する準備ができた。
インスタンスを変数に代入する
作成したnew クラス名();のインスタンスは変数に代入することができる。
クラス型 変数 = new クラス名();
例えば、Personクラスのインスタンスを、新たに設定する変数person1に入れようとするときは、
class Main{
public static void main (String[] args){
Person person1 = new Person(); //クラス型 変数 = new クラス型()
}
}
これで代入完了。
ちなみに、
class Main{
public static void main (String[] args){
Person person1 = new Person();
Person person2 = new Person();
Person person3 = new Person();
}
}
とすることで、インスタンスを複数作成することができる。
インスタンスメソッド
インスタンスの動作である、インスタンスメソッドを作成します。
インスタンスのメソッド名を記述して、メインメソッドで呼び出す。
public void インスタンスメソッド名() {
System.out.println("出力したい文章");
}
インスタンス(もしくはインスタンスを代入した変数).インスタンスメソッド名();
これだけではわかりづらいので、実際にPersonクラスで指定したhelloメソッドを、メインメソッドで呼び出す際の記述を下に書きました。
class Main{
public static void main (String[] args){
Person person1 = new Person();
Person person2 = new Person();
person1.hello(); //変数(インスタンス名).メソッド名();
person2.hello();
}
}
class Person{
public void hello() { //public void メソッド名();
System.out.println("こんにちは");
}
}
これでPersonクラスにある、helloメソッドを、Mainクラスで呼び出すことができます。
インスタンスフィールド
次にインスタンスの情報である、インスタンスフィールドを作成していきます。
インスタンスフィールドは情報を格納しておく変数といえるとのこと。(Progate様の説明より)
変数を設定する際はクラスの一番上に置くことも大事。
実際にPersonクラスに名前を入れるインスタンスフィールド(変数name)を設定します。
class Person{
public String name;
//public データ型 フィールド名;
}
書き方は
public データ型 フィールド名;
で記述します。
インスタンスフィールドへのアクセス
基本的にMainメソッドでインスタンスフィールドにアクセスしていく。
class Main{
public static void main (String[] args){
Person person1 = new Person();
person1.name = "田中";
System.out.println(person1.name);
}
}
class Person{
public String name;
}
これで、「田中」と出力できます。
複数作ることが可能。
class Main{
Person person1 = new Person();
Person person2 = new Person();
Person person3 = new Person();
person1.name = "田中";
person2.name = "藤田";
person3.name = "杉浦";
System.out.println(person1.name);
System.out.println(person2.name);
System.out.println(person3.name);
}
class Person {
public String name;
}
インスタンスメソッドの中からインスタンスフィールドにアクセス
インスタンスメソッド内からインスタンスフィールドにアクセスする際には、thisという変数を使います。
なくてもできたりしましたが、上記の場合にはしっかりつかいましょう。
class{
Person person1 = new Person();
person1.name = "田中";
//インスタンスフィールドへのアクセス
person1.hello();
//インスタンスメソッドの呼び出し
}
class Person{
public String name;
//インスタンスフィールド
public void hello(){
//インスタンスメソッド
System.out.println("私の名前は"+ this.name +"です");
}
}
また、thisはメソッドが呼び出された際に、呼び出したインスタンスの代わりをします。
これだけだと意味がわかりづらいので、実際に例を挙げます。
class{
Person person1 = new Person();
person1.name = "田中";
//インスタンスフィールドへのアクセス
person1.hello();
//インスタンスメソッドの呼び出し
}
class Person{
public String name;
//インスタンスフィールド
public void hello(){
//インスタンスメソッド
System.out.println("私の名前は"+ this.name +"です");
}
}
上記で言うと、person1というインスタンスがhelloというインスタンスメソッドを呼び出していますね。(person1.hello();の箇所ですね)
そのため、helloメソッドの中では、呼び出し元のperson1というインスタンスをthisで表しています。