方法与两种值传递

方法

方法的声明和定义

DEF

方法是一种语法结构,它可以把一段代码封装成一个功能,以方便重复调用

  • 提高了代码的复用性

  • 让程序的逻辑更清晰

// 例如:要计算两个数相加,计算两次
// 会发现代码重复的有很多,所以可以使用方法
int a = 10;
int b = 20;
int c = a+b;
System.out.println(c);
int a1 = 10;
int b1 = 20;
int c1 = a1 + b1;
System.out.println(c1);

可以发现使用方法可以减少很多代码冗余

public class Main {
    public static void main(String[] args) {
​
    int c2 =  sum(10,20);  // 直接调方法将值赋值给c2
   System.out.println(c2);
    int c3 =  sum(20,20);
    System.out.println(c3);
}
public static int sum(int a , int b){
    int c = a+b;
    return c;
}
​
}

方法的声明

方法分为方法头和方法体,一般情况每一个方法秉持只做一件事的原则

修饰符 返回值类型 方法名(形参列表){
    方法体代码(需要执行的功能代码);
    
return 返回值;
​
}
修饰符
  • public表示该方法是公共方法,可以被其他类访问

  • static表示该方法是静态方法,可以直接通过类名调用

  • void表示该方法没有返回值

  • main是方法名,是单个Java类型程序的入口方法,程序从这里开始执行

  • String[] args是参数列表,是命令行参数的字符串数组,可以用来向程序传递参数

注意:
  • 如果方法不需要返回结果,返回值类型必须申明成void (无返回值) , 此时方法内部不可以使用return 返回数据

  • 返回如果没有参数,或者返回值类型申明为void 可以称为无参数,无返回值的方法

定义方法时候有以下几个注意点:

  • 方法名称: 自己取名 , 有意义,英文小写,驼峰模式(有意义的名字)

  • 方法体代码: 完成自己需要写的功能代码即可

  • 真正需要关注的点:

  1. 分析方法是否需要申明返回值类型,

  2. 分析方法是否需要接收参数

方法的调用和参数:

调用方法,即执行该方法。发出调用的方法称为主调方法,被调用的方法称为被调用方法

int larger = max(30,40);
  1. 在main方法区调用方法,被调用的方法需要使用static修饰(静态)

  2. static方法调用使用同一个类中的方法,可以直接用方法名()调用

  3. static方法只能直接调用static方法

  4. 一个方法可以被多次调用

  5. 跨类调用static方法需要用类名.方法

注意,当:

  • 被调用方法所在的类如果和调用方法的类在同一个包下,不需要导包

  • java.lang包下的类都不需要导包

其他情况需要导包

调用

(可以理解为)调用方法的前提条件。

方法参数可以有多个参数,每个参数都需要声明类型

声明的参数是形参(形式参数)

public static int Text(int num1, int num2, int num3){
    num1++;
    ++num2;
    num3--;
    return num1+num2+num3;
}

调用方法时,必须按照参数列表的类型,顺序依次传入参数才可以调用。

传入的参数是实参(实际参数)

public static void main(String[] args){
    int num1 = 0;
    int num2 = 0;
    int num3 = 0;
    int sum =Text(num1,num2,num3);
    System.out.println(sum);
    
}

参数的传递

  • JDK1.5开始,Java支持传递同类型的可变参数给一个方法。

  • 在方法声明中,在指定参数类型后加一个省略号(…)。

  • 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数都必须在它之前声明。

public class Demo04 { public static void main(String[] args) { //调用可变参数的方法 printMax(12,213,421,512.4); printMax(new double[]{1,2,3}); }

public static void printMax(double... numbers){
    if (numbers.length==0){//判断传递参数的长度
        System.out.println("No argument passed");
        return;
    }
    double result = numbers[0];//定义返回值为一个数组
​
    //排序
    for (int i = 1; i < numbers.length; i++) {//此处会比较numbers遍历的时候谁最大,会一直把最大的值赋值给result
        if (numbers[i]>result){
            result = numbers[i];
        }
    }
    System.out.println("The max value is"+result);
}
}

方法的重载

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

方法的重载规则:
  • 方法名称必须相同。

  • 参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)。

  • 方法的返回类型可以相同也可以不相同。

  • 仅仅返回类型不同不足以称为方法的重载。

    重载中还需注意:

    可变长参数和数组的区别:

    1. 数组作为参数必须要传值,可变长参数则不一定

    2. 可变长参数只能用于参数列表的最后一个(并且长参数优先度低于其他类型);数组则不一定

    3. 可变长参数只能在参数列表出现,数组可以定义局部变量

    注:两者可以同时在同一个方法的参数列表中出现。但时参数列表只有数组和可变长度参数不同时不是重载方法(不能同时出现)

值传递中的内存原理

image-20230811212715921

基本类型的值传递当不调用方法时,或者没有接收值的时候,无法传递

例如

 public static void main(String[] args) {
int b =10;
test(b);
System.out.println(b);
此时输出依然是10
 }
​
 public static void test(int b){
​
     b=30;
​
 }

当有接收值的时候:此时会将两个局部变量将值传递

public static void main(String[] args) {
int b =10;
b=test(b);
System.out.println(b);
​
     }
public static void test(int b){
     b=30;
 }
此时输出是30

image-20230811212442527

但是当传递类型为引用类型的时候:方法指定的是堆中的同一个地址值,因此会改变数组中的大小(与基本类型的区别

,基本类型传递的是真实的值)

因此形参的改变会影响实际输出的值

所以此时的输出值为10和6;

是因为引用类型的值传递,传递的是物理地址,

    public static void main(String[] args) {
        int []a ={10};
        System.out.println(a[0]);
        int []arr = new int[]{b};
        test(a);
        System.out.println(a[0]);
    }

public static void test(int a[]){

        a[0] = 6;
        a = new int[]{4};

    }

 

image-20230811213505799

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值