JAVA 方法

本文详细介绍了Java编程中的方法概念,包括传统方法的定义、参数传递、形参长度可变方法、方法重载以及递归方法的使用,帮助读者理解Java编程中的关键概念。

方法是一段可以重复执行的代码,我们对其进行封装起来,方便调用,节省代码。

1. 传统方法 

1.1 定义传统方法,定义传统方法,需要确定返回值类型,方法名和参数等三要素。

      语法格式 : 

public static 返回值类型 方法名(类型 形参1, 类型 形参2, ……){
    方法体;
    [return 表达式];
}

上面的语法格式中,方法声明前面加入public static 关键字,表示该方法能直接被main() 方法调用。

1.2 调用传统方法

方法名(实参1, 实参2, ……)

package String_;

public class foreach_test {

    public static void printBook(String name)
    {
        if(name.equals("孔子")){
            System.out.println("孔子的代表作是《论语》");
        } else if(name.equals("老子")){
            System.out.println("老子的代表作是《道德经》");
        } else if (name.equals("司马光")) {
            System.out.println("司马光的代表作是《资治通鉴》");
        } else {
            System.out.println("抱歉,没找到" + name + "的代表作");
        }
    }

    public static double total(double arr[]){
        double sum = 0;
        for(double d : arr){
            sum += d;
        }
        return sum;
    }

    public static void main(String[] args) {
        printBook("老子");
        double score[] = {88.3, 98.4, 96.3};
        System.out.println("总分是: " + total(score));
    }
}

1.3  参数传递方式

Java方法的实参向形参传递参数也有两种方式:传递基本数据类型和传递引用类型。如果传递引用类型(相当于C/C++传递指针),形参的改变影响实参。

package String_;

import java.util.Arrays;

public class Demo0103 {
    public static void update(int [] arr, int location, int newValue){
        arr[location] = newValue;
        String str = Arrays.toString(arr);
        System.out.println("形参数组:\t\t" + str);
    }

    public static void main(String[] args) {
        int tempArr[] = {1,3,5};
        update(tempArr, 1, 100);
        String strTempArr = Arrays.toString(tempArr);
        System.out.print("原始数组(实参):\t" + strTempArr);
    }
}

2.  形参长度可变方法

2.1 定义形参长度可变方法

public static 返回值类型 方法名(类型 形参1, 类型 形参2, 类型……形参){
    方法体;
    [return 表达式];
}

定义方法时,最后一个形参类型后增加省略号,表明该形参能接受个数不确定的实参,多个实参被当成数组传入。

定义形参长度可变方法需要注意两点:a. 方法只能定义一个可变形参;b. 如果这个方法还有其他形参,他们要放在可变形参之前。

编译时,编译器会把最后一个可变形参转换为一个数组形参, 并在编译的class文件中标上记号,表明该方法的实参个数可变。

public static int total(int begin, int end, int... arr){
    int sum = 0;
    if(!(begin >= 0 && end <= arr.length))
        return sum;
    for(int i = begin; i < end; i++)
        sum += arr[i];

    return sum;
}

2.2  调用形参长度可变方法

调用形参长度可变方法有两种形式:a. 实参是对应类型的一维数组;b. 实参是若干对应类型的变量或常量。

格式 : 

    方法名(实参1, 实参2, 数组名)

或者

    方法名(实参1, 实参2, 实参x1, 实参x2, ..., 实参n)
package String_;

public class Demo0202 {
    public static void main(String[] args) {
        int arr[] = {3,4,5,6};
        int sum1 = total(0, arr.length, arr); // 第一种调用,实参是数组
        int sum2 = total(0 , 3, new int[]{5,6,7,8,9}); // 第一种调用,实参是数组

        int sum3 = total(0, 2, 9, 8, 7, 6);
        System.out.println(sum1);
        System.out.println(sum2);
        System.out.println(sum3);
    }

    public static int total(int begin, int end, int... arr){
        int sum = 0;
        
        if(!(begin >= 0 && end <= arr.length))
            return sum;

        for(int i = begin; i < end; i++)
            sum += arr[i];

        return sum;
    }
}

3. 方法重载

一个类中定义多个同名方法,但这些方法的参数类型和个数不同,称这些方法是重载(overload)。编译阶段,Java编译器根据每个方法的参数类型和个数决定调用哪个具体方法。

package String_;

public class Demo0301 {
    public static void main(String[] args) {
        int a = 1921;
        int b = 28;
        int c = 29;
        String s1 = "1921";
        String s2 = "28";
        System.out.println(a + " + " + b + " = " + add(a, b));
        System.out.println(s1 + " + " + s2 + " = " + add(s1, s2));
        System.out.println("s1 + s2 = " + s1 + s2);
        System.out.println(a + " + " + b + " + " + c + " = " + add(a,b,c));
    }

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

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

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

定义方法重载时,有以下三个问题需要注意。

a. 一个类中(或者有继承关系的类之间)的方法才能重载,不同类中的方法不能重载。

如下两个add方法签名一样,但是不是重载关系

class DemoX{
    int add(int x, int y){
        return x + y;
    }
}

class DemoY{
    int add(int x, int y){
        return x + y;
    }
}

b.  方法重载有3种形式:① 方法声明的形参个数不同;②方法声明中对应的形参类型不同;③方法声明的形参个数和类型都不同;

c.  方法的返回值类型不同不能作为方法重载的依据;

如下代码段类的两个add方法不是重载

class DemoX{
    int add(int x, int y){
        return x + y;
    }
    String add(int x, int y){
        return String.valueOf(x) + String.valueOf(y);
    }
}

4. 递归方法

package String_;

public class Demo0401 {
    public static void main(String[] args) {
        int number = 10;
        System.out.println(number + " != " + factorial(number));
    }

    public static long factorial(int num){
        if(1 == num)
            return 1;
        else
            return factorial(num - 1) * num;
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值