Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職

メソッドを定義する

メソッドを定義する
[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) {
    Animal 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) {
    Animal a = new Animal();
    a.name = "トクジロウ";
    a.color = "ネズミ";
    System.out.println(a.getInfo());
  } // 結果:トクジロウはネズミ色のハムスターです。
}

オーバーロードを利用することで、このように、いわゆる省略可能なパラメーターも定義できるというわけです。

オブジェクト指向構文
class命令
new演算子
フィールドを定義する
static final修飾子
メソッドを定義する
コンストラクターを定義する
package宣言
import命令
import static命令
ネストしたクラスを定義する

Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職