メソッドを定義する
[modifier] rtype name(type args,…) {
statements
}
modifier:修飾子
rtype:戻り値の型
name:メソッド名
type:引数の型
args:引数
statements:メソッドの本体
メソッドは、クラスにおける動作、処理(手続き)を表す要素です。
たとえば以下は、Animalクラスの文字列表現を返すgetInfoメソッドの例です。
Animal.java
- package com.example.mynavi.object;
- public class Animal {
- String name = "ポチ";
- String color = "White";
- public String getInfo(String format) {
- return String.format(format, this.name, this.color);
- }
- }
このAnimalクラスをインスタンス化し、getInfoメソッドにアクセスするには、以下のようにします。
ClassMethod.java
- package com.example.mynavi.object;
- public class ClassMethod {
- public static void main(String[] args) {
- var a = new Animal();
- a.name = "トクジロウ";
- a.color = "ネズミ";
- System.out.println(a.getInfo("%sは%s色のハムスターです。"));
- } // 結果:トクジロウはネズミ色のハムスターです。
- }
引数
メソッドに対して呼び出し元から渡せるパラメーター情報のことを引数と言います。引数は「データ型 仮引数名」の形式で指定します。仮引数は、メソッドの中でのみ参照できる変数です。getInfoメソッドであれば、String型の引数formatをひとつだけ指定していますが、カンマ区切りで複数の引数を指定することもできます。
- public String getInfo(String format, boolean flag) { ... }
また、型名のうしろに「…」を付与することで、可変長引数を表すこともできます。可変長引数とは、呼び出し側で自由に引数の数を変えられる引数のことです。たとえば以下は、引数の総和を求めるsumメソッドの例です。
Util.java
- package com.example.mynavi.object;
- public class Util {
- public static double sum(double... values) {
- double result = 0;
- for (double value : values) {
- result += value;
- }
- return result;
- }
- }
sumメソッドは、以下のように呼び出せます(static修飾子については、「修飾子」節を参照してください)。
ClassVariable.java
- package com.example.mynavi.object;
- public class ClassVariable {
- public static void main(String[] args) {
- System.out.println(Util.sum(10, 30, 50)); // 結果:90.0
- System.out.println(Util.sum(10, 30, 50, 70)); // 結果:160.0
- }
- }
可変長引数は、内部的には配列として処理されます。サンプルでは引数valuesを拡張for命令で順に取り出し、順に足しこんでいるわけです。
戻り値
メソッドの処理結果を表すのが、戻り値の役割です。「return 戻り値」の形式で戻り値を呼び出し元に返せます。メソッドの実行は、return命令によって終了しますので、その後方の処理を書いても無視される点に注意してください。
特に、呼び出し元に結果を返す必要がない場合には、return命令は省略することもできます。その場合には、戻り値の型には戻り値がないことを意味するvoidを指定してください。
- public void show(String format) { ... }
現在のインスタンスを参照する – thisキーワード
thisキーワードは、現在のインスタンスを指します。たとえば、getInfoメソッドであれば、以下の部分です。this.name、this.colorという記述によって、現在のインスタンスにおけるname、colorフィールドの値を参照しています。
- public String getInfo(String format) {
- return String.format(format, this.name, this.color);
- }
メソッドのオーバーロード
Javaでは、「同じ名前で、引数の型、並びだけが異なる」メソッドを複数定義することもできます。これをメソッドのオーバーロードと言います。 例えば以下は、先ほども登場したAnimal#getInfoメソッドの、引数なしバージョンを定義した例です。
Animal.java
- class Animal {
- String name = "ポチ";
- String color = "White";
- public String getInfo() {
- return this.getInfo("%sは%s色のハムスターです。");
- }
- public String getInfo(String format) {
- return String.format(format, this.name, this.color);
- }
- }
確かに、引数を省略したgetInfoメソッドが正しく呼び出せていることも確認してください。
ClassMethod2.java
- package com.example.mynavi.object;
- public class ClassMethod2 {
- public static void main(String[] args) {
- var a = new Animal();
- a.name = "トクジロウ";
- a.color = "ネズミ";
- System.out.println(a.getInfo());
- } // 結果:トクジロウはネズミ色のハムスターです。
- }
オーバーロードを利用することで、このように、いわゆる省略可能なパラメーターも定義できるというわけです。
- オブジェクト指向構文_目次
- class命令
- new演算子
- フィールドを定義する
- static final修飾子
- メソッドを定義する
- コンストラクターを定義する
- レコード
- package宣言
- import命令
- import static命令
- ネストしたクラスを定義する
- モジュール
監修