14.方法

方法

方法简介

  1. 方法是为了解决有序步骤的问题的
  2. 方法包含在累和对象中
  3. 方法在程序中创建 在其他地方被调用

方法最好只完成一个功能 便于后来扩展

值传递和引用传递的区别

1.值传递

package arrayDemo;
public class Demo1 {
        public static void main(String[] args) {
                int b =20;
                change(b);// 实参  实际上的参数
                System.out.println(b);
        }
        public static void change(int a){//形参  形式上的参数
                a=100;
        }
}

结果:20

img

通俗的讲法就是:形参只是实参创建的一个副本,副本改变了,原本当然不可能跟着改变;

再通俗的讲法就是:

小明去餐厅吃饭,看见别人点的红烧肉挺好吃,就把服务员叫过来,说我要一份红烧肉,服务员从后厨拿来一份红烧肉,小明吃完了,但是他吃的红烧肉跟旁边那个人吃的是一份吗?当然不是。

再来解释引用传递

2.引用传递

实参传递给形参的是参数对于 堆内存上的引用地址 实参和 形参在内存上指向 了同一块区域 对形参的修改会影响实参

[复制代码](javascript:void(0)😉

package arrayDemo;
public class Demo1 {
        public static void main(String[] args) {
                int [] a={1,2,3};
                System.out.println(a[0]);
                change(a);
                System.out.println(a[0]);
        }
        public static void change(int[] a ){
                a[0]=100;
        }
}

[复制代码](javascript:void(0)😉

结果:1 100

为什么?

img

由于引用传递,传递的是地址,方法改变的都是同一个地址中的值,

原来a[0]指向0x13地址,值是1,

后来在a[0] 指向的也是0x13地址,将值变成了100

所以,再查询a[0]的值的时候,值自然变成了100

通俗点的讲法就是:

小明回到家,他妻子说:冰箱二层有一只鸡,你去做了;

小明做好了,叫妻子过来吃饭。

这个时候,他妻子现在看见的鸡和她买回来的一样吗?

当然不一样,都做熟了;

什么意思呢?

鸡就是数据

冰箱二层就是存储数据的地址

把鸡做熟了就是相当于把值改变了

地方还是那个地方,就是鸡变了。

方法的重载

重载就是在一个类中 有相同的函数名称 但是形参不同

  1. 方法名称必须相同
  2. 参数列表必须不同(个数不同 类型不同 参数排列不同)

实现理论:方法名称相同的时候 编译器会根据调用的方法的参数个数 类型去逐个匹配 以旋转对应的方法 如果匹配失败 则编译器就会报错

package JAVA.method;

public class Demo2 {
    public static void main(String[] args) {
        double larger1=max(10.0,20.0);
        int larger2=max(10,20);
        System.out.println(larger1);
        System.out.println(larger2);
    }
    //比大小
    public static int max(int numb1,int numb2){
        int result;

        if(numb1==numb2){
            System.out.println("numb1和numb2相等");
            return 0;//终止方法
        }
        if(numb1>numb2){
            result = numb1;
        }
        else {
            result = numb2;
        }
        return result;
    }

    //重载
    public static double max(double numb1,double numb2){
        double result=0;

        if(numb1==numb2){
            System.out.println("numb1和numb2相等");
            return 0;//终止方法
        }
        if(numb1>numb2){
            result = numb1;
        }
        else {
            result = numb2;
        }
        return result;
    }
}

命令行传递参数

因为此处有package 所以打开路径必须在JAVA之上也就是src中

但是更改路径之后还是没能运行 错误未知

package JAVA.method;

public class Demo3 {
    public static void main(String[] args) {
        for (int i = 0; i < args.length; i++) {
            System.out.println("args[+"+i+"]:"+args[i]);
        }
    }
}

可变参数(不定项参数)

  1. 在指定参数后加一个省略号
  2. 一个方法中只能指定一个可变参数 而且他必须是方法的最后一个参数 其他参数必须在这之前
  3. 而且必须是一种类型
  4. 他们传递的值 本质就是数组
package JAVA.method;

public class Demo4 {
    public static void main(String[] args) {
        printMax(16,58,69,77,84,98);
        printMax(new double[]{15,58,79});
    }

    public static void printMax(double...numbers){
       if(numbers.length==0){
           System.out.println("没有传入值");
           return;
       }
       double result =numbers[0];//第一个值放到数组第0位

       //排序

        for (int i = 1; i < numbers.length; i++) {
            if(numbers[i]>result){
                result=numbers[i];
            }
        }
        System.out.println("最大的值是:"+result);
    }

}

递归

递归就是自己调用自己

  1. 递归头:什么时候不调用自身 出口
  2. 递归体:什么时候需要调用自己 过程

边界条件 边界

前阶段

返回阶段

package JAVA.method;

public class Demo6 {
    /*
    阶乘
    2! 2*1
    3! 3*2*1
    4! 4*3*2*1
     */
    
    //递归思想
    public static void main(String[] args) {
        System.out.println(f(5));
    }

    public static int f(int n){
        if(n==1){
            return 1;
        }
        else {
            return n*f(n-1);
        }


    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值