※前回の講座がまだの人はこちらから
【Java入門⑧】カプセル化 ~初心者でも安心!基礎から学べるプログラミング講座~
メソッドとは
違う箇所で同じ処理を行いたい場合、同じ処理をそれぞれの箇所で記載する必要があります。
記載する箇所が少なければ良いですが、増えれば増える程コードは長くなる一方です。
無駄にコードが長くなれば、他の人がコードを見た時に、非常に読みづらいと感じます。
メソッドを使えば、同じ処理を一纏めにして、何度も書く必要がなくなります。
メソッドとは?
メソッドとは、モジュール(部品)や処理の塊だと思ってください。
ある程度まとまった処理をメソッド内に書き、そのメソッドを呼び出すことで、メソッド内の処理が実行されます。
メソッドには、入力値を受け取る「仮引数」と処理した結果を出力する「戻り値」が存在します。
例えば、ユーザーが入力した数字を3倍にするメソッドを作成したい場合、仮引数にユーザーが入力した値を入れ、戻り値に3倍にした結果を入れることになります。
メソッドの使い方
メソッドには2つの種類があります。
それぞれ「アクセス修飾子、戻り値の型、メソッド名、仮引数」を決めることで、メソッドを定義することができます。
インスタンスメソッド
インスタンスから呼び出せるメソッド。
主に、インスタンスのメンバ変数を用いた処理を定義する。
アクセス修飾子 戻り値の型 メソッド名(仮引数の型 仮引数名) {
処理;
return 戻り値;
}
戻り値の型には、Stringやintに加えてvoidを頻繁に使います。これは、戻り値が存在しない場合に使われる型になります。
仮引数とは、メソッドへの入力のことで、メソッド内で使える変数になります。ここでも、仮引数の型は指定します。さらに、仮引数は複数設定することができ、カンマで区切ります。
<使用例>
public class Car { private String model; private int height; private int width; private int fuel; //モデルを出力する public String getModel() { return model; } //モデルを入力する public void setModel(String model) { this.model = model; } //車高を出力する public int getHeight() { return height; } //車高を入力する public void setHeight(int height) { this.height = height; } //車幅を出力する public int getWidth() { return width; } //車幅を入力する public void setWidth(int width) { this.width = width; } //燃料を出力する public int getFuel() { return fuel; } //燃料を入力する public void setFuel(int fuel) { this.fuel = fuel; } //各出力メソッドを使い、詳細を表示 public void show() { System.out.println("*" + getModel() + "の詳細*"); System.out.println("モデル名:" + getModel()); System.out.println("車高 :" + getHeight()); System.out.println("車幅 :" + getWidth()); System.out.println("燃料容量:" + getFuel()); } }
メソッドの作成ができたので、メソッドを呼び出して処理を実行します。
クラス名 インスタンス名 = new クラス名();
インスタンス名.メソッド名(実引数);
インスタンスメソッドは、インスタンス名の後ろにメソッド名をドットで連結すれば実行することができます。また、実行するメソッドに仮引数が設定されていれば、実引数を指定する必要があります。(値でも変数でも可能)
仮引数は複数設定できると言いましたが、実引数は仮引数と同じ個数指定しなければなりません。さらに、仮引数で指定している型でないと、渡せずエラーになるため注意が必要です。
<使用例>
public class CarApp { public static void main(String[] args) { Car car1 = new Car(); Car car2 = new Car(); //各setメソッドを使い、car1のメンバ変数へ代入 car1.setModel("車1号"); car1.setHeight(1400); car1.setWidth(1600); car1.setFuel(90); //各setメソッドを使い、car2のメンバ変数へ代入 car2.setModel("車2号"); car2.setHeight(1900); car2.setWidth(1800); car2.setFuel(100); //car1の詳細を表示 car1.show(); //car2の詳細を表示 car2.show(); } }
<実行結果>
スタティックメソッド
インスタンスを生成しなくてもクラスから直接呼び出せるメソッド。
アクセス修飾子 static 戻り値の型 メソッド名(仮引数の型 仮引数名) {
処理;
return 戻り値;
}
基本的にインスタンスメソッドと書き方は変わりませんが、アクセス修飾子と戻り値の型の間にstaticを書きます。
メソッドの呼び出しは、インスタンスを生成するステップが必要ありません。
クラス名.メソッド名(実引数)
また、スタティックメソッドを作成したクラス内で呼び出す場合は、クラス名の指定も不要で、メソッド名のみで呼び出せます。
<使用例>
public class MaxCalc { public static int max(int a, int b, int c) { int max = a; if(max < b) { max = b; } if(max < c) { max = c; } return max; } public static void main(String[] args) { int[] japaneseScore = new int[3]; japaneseScore[0] = 84; japaneseScore[1] = 92; japaneseScore[2] = 76; int maxJapaneseScore = max(japaneseScore[0], japaneseScore[1], japaneseScore[2]); System.out.println("国語の最大点数は" + maxJapaneseScore + "点です。"); } }
<実行結果>
まとめ
メソッドを使うことで、処理をある程度の纏まりにできて、コードが綺麗になります。
今まで何度も書いていた処理も、メソッドを使って共通化することで、何度も書く必要がなくなります。
過去に自分が書いたコードを見直してみて、メソッドが使えそうな部分は、メソッドに書き換えてみてください。