初心者から専門家まで: Java メソッドの完全ガイド

目次

1. 手法の概念と使用法

1.1 メソッドとは

1.2 メソッドの定義

1.3 メソッド呼び出し

 1.4 実パラメータと仮パラメータの関係

1.5 戻り値のないメソッド

1.6 手法の意義 

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

2.1 メソッドのオーバーロードの実装

2.2 メソッドのオーバーロードの重要性

2.3 メソッドのシグネチャ


 

 

1. 手法の概念と使用法

1.1 メソッドとは

メソッドはコードの断片です。特定の機能を実現するためのC言語「関数」に似ています。関連するコードをメソッドに入力し、メソッドに機能を完了させます。これには、メソッドの定義、呼び出し、実行が含まれます。

いくつかの簡単な例を挙げると、次のようになります。

  1. 食べ物の調理: 食べ物の調理を方法に例えます。特定の料理を調理する手順を含むレシピ (メソッド定義) があります。同じ料理を作りたいとき、材料を準備し、レシピの指示に従って調理し(メソッドと呼びます)、最終的においしい料理が得られます。

  2. 呼び出し: 呼び出しをメソッドと比較します。誰かと話したいときは、相手の電話番号 (メソッド パラメータ) を入力し、ダイヤル キーを押します (通話メソッド)。電話ネットワークはあなた同士を接続し、通信したりメッセージを伝えたりすることができます。

  3. 洗濯: 洗濯を方法に例えます。洗濯物を洗う必要がある場合は、洗濯物を洗濯機に入れ(メソッドパラメータ)、適切なプログラムと洗剤を選択し(メソッド呼び出し)、洗濯機を起動します(メソッド実行)。最終的にはきれいな洗濯物が得られます。

これらの例では、メソッドは特定のタスクを実行するための再利用可能な方法を提供します。これらは入力 (パラメーター) を受け取り、一連の操作を実行して、出力 (結果) を生成します。このような抽象化により、プログラミングでメソッドを使用するのと同じように、アクションをより効率的に整理して再利用できるようになります。


1.2 メソッドの定義

メソッド定義は次のコンポーネントで構成されます。

  1. アクセス修飾子 (Access Modifier) : 他のクラスがメソッドにアクセスできるかどうかを制御するために使用されます。一般的なアクセス修飾子には、public、private、protected、default (修飾子を使用しない) などがあります。

  2. 戻り値の型 (Return Type) : メソッド実行後に返されるデータ型を指定します。メソッドが値を返さない場合は、キーワード void を使用できます。

  3. メソッド名 (メソッド名) : メソッドを一意に識別するために使用される名前。メソッド名は説明的で、メソッドの機能を明確に表現する必要があります。

  4. パラメータ リスト (パラメータ リスト) : メソッドによって受け入れられる入力パラメータを指定します。パラメータはメソッドの実行に必要なデータであり、複数のパラメータが存在する可能性があり、各パラメータにはデータ型と名前があります。

  5. メソッド本体: メソッドによって実行される操作を定義する実際のコード ブロックが含まれます。メソッド本体は一対の中括弧 {} で囲まれており、一連のステートメントとロジックが含まれています。

  6. Return ステートメント: メソッドに戻り値の型がある場合、メソッドは return ステートメントを使用して呼び出し元に結果を返すことができます。return ステートメントは、メソッドの実行を途中で終了することもできます。

次のようなコードブロックで実装されます。

// 方法定义
修饰符 返回值类型 方法名称([参数类型 形参 ...]){
方法体代码;
[return 返回值];
}

たとえば、簡単なコード:

public int Sum(int num1, int num2) {
        int sum = num1 + num2;
        return sum;
    }

上記の例では、メソッド名は「Sum」、戻り値の型は int (整数を返します) です。これには 2 つのパラメータ num1 と num2 があり、どちらも整数型です。メソッド本体のコードは、num1 と num2 を加算し、結果を sum 変数に格納し、return ステートメントを使用して sum の値を返します。

予防:

1. 修飾子: この段階ではパブリック静的固定コロケーションを直接使用します。
2. 戻り値の型: メソッドに戻り値がある場合、戻り値の型は返されるエンティティの型と一致する必要があり、戻り値がない場合は void として記述する必要があります。
3.メソッド名:小さなキャメルケースで命名
4. パラメータリスト: メソッドにパラメータがない場合は、() 内に何も記述しません。パラメータがある場合は、パラメータの種類を指定し、複数のパラメータをカンマで区切る必要があります
5. メソッド本体: メソッド内で実行されるステートメント
6. Javaではメソッドはクラス内に記述する必要があります
7. Javaではメソッドをネストして定義できません
8. Javaにはメソッド宣言がありません

 

1.3 メソッド呼び出し

メソッドを呼び出すには、次の形式でコードを記述する必要があります。

返回值类型 变量名 = 方法名(参数列表);

具体的な手順は次のとおりです。

  1. メソッドの戻り値の型を使用して、メソッドの戻り結果を格納するために使用される変数を宣言します。メソッドに戻り値がない場合 (つまり、戻り値の型が void の場合)、変数を宣言する必要はありません。

  2. 等号の左側の変数名に、後続のコードで参照できるように、変数に適切な名前を付けます。

  3. 等号の右側に、呼び出すメソッドの名前を書き、メソッドに必要なパラメータを括弧内に渡します。メソッド定義に従って、正しいパラメータの型と番号を渡すようにしてください。

  4. メソッドを呼び出した後、メソッドは定義された操作を実行し、結果を返します (戻り値がある場合)。

簡単なコード例は次のとおりです。 2 つの数値の合計を求めます。

// 定义一个名为Sum的方法,计算两个整数的和
public static int calculateSum(int num1, int num2) {
    int sum = num1 + num2;
    return sum;
}

// 在主程序中调用Sum方法
public static void main(String[] args) {
    int result = calculateSum(3, 5); // 调用calculateSum方法,并传入参数3和5
    System.out.println("Sum: " + result); // 打印结果:Sum: 8
}

出力コードは次のとおりです。 

上の例では、2 つの整数の合計を計算する「calculateSum」というメソッドを定義しました。メイン プログラムの main メソッドで、calculateSum メソッドを呼び出し、パラメータ 3 と 5 を渡します。メソッドの実行後、返された結果 8 が result 変数に代入され、print ステートメントを通じてコン​​ソールに出力されます。 

 予防:

1. メソッドが定義されている場合、メソッドのコードは実行されず、呼び出されたときにのみ実行されます。
2. メソッドは複数回呼び出すことができます。

 

 1.4実パラメータと仮パラメータの関係

メソッドの定義および呼び出しには、仮パラメータ(仮パラメータ)と実パラメータ(実パラメータ)の 2 種類のパラメータがあります。

  1. 仮パラメータ(仮パラメータ)とは、メソッド定義内で宣言され、メソッド呼び出し時に渡される値を受け取るパラメータです。仮パラメータはメソッド内のローカル変数と同等であり、メソッド内でのみ有効です。仮パラメータは、メソッドの定義時にデータ型と名前を指定します。
  2. 実パラメータ (引数) は、メソッドが呼び出されたときにメソッドに渡される具体的な値または変数です。実パラメータはメソッド定義の仮パラメータの順序で渡され、仮パラメータの型と一致する必要があります。実際のパラメータは、定数、変数、または式の値です。
  3. メソッドが呼び出されると、実パラメータの値が対応する仮パラメータに渡されます。このようにして、メソッド内で、渡された実際のパラメータ値を使用して仮パラメータを操作できます。

実際の例で理解してみましょう。

車を製造する工場があり、車を生産する自動車生産ラインがあるとします。この例では:

- 形式パラメータ(形式パラメータ):自動車の設計図と仕様書。設計図や仕様書には、自動車の寸法、付属品要件、組み立て順序などの情報が含まれており、これらはメソッド定義で宣言されたパラメータに相当します。この情報は実際の車ではなく、生産される車を説明するためにのみ使用されます。

- Actual Parameters (実際のパラメータ): 設計図と仕様に従って実際に生産した車。これらの実車は、メソッド呼び出し時にメソッドに渡される特定の値や変数に相当する設計図や仕様書に従って、お客様が加工、組み立てします。設計図や仕様書に基づいて、部品や組立工具を使って段階的に自動車を加工・組み立てし、最終的に実際の自動車を完成させます。

設計図と仕様書を従業員に渡すと、従業員はその情報に基づいて車の製造を開始します。実際の部品や工具を使用して、設計図上のサイズや付属品の要件に従って、所定の組み立て順序に従って加工および組み立てを行います。その際、設計図や仕様書が形式的なパラメータとなり、実際の量産車が現実的なパラメータとなります。実際の設計図や仕様書に基づいて作業員が加工・組立を行い、最終的に実車が製作されます。

以下に示すように:

 

それでも上記の例を引用します

// 定义一个名为Sum的方法,计算两个整数的和
public static int calculateSum(int num1, int num2) {
    int sum = num1 + num2;
    return sum;
}

// 在主程序中调用Sum方法
public static void main(String[] args) {
    int result = calculateSum(3, 5); // 调用calculateSum方法,并传入参数3和5
    System.out.println("Sum: " + result); // 打印结果:Sum: 8
}

 定義された CalculesSum メソッドでは、num1 と num2 は仮パラメータであり、メイン関数 main に格納されている 2 つの数値 3 と 5 は実パラメータです。


実パラメータの値は常に仮パラメータにコピーされ、仮パラメータと実パラメータは本質的に 2 つのエンティティです。

コードで説明します : 2 つの整数を交換します

public class TestMethod {
public static void main(String[] args) {
    int a = 10;
    int b = 20;
    swap(a, b);
System.out.println("main: a = " + a + " b = " + b);
 }

public static void swap(int x, int y) {
    int tmp = x;
    x = y;
    y = tmp;
    System.out.println("swap: x = " + x + " y = " + y);
   }
}
// 运行结果
swap: x = 20 y = 10
main: a = 10 b = 20
スワップ 関数の交換後、仮パラメータ x yの値が 変化していること がわかりますが、 メイン メソッドでは a b は交換前の値のままです。交換が成功しません。 なぜ?
実パラメータ a bは mainメソッドの 2 つの変数 であり、それらの空間は mainメソッドのスタック(特別なメモリ空間)内にあり、仮パラメータxy は  swapメソッドの 2 つの変数であるため、値はxyスワップメソッドの実行中にスタック内にあるため、実パラメータabと仮パラメータxyは無関係な 2 つの変数です。スワップメソッドが呼び出されるときは、値のみが返されます。実パラメータbaxyに渡されるため、仮パラメータxyに対する操作は実パラメータaとb に影響を与えません。

 


1.5 戻り値のないメソッド

戻り値のないメソッドとは、メソッド定義において、メソッド宣言の戻り値の型が「void」であること、つまりメソッドが値を返さないことを意味します。

public void printMessage(String message) {
    System.out.println(message);
}

上記の例では、`printMessage` は値を返さないメソッドです。これは文字列パラメータ「message」を受け取り、その文字列をコンソールに出力します。

戻り値のないメソッドが呼び出された場合、対応する操作はメソッド内で実行されますが、呼び出し元には値が返されません。上記の例では、`printMessage` メソッドが呼び出され、文字列引数が渡されると、メソッドは文字列を出力しますが、結果は返しません。

値を返さないメソッドは通常、結果を返さずに何らかのアクションを実行するか、特定のタスクを完了するために使用されます。たとえば、情報の印刷、データの更新、通知の送信などです。このようなメソッドは、プログラムの実行に対する「副作用」として機能します。つまり、プログラムの状態を変更するか、特定の操作を実行しますが、後続の計算に使用できる戻り値は生成しません。

値を返さないメソッドを呼び出す場合、通常はメソッドの実行の影響のみを考慮し、メソッドの戻り結果を受け取る必要はありません。

知らせ:

  1. 仮パラメータの名前は任意に選択でき、メソッドには影響しません。
  2. 仮パラメータは、メソッドの定義時に使用する必要がある単なる変数であり、メソッドの呼び出し時に渡される値を保存するために使用されます
  3. Java では 、実パラメータの値は常に仮パラメータにコピーされ、仮パラメータと実パラメータは本質的に 2 つのエンティティです。

 

1.6 手法の意義 

1. モジュール化とコードの再利用: メソッドは、一連の関連する操作をカプセル化して、独立したモジュールを形成します。これにより、コードの可読性、保守性、再利用性が向上します。

2. 抽象化とカプセル化: メソッドを使用すると、開発者はメソッド内のプログラムのロジックと実装の詳細を非表示にし、必要なインターフェイスと関数のみを外部呼び出し元に公開できます。

3. コードの保守性と可読性の向上: メソッドを使用すると、コードが複数の小さな独立した機能ブロックに分解され、コードの理解と保守が容易になります。

4. コードの柔軟性とスケーラビリティの向上: メソッドはパラメーターを受け入れて結果を返すことができるため、コードはさまざまな入力に応じてさまざまな出力を生成できます。

5. オブジェクト指向機能の実装: メソッドは、オブジェクト指向プログラミングの基本構成要素の 1 つです。メソッドを通じて、カプセル化、継承、ポリモーフィズムなどのオブジェクト指向機能を実現できます。

結論として、メソッドはオブジェクト指向プログラミングにおいて重要な役割を果たします。これらは、コードをモジュール式で保守可能、再利用可能な単位に整理するのに役立ち、コードの可読性、拡張性、保守性が向上します。メソッドはオブジェクト指向機能を実装するための基礎でもあり、オブジェクト指向プログラミングをより有効に活用できるようになります。


 

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

2.1 メソッドのオーバーロードの実装

 メソッドのオーバーロードとは、同じクラス内に同じ名前で異なるパラメーター リストを持つ複数のメソッドを定義することを指します。メソッドのオーバーロードにより、異なるパラメーターの型と量に応じて対応するメソッドを呼び出すことができ、同様の機能を持つ複数のメソッドを実現できます。

コード例は次のとおりです。

public class Calculator {
    public static int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }

    public int add(int a, int b, int c) {
        return a + b + c;
    }
}

上記のコードでは、 Calculatorクラスはaddという名前の 3 つのメソッドを定義しています。これらのメソッドは同じ名前ですが、パラメーター リストが異なります。最初のaddメソッドは 2 つの整数を引数として受け取り、それらの合計を返します。2 番目のaddメソッドは、2 つの倍精度浮動小数点数をパラメータとして受け取り、それらの合計を返します。3 番目のaddメソッドは 3 つの整数をパラメータとして受け取り、それらの合計を返します。

メソッドのオーバーロードを通じて、ニーズに応じて加算操作を実行するための適切なメソッドを選択できます。例えば:

Calculator calculator = new Calculator();
int result1 = calculator.add(2, 3);                  // 调用第一个add方法,返回5
double result2 = calculator.add(2.5, 3.5);           // 调用第二个add方法,返回6.0
int result3 = calculator.add(2, 3, 4);               // 调用第三个add方法,返回9

異なるパラメータの型と量を渡すことで、適切なメソッドを正しく呼び出すことができ、異なるパラメータに基づいて操作を柔軟に追加できるようになります。

知らせ:

1. メソッド名は同じである必要があります
2. パラメータリストが異なっている必要があります(パラメータの数が異なる、パラメータのタイプが異なる、タイプの順序が異なる必要があります)。
3. 戻り値の型が同じかどうかは関係ありません
// 注意:两个方法如果仅仅只是因为返回值类型不同,是不能构成重载的
public class TestMethod {
public static void main(String[] args) {
    int a = 10;
    int b = 20;
    int ret = add(a, b);
    System.out.println("ret = " + ret);
}

public static int add(int x, int y) {
      return x + y;
}

public static double add(int x, int y) {
     return x + y;
}
    }
// 编译出错
Test.java:13: 错误: 已在类 Test中定义了方法 add(int,int)
public static double add(int x, int y) {
                ^
1 个错误


 

2.2 メソッドのオーバーロードの重要性

  1. コードの可読性と保守性の向上

  2. コードの構造と設計を最適化する

  3. 呼び出しも使いやすさも簡単

  4. コードの互換性を向上させる

つまり、メソッドのオーバーロードは、オブジェクト指向プログラミングにおいて非常に重要であり、より柔軟で、読みやすく、保守しやすいコード記述方法を提供し、コードの設計と呼び出しがより便利で理解しやすくなります。


2.3 メソッドのシグネチャ

Java では、同じ名前の 2 つの識別子を同じスコープ内で定義できないことがわかっています。たとえば、同じ名前の 2 つの変数を 1 つのメソッド内で定義することはできません。では、なぜ同じメソッド名のメソッドを1 つのクラス内で定義できるのでしょうか。

これには、メソッド シグネチャ (コンパイラがコンパイルして変更した後のメソッドの最終的な名前) が関係します。

特定のメソッド:メソッド の完全な名前を形成するメソッドの完全なパス名 + パラメータ リスト + 戻り値の型

たとえば、次のコード:

public class TestMethod {
    public static int add(int x, int y){
    return x + y;
   }
    public static double add(double x, double y){
       return x + y;
   }
    public static void main(String[] args) {
           add(1,2);
           add(1.5, 2.5);
   }
}

上記のコードをコンパイルした後、JDKに付属のjavap逆アセンブリ ツールを使用して表示します。具体的な操作は次のとおりです。

1. まずプロジェクトをコンパイルして、 .class バイトコード ファイルを生成します。
2. コンソールで、表示する .classが 存在するディレクトリを入力します。
3. 入力: javap -v バイトコード ファイル名 

 

メソッド シグネチャ内のいくつかの特殊記号の説明:

 


 

さて、これで終わりですが、何か間違っているところがあればコメント欄でご指摘ください、ありがとうございます。

作成するのは簡単ではありませんが、できれば3回サポートしてください。ノタバギユウヒトも同意するだろう。

 

 

おすすめ

転載: blog.csdn.net/LHY537200/article/details/132229070