메소드는 C 언어의 "함수"와 유사합니다. 기능은 다음과 같습니다.
1. 코드를 모듈식으로 구성할 수 있습니다(코드 크기가 상대적으로 복잡한 경우).
2. 코드를 재사용하고 하나의 코드를 여러 위치에서 사용할 수 있습니다. 3. 코드가 더 이해하기 쉽고 간단해집니다.
1.2. 메소드 정의
정의 형식:
예: 함수를 작성합니다.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); } }
1. 수정자: 이 단계에서는 public static 고정 조합을 직접 사용합니다. (주 메소드가 public static이므로 static 메소드만 호출할 수 있습니다.) .
2. 반환 값 유형: 메서드에 반환 값이 있는 경우 반환 값 유형은 반환 값이 없는 경우 void로 작성해야 합니다.
3. 방법명 : 네이밍은 작은 카멜케이스를 사용하세요.
4. 매개변수 목록: 메소드에 매개변수가 없으면 ()에 아무것도 쓰지 않습니다. 매개변수가 있는 경우 매개변수 유형을 쉼표로 구분해야 합니다.
5. 메소드 본문: 메소드 내부에서 실행되는 명령문입니다.
6. 자바에서는 메소드를 클래스로 작성해야 합니다.
7. Java에서는 메서드를 중첩할 수 없습니다.
8. Java에는 메소드 선언이 없습니다. (선언과 정의는 구분되지 않음)
1.3. 메소드 호출 실행 과정
호출 과정:
이미지:
참고:1. 메서드가 정의되면 해당 메서드의 코드가 생성되지 않습니다.
2. 메소드는 여러 번 호출될 수 있습니다.
1.4. 실제 매개변수와 형식 매개변수의 관계(중요)
모두가 형식 매개변수와 형식 매개변수의 관계를 잘 알고 있어야 합니다. 즉, 형식 매개변수는 실제 매개변수의 임시 복사본입니다. 이는 형식 매개변수의 변경 사항이 실제 매개변수에 영향을 미치지 않음을 의미합니다.
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); } }
2.2. 메소드 오버로딩의 정의
Java에서는 여러 메소드가 동일한 이름과 다른 매개변수 목록을 갖는 경우 이를 오버로드되었다고 합니다. 즉, 이름은 같지만 의미가 다릅니다.
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); } }
참고:
1. 메소드 이름은 동일해야 합니다.
2. 매개변수 목록이 달라야 합니다. (매개변수 개수가 다르고, 매개변수의 유형이 다르며, 유형의 순서가 달라야 합니다.) (매개변수로 구분해야 합니다.)
3. 반환 값 유형이 동일한지 여부
4. 정의할 수 없음 반환 값으로만 구별되는 두 함수는 오버로딩을 구성할 수 없습니다
5. 컴파일러는 코드를 컴파일할 때 실제 매개 변수 유형을 추론합니다. 그리고 추론 결과에 따라 어떤 메소드를 호출할지 결정합니다
2.3. 메소드 서명
메소드 서명은 컴파일러에 의해 컴파일되고 수정된 후 메소드의 최종 이름입니다. 구체적인 메소드는 메소드의 전체 경로 이름 + 매개변수 목록 + 반환 값 유형으로 메소드의 전체 이름을 구성합니다. 오버로드된 함수를 구별하는 데 사용됩니다
1. 먼저 프로젝트를 컴파일하여 .class 바이트코드 파일을 생성합니다
2. 콘솔 디렉토리에 보려는 .class를 입력합니다
3. : javap -v 바이트코드 파일명
3. 재귀
3.1. 재귀의 개념
1. 재귀
2. 재귀의 종료 조건.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!