2.7 方法

1. 方法的定义

方法是一种语法结构,它可以把一段代码封装成一个功能,可以重复调用,以此提高代码的复用性,提高开发效率,让程序逻辑更加清晰。

(1)定义一个方法的语法格式如下:

[public] returnType  methodName ([paramList]) {
    //方法体
    return 返回值;
}

案例如下:

public int sum(int x,int y){
    int z = x + y;
    return z;
}
  • 访问修饰符,方法的访问修饰符有public、protected、private,也可以缺省访问修饰符。

  • 方法返回值,returnType为方法的返回值类型,返回值类型可以是基本数据类型和引用数据类型,也可以无返回值用void表示。

  • 方法名,methodName为方法名,采用小驼峰命名规则。

  • 方法参数,方法参数也称形式参数,是在方法名后面一对括号内的参数列表,方法可以没有参数,也可以多个参数,多个参数用逗号隔开。

  • 方法体,方法体实现业务逻辑和进行数据返回,无返回值类型方法体内可以不写return或只写return;。

  • 方法的使用,方法必须调用才能使用,调用格式:方法名(…)。

(2)方法案例

键盘输入两个整数,求两个数的和,求和部分使用sum( )方法实现。

public class Test {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入第一个数:");
        int x = input.nextInt();
        System.out.print("请输入第二个数:");
        int y = input.nextInt();
        int z = sum(x,y);   //调用求和方法
        System.out.println("和为:" + z);
    }
    /**
     * 求两个整数和的方法
     * @param x
     * @param y
     * @return
     */
    public static int sum(int x,int y){
        int z = x + y;
        return z;
    }
}

2. 方法参数的传递

方法的参数传递机制是值传递。

(1)基本类型参数传递

基本类型在传输实参给方法的形参的时候,并不是传输实参变量本身,而是传输实参变量中存储的数据值,方法调用结束后对实参并没有影响。

其中,实参是在方法内部定义的变量,形参是在方法定义时括号中所声明的参数。

基本类型参数传递案例如下:

public class Test {

    public static void main(String[] args) {
        int x = 10;
        change(x);  //调用change()方法,x为实参
        System.out.println("第三次输出:x = " + x);   //10
    }

    public static void change(int x){  // x为行参
        System.out.println("第一次输出:x = " + x);  //10
        x = 20;
        System.out.println("第二次输出:x = " + x);  //20
    }
}

(2)引用类型参数传递

引用类型的参数传输存储的引用值(地址值),因此在方法调用后,方法内部的实参可能会发生变化。

引用类型参数传递案例如下:

public class Test {

    public static void main(String[] args) {
        int[] nums = {1,2,3};
        change(nums);       //调用change()方法
        System.out.println("第三次输出:nums[0] = " + nums[0]);   //10
    }

    public static void change(int[] nums){
        System.out.println("第一次输出:nums[0] = " + nums[0]);   //1
        nums[0] = 10;
        System.out.println("第二次输出:nums[0] = " + nums[0]);   //10
    }
}

3. 方法重载

所谓方法重载(overloading),就是在同一个作用域内,方法名相同但参数个数或者参数类型不同的方法。

注意:仅返回值不同不能区分重载的方法。

方法重载案例如下:

public class Test {
    public static void main(String[] args) {
        //测试1
        int result1 = sum(1,2);
        System.out.println("测试1结果:" + result1);
        //测试2
        int result2 = sum(1,2,3);
        System.out.println("测试2结果:" + result1);
        //测试3
        double result3 = sum(1.1,2.2);
        System.out.println("测试3结果:" + result1);
    }
    public static int sum(int a,int b){
        System.out.println("调用重载方法1");
        return a + b;
    }
    public static int sum(int a,int b,int c){
        System.out.println("调用重载方法2");
        return a + b + c;
    }
    public static double sum(double a,double b){
        System.out.println("调用重载方法3");
        return a + b;
    }
}

4. 方法递归

递归是解决复杂问题的一种常见方法,其基本思想就是把问题逐渐简单化,最后实现问题的求解。

(1)方法递归分析

求正整数n的阶乘n!,就可以通过递归实现,n!可按递归定义如下:

当(n>0),n! = n ×(n-1)!
当(n=0),n! = 1
设计算n!的方法为factor(n),则该算法的简单描述如下:
if(n == 0){
    return 1;
} else{
    return  n * factor(n-1) ;
}

(2)方法递归案例

public class Test {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入一个整数:");
        int num = input.nextInt();
        long result = factor(num);
        System.out.println(num + "!=" + result);
    }
    public static long factor(long n){
        if(n == 0){
            return 1;
        }else{
            return n * factor(n-1);
        }
    }
}

5. 练习

回文素数是指一个数同时为素数和回文数,其中素数一般指质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。例如131是一个素数,同时也是一个回文数,757也是回文数。编写程序,显示1000以内的回文素数。

public class Test {
    public static void main(String[] args) {
        for(int i=2;i<=1000;i++){
            if(isSushu(i) && isHuiwen(i)){
                System.out.println("回文素数:" + i);
            }
        }
    }
    /**
     * 判断是是否为素数
     */
    public static boolean isSushu(int num){
        for(int i=2;i<=Math.sqrt(num);i++){
            if(num % i == 0){
                return false;
            }
        }
        return true;
    }
    /**
     * 判断是否为回文
     */
    public static boolean isHuiwen(int num){
        int x,y;
        x = num;    //x为原来的数
        y = 0;      //y为反转的熟
        while(num != 0){
            y = y * 10 + num % 10;
            num = num / 10;
        }
        if(x == y){
            return true;
        }else{
            return false;
        }
    }
}

你可能感兴趣的:(Java程序设计,java)