1. 序章

Javaでは、メソッドは、アプリケーションのビジネスロジックを定義する場所です。 これらは、オブジェクトに含まれるデータ間の相互作用を定義します。

このチュートリアルでは、 Javaメソッドの構文、メソッドシグネチャの定義、およびメソッドを呼び出してオーバーロードする方法について説明します。

2. メソッド構文

まず、メソッドは6つの部分で構成されます。

  • アクセス修飾子:オプションで、メソッドにアクセスできるコードを指定できます
  • 戻りタイプ:メソッドによって返される値のタイプ(存在する場合)
  • メソッド識別子:メソッドに付ける名前
  • パラメータリスト:メソッドの入力のオプションのコンマ区切りリスト
  • 例外リスト:メソッドがスローできる例外のオプションのリスト
  • 本文:ロジックの定義(空にすることができます)

例を見てみましょう:

 

Javaメソッドのこれら6つの部分のそれぞれを詳しく見てみましょう。

2.1. アクセス修飾子

アクセス修飾子を使用すると、メソッドにアクセスできるオブジェクトを指定できます。 アクセス修飾子には、 public、protected、private 、およびdefault( package-private とも呼ばれます)の4つがあります。

メソッドには、アクセス修飾子の前後に静的キーワードを含めることもできます。 これは、メソッドがインスタンスではなくクラスに属していることを意味します。したがって、クラスのインスタンスを作成せずにメソッドを呼び出すことができます。 static キーワードのないメソッドはインスタンスメソッドと呼ばれ、クラスのインスタンスでのみ呼び出すことができます。

パフォーマンスに関しては、静的メソッドはクラスのロード中に1回だけメモリにロードされるため、メモリ効率が高くなります。

2.2. 返品タイプ

メソッドは、呼び出し元のコードにデータを返すことができます。 メソッドはプリミティブ値またはオブジェクト参照を返すことができます。または、戻り型として void キーワードを使用すると、何も返さないことができます。

voidメソッドの例を見てみましょう。

public void printFullName(String firstName, String lastName) {
    System.out.println(firstName + " " + lastName);
}

return型を宣言する場合は、メソッド本体でreturnステートメントを指定する必要があります。 return ステートメントが実行されると、メソッド本体の実行が終了し、さらにステートメントがある場合、これらは処理されません。

一方、 void メソッドは値を返さないため、returnステートメントはありません。

2.3. メソッド識別子

メソッド識別子は、メソッド仕様に割り当てる名前です。 わかりやすくわかりやすい名前を使用することをお勧めします。 メソッド識別子は最大65536文字(ただし長い名前)にすることができます。

2.4. パラメータリスト

メソッドの入力値は、括弧で囲まれたパラメーターリストで指定できます。 メソッドには、コンマで区切られた0〜255のパラメーターを含めることができます。 パラメータは、オブジェクトプリミティブ、または列挙にすることができます。 メソッドパラメータレベルでJavaアノテーションを使用できます(たとえば、Springアノテーション@RequestParam)。

2.5. 例外リスト

throws 句を使用して、メソッドによってスローされる例外を指定できます。 チェック済み例外の場合、コードを try-catch句で囲むか、メソッドシグネチャにthrows句を指定する必要があります。

それでは、チェックされた例外をスローする、以前のメソッドのより複雑なバリアントを見てみましょう。

public void writeName(String name) throws IOException {
    PrintWriter out = new PrintWriter(new FileWriter("OutFile.txt"));
    out.println("Name: " + name);
    out.close();
}

2.6. メソッド本体

Javaメソッドの最後の部分は、実行するロジックを含むメソッド本体です。メソッド本体では、必要な数のコード行を記述できます。または、コードをまったく記述できません。 staticメソッドの場合。 メソッドがreturn型を宣言する場合、メソッド本体にはreturnステートメントが含まれている必要があります。

3. メソッドシグネチャ

その定義によると、メソッドシグネチャは、メソッドの名前とパラメータリストの2つのコンポーネントのみで構成されています。

それでは、簡単なメソッドを書いてみましょう。

public String getName(String firstName, String lastName) {
  return firstName + " " + middleName + " " + lastName;
}

このメソッドのシグネチャはgetName(String firstName、String lastName)です。

メソッド識別子は任意の識別子にすることができます。 ただし、一般的なJavaコーディング規則に従う場合、メソッドIDは小文字の動詞であり、その後に形容詞や名詞を続けることができます。

4. メソッドの呼び出し

それでは、Javaでメソッドを呼び出す方法を見ていきましょう。 前の例に従って、これらのメソッドがPersonNameというJavaクラスで囲まれていると仮定します。

public class PersonName {
  public String getName(String firstName, String lastName) {
    return firstName + " " + middleName + " " + lastName;
  }
}

getName メソッドはインスタンスメソッドであり、 static メソッドではないため、メソッド getName を呼び出すには、のインスタンスを作成する必要があります。クラスPersonName

PersonName personName = new PersonName();
String fullName = personName.getName("Alan", "Turing");

ご覧のとおり、作成したオブジェクトを使用してgetNameメソッドを呼び出します。

最後に、静的メソッドを呼び出す方法を見てみましょう。 静的メソッドの場合、呼び出しを行うためにクラスインスタンスは必要ありません。 代わりに、名前の前にクラス名を付けてメソッドを呼び出します。

前の例の変形を使用してデモンストレーションしましょう:

public class PersonName {
  public static String getName(String firstName, String lastName) {
    return firstName + " " + middleName + " " + lastName;
  }
}

この場合、メソッド呼び出しは次のとおりです。

String fullName = PersonName.getName("Alan", "Turing");

5. メソッドのオーバーロード

Javaでは、 2つ以上のメソッドを、同じ識別子で異なるパラメーターリスト(異なるメソッドシグネチャ)にすることができます。 この場合、メソッドがオーバーロードされていると言います。 例を見てみましょう:

public String getName(String firstName, String lastName) {
  return getName(firstName, "", lastName);
}

public String getName(String firstName, String middleName, String lastName) {
  if (!middleName.isEqualsTo("")) {
    return firstName + " " + lastName;
  }
  return firstName + " " + middleName + " " + lastName;
}

メソッドのオーバーロードは、同じ機能の簡略化されたバージョンを実装するメソッドを持つことができる例のような場合に役立ちます。

最後に、優れた設計習慣は、オーバーロードされたメソッドが同様に動作することを確認することです。 そうしないと、同じ識別子を持つメソッドが異なる方法で動作する場合、コードが混乱します。

6. 結論

このチュートリアルでは、Javaでメソッドを指定するときに関係するJava構文の部分について説明しました。

特に、アクセス修飾子、リターンタイプ、メソッドID、パラメーターリスト、例外リスト、およびメソッド本体について説明しました。 次に、メソッドシグネチャの定義、メソッドの呼び出し方法、およびメソッドのオーバーロード方法を確認しました。

いつものように、ここに表示されるコードは、GitHubから入手できます。