>  기사  >  Java  >  Java 메소드 활용 사례 분석

Java 메소드 활용 사례 분석

PHPz
PHPz앞으로
2023-04-19 16:52:06626검색

1. 메소드의 개념과 용도

1.1. 메소드란 무엇인가

메소드는 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);
    }
}
Java 메소드 활용 사례 분석참고:

1. 수정자: 이 단계에서는 public static 고정 조합을 직접 사용합니다. (주 메소드가 public static이므로 static 메소드만 호출할 수 있습니다.) .

2. 반환 값 유형: 메서드에 반환 값이 있는 경우 반환 값 유형은 반환 값이 없는 경우 void로 작성해야 합니다.

3. 방법명 : 네이밍은 작은 카멜케이스를 사용하세요.

4. 매개변수 목록: 메소드에 매개변수가 없으면 ()에 아무것도 쓰지 않습니다. 매개변수가 있는 경우 매개변수 유형을 쉼표로 구분해야 합니다.

5. 메소드 본문: 메소드 내부에서 실행되는 명령문입니다.

6. 자바에서는 메소드를 클래스로 작성해야 합니다.

7. Java에서는 메서드를 중첩할 수 없습니다.

8. Java에는 메소드 선언이 없습니다. (선언과 정의는 구분되지 않음)

1.3. 메소드 호출 실행 과정

호출 과정:

메서드 호출—> 메소드 주소 찾기—> >호출된 메서드가 끝난 후 반환—>기본 호출 메서드로 돌아가서 실행을 계속하세요

이미지:

참고:

Java 메소드 활용 사례 분석1. 메서드가 정의되면 해당 메서드의 코드가 생성되지 않습니다.

2. 메소드는 여러 번 호출될 수 있습니다.

1.4. 실제 매개변수와 형식 매개변수의 관계(중요)

모두가 형식 매개변수와 형식 매개변수의 관계를 잘 알고 있어야 합니다. 즉, 형식 매개변수는 실제 매개변수의 임시 복사본입니다. 이는 형식 매개변수의 변경 사항이 실제 매개변수에 영향을 미치지 않음을 의미합니다.

구체적인 이유 설명: (함수 스택 프레임과 관련된 구체적인 문제는 더 복잡하기 때문에 여기에 간략한 설명이 있습니다)

그림을 통해 값으로 호출할 때, 형식 매개변수는 실제 매개변수에 참여합니다. 값은 전혀 동일한 공간에 저장되지 않으므로 C 언어에서는 형식 매개변수의 변경이 실제 매개변수에 영향을 미치도록 하려면 서로 간섭하지 않습니다. , 주소에 의한 호출이어야 하지만 Java에는 그러한 것이 없습니다. 이 인수에 대한 해결책은 참조를 사용하는 것입니다(나중에 자세히 소개됩니다).

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);
    }
}

이 코드를 보면 addint와 adddouble 두 메소드는 모두 두 숫자의 합을 구하도록 설계되었지만 서로 다른 함수를 정의해야 합니다. 하지만 때로는 이름을 지정하는 것이 골치 아픈 경우도 있습니다. 그러면 메소드의 필수 기능은 동일하지만 매개변수가 다를 수 있으므로 모두 동일한 함수 이름을 사용할 수 있습니까?

대답은 '예'이며, 이를 메소드 오버로딩이라고 합니다.

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);
    }
}

프로그램 실행 스크린샷:

위 프로그램에서 볼 수 있듯이 둘 다 덧셈 함수를 구현하지만 두 가지 다른 함수 구현이 정의되어 있지만 함수 이름은 동일합니다. . 컴파일러는 전달한 매개변수에 따라 해당 함수를 호출합니다.

Java 메소드 활용 사례 분석참고:

1. 메소드 이름은 동일해야 합니다.

2. 매개변수 목록이 달라야 합니다. (매개변수 개수가 다르고, 매개변수의 유형이 다르며, 유형의 순서가 달라야 합니다.) (매개변수로 구분해야 합니다.)

3. 반환 값 유형이 동일한지 여부

4. 정의할 수 없음 반환 값으로만 ​​구별되는 두 함수는 오버로딩을 구성할 수 없습니다

5. 컴파일러는 코드를 컴파일할 때 실제 매개 변수 유형을 추론합니다. 그리고 추론 결과에 따라 어떤 메소드를 호출할지 결정합니다

2.3. 메소드 서명

메소드 서명은 컴파일러에 의해 컴파일되고 수정된 후 메소드의 최종 이름입니다. 구체적인 메소드는 메소드의 전체 경로 이름 + 매개변수 목록 + 반환 값 유형으로 메소드의 전체 이름을 구성합니다. 오버로드된 함수를 구별하는 데 사용됩니다

메서드 서명을 보는 방법:

1. 먼저 프로젝트를 컴파일하여 .class 바이트코드 파일을 생성합니다

2. 콘솔 디렉토리에 보려는 .class를 입력합니다

3. : javap -v 바이트코드 파일명

3. 재귀

3.1. 재귀의 개념

정의: 실행 중에 자신을 호출하는 메소드를 "재귀"라고 합니다.

재귀에 필요한 조건:

1. 재귀

2. 재귀의 종료 조건.

3.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);
    }
}

在这里我们以求一个数的阶乘的代码为例来分析一个递归的过程:

Java 메소드 활용 사례 분석

递归的过程其实不复杂,看成两个部分,一个是递出去,而是归回来,上面的蓝色箭头是递的过程,红色箭头是归的过程。

3.3、递归小练习

  • 按顺序打印一个数字的每一位(例如 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 메소드 활용 사례 분석

위 내용은 Java 메소드 활용 사례 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제