メソッドとはコードの断片であり、C 言語の「関数」に似ています。機能は次のとおりです:
1. コードをモジュール形式で編成できます (コード サイズが比較的複雑な場合)。
2. コードの再利用が可能になります。 、1 つのコードを複数の位置で使用できます。
3. コードを理解しやすく、よりシンプルにします。
4. 車輪の再発明をせずに、開発のために既存のメソッドを直接呼び出します。
定義形式:
例: 複数の項の階乗の合計を求める関数を作成します
public class TeseDemo220424 { // 计算某一个数的阶乘 public static int func(int n){ int ret = 1; for(int i = 1;i <= n;i++){ ret *= i; } return ret; } // 计算前多少项阶乘之和 public static int func1(int k){ int sum = 0; for(int i = 1;i <= k;i++){ sum += func(i); } return sum; } public static void main(String[] args) { // 写函数来求阶乘之和 Scanner myscanner = new Scanner(System.in); System.out.println("请输入你想要求取前多少项的阶乘的和:"); int num = myscanner.nextInt(); int sum = func1(num); System.out.println("前 " + num + "项的阶乘和为" + sum); } }
Note:
1. 修飾子: この段階では、public static の固定組み合わせが直接使用されます (main メソッドが public static であるため、その中で呼び出せるのは static メソッドのみです)。
2. 戻り値の型: メソッドに戻り値がある場合、戻り値の型は返されるエンティティの型と一致する必要があり、戻り値がない場合は void として記述する必要があります。
3. メソッド名: 名前には小さなキャメルケースを使用します。
4. パラメータリスト: メソッドにパラメータがない場合は()内に何も記述しません、パラメータがある場合はパラメータの種類を指定する必要があります複数のパラメータはカンマで区切ります。
5. メソッド本体: メソッド内で実行されるステートメント。
6. Java では、メソッドはクラス内に記述する必要があります。
7. Java では、メソッドをネストすることはできません。
8. Java にはメソッド宣言がありません。 (宣言と定義は区別しません)
呼び出し処理:
メソッドの呼び出し—>パラメータの受け渡し—>メソッドアドレスの検索—>呼び出されたメソッドを実行するメソッド本体—>呼び出されたメソッドが終了して戻ります—>メインの呼び出しメソッドに戻って実行を継続します
Image:
#注: 1. メソッドが定義されている場合、メソッドのコードは実行されません。メソッドが呼び出されたときにのみ実行されます。 2.メソッドは複数回呼び出すことができます。 1.4. 実パラメータと仮パラメータの関係 (重要) 仮パラメータと実パラメータの関係については、誰もがよく知っているはずです。仮パラメータは実パラメータの一部であり、一時的なコピーが作成されるため、仮パラメータを変更しても実パラメータには影響しません。 具体的な理由の説明: (関数スタック フレームに関連する特定の問題はより複雑であるため、ここで簡単に説明します) つまり、図からわかるように、値で呼び出す場合、仮パラメータと実パラメータの値は同じ空間にまったく格納されないため、互いに干渉することはありません。実際のパラメータに影響を与えるために仮パラメータを変更する場合、それはアドレスによる呼び出しでなければなりませんが、Java にはアドレスによる呼び出しのようなものはありません。解決策は参照を使用することだけです (後で詳しく説明します)。 )。 2. メソッドのオーバーロード 2.1. メソッドのオーバーロードが必要な理由public class TestDemo220426 { public static int addInt(int x,int y){ return x + y; } public static double addDouble(double x,double y){ return x + y; } public static void main(String[] args) { int a = 10; int b = 10; int ret = addInt(a,b); double c = 11.1; double d = 12.1; double ret1 = addDouble(c,d); } }
public class TestDemo220426 { 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) { int a = 10; int b = 10; int ret = add(a,b); System.out.println(ret); double c = 11.1; double d = 12.1; double ret1 = add(c,d); System.out.println(ret1); } }
public static int func(int num){ if(num == 1){ return 1; } return num*func(num - 1); } public static void main(String[] args) { // 递归求阶乘 Scanner scan = new Scanner(System.in); System.out.println("请输入一个数:"); int num = scan.nextInt(); int ret = func(num); System.out.println("阶乘为:" + ret); } }
在这里我们以求一个数的阶乘的代码为例来分析一个递归的过程:
递归的过程其实不复杂,看成两个部分,一个是递出去,而是归回来,上面的蓝色箭头是递的过程,红色箭头是归的过程。
按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)
public class TestDemo220427 { public static void myprint(int num){ if(num < 10){ System.out.println(num%10); return; } myprint(num/10); System.out.println(num%10); return; } public static void main(String[] args) { // 递归实现按顺序打印数字的每一位 Scanner scan = new Scanner(System.in); System.out.println("请输入一个数:"); int num = scan.nextInt(); myprint(num); } }
求斐波那契数列的第 N 项
public class TestDemo220428 { public static int fib1(int n){ int f1 = 1; int f2 = 1; int f3 = 1; for(int i = 3;i <= n;i++){ f3 = f1 + f2; f1 = f2; f2 = f3; } return f3; } public static int fib(int n){ if(n == 1 || n == 2){ return 1; } return fib(n-1) + fib(n-2); } public static void main(String[] args) { // 递归求斐波那契数列的第n项 Scanner scan = new Scanner(System.in); System.out.println("请输入您想要求取的项数:"); int n = scan.nextInt(); int ret = fib1(n); System.out.println("第" + n + "项为:" + ret); } }
利用递归求斐波那契数列的第n项的话,其实是一个双路递归,不推荐这种求解的方法,因为会算很多重复的项,效率很低,一般都是选择循环迭代的方式来生成斐波那契数即可。
以上がJavaメソッドの使用例分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。