Java开发——6.方法(值传递+引用传递)

方法

何为方法(method):完成某一个特定功能的代码块。

我们最先了解的方法,就是main方法,它主要的目的就是为了运行程序,但是main方法有别于我们书写的其他方法,我们下面将要了解的方法都不能运行,所有的方法的运行都要到main方法中。

//注:sout为System.out.println();简写
修饰符 返回值类型 方法名(参数列表){
    //代码省略... 
    return 结果; //如果是void类型,则不需要return结果,直接sout打印即可。
}

//调用格式
方法名();

//拿main方法开头讲解方法的定义,但是注意 main方法是有别于今天学的 方法!
//public修饰符
//static关键字,一般用来声明静态方法,该关键字在后续方法的声明中,可以自行决定是否保留
//void 返回值类型
//main方法名
//():括号里面的是参数列表
public static void main(String[] args) {
   
}

方法两个明确:

明确参数列表

该方法在完成一个功能时,需要的参数有几个,参数的类型是什么,需要在我们明确给出的。

明确返回值类型

方法的功能完成之后,是否有结果返回,如果有,使用return 将结果返回给调用者。没有返回值void

什么情况下,我们用return, 除了void以外的都要有return

案例:定义方法实现两个整数的求和计算

public class MethodDemo03 {
    public static void main(String[] args) {
        // 调用方法getSum,传递两个整数,这里传递的实际数据又称为实际参数        
        // 并接收方法计算后的结果,返回值     
        int sum = getSum(5, 6);
        System.out.println(sum);
    }
 
    /*
        定义计算两个整数和的方法
        返回值类型,计算结果是int
        参数:不确定数据求和,定义int参数.参数又称为形式参数
    */
    public static int getSum(int a, int b) {
        return a + b;
    }
}

定义方法注意事项

1.定义位置:类中方法外,不能嵌套定义
2.方法必须先定义,再使用
3.void表示无返回值,可以省略return,也可以单独的书写return
4.不能在return后面写代码,return意味着方法结束,所有后面的代码记永远都不会执行,属于无效代码
5.定义方法时()中的参数,我们称之为:形式参数/形参,在调用该方法时传递的参数,我们称之为:实际参数/实参。

//无参方法,括号里没有值,就是无参方法
public static void print() {
    System.out.println("方法被调用");
}
//有参方法,有形参的,就是有参方法
public static int getSum(int a,int b) {
    return a + b;
}

方法的使用场景:

1.直接方法名调用;
public static void main(String[] args) {    
    print();
}
public static void print() {
    System.out.println("方法被调用");
}
2.获取方法的返回值,并直接赋值给变量;
//注:这种只针对有返回值的,void就没有返回值不能以这种方式赋值给变量。
public static void main(String[] args) {    
    int sum = getSum(5,6);
    System.out.println(sum);
}
public static int getSum(int a,int b) {
    return a + b;
}
3.直接输出方法。
//注:这种只针对有返回值的,void就没有返回值,直接调用输出结果就行。
public static void main(String[] args) {    
    System.out.println(getSum(5,6));
}
public static int getSum(int a,int b) {
    return a + b;
}

方法的重载:

在同一个类中,**具有相同的方法名, 参数列表不同,与返回值无关。**参数列表:个数不同,数据类型不同,顺序不同。

重载方法调用:JVM通过方法的参数列表的不同,实现调用不同的方法。

注:重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否相互构成重载。

//声明一个比较方法,判断传入的参数是否相同。
public class MethodTest1 {
    public static void main(String[] args) {
        //调用方法
        System.out.println(compare(10, 20));
        System.out.println(compare((byte) 10, (byte) 20));
    }

    //int:定义不同类型的参数,进而实现方法的重载
    public static boolean compare(int a, int b) {
        System.out.println("int");
        return a == b;
    }

    //byte
    public static boolean compare(byte a, byte b) {
        System.out.println("byte");
        return a == b;
    }
}

拓展——方法的参数传递问题

值传递:(一般针对于基本数据类型)

在参数传递的过程中,原来参数值不会发生改变!

专业术语:形参的改变不会影响实参!

public static void main(String[] args) {
//num 就是实参:实参是定义在方法之外类之中
        int num = 15;
        System.out.println("值传递之前:"+num);
        zhiChuanDi(num);
        System.out.println("值传递之后:"+num);
}

public static void zhiChuanDi(int number){
//此处的number 就是形参:形参是定义在方法之中的
        number = 150;
    }

引用传递:(一般针对引用数据类型,但是String是个特殊例子)

引用传递,底层是通过地址值进行参数的覆盖的!(会在Java开发——7.内存分配…中展开讲述)所以引用传递会改变参数。

注:String虽然是引用数据类型,但是String的底层实现是个值传递有一样的效果的,此处是一个特殊点。

public static void main(String[] args) {

        int arr[] = new int[]{12,18,20};
        System.out.println("引用传递之前:"+arr[0]);

        yinYongChuanDi(arr);
        System.out.println("引用传递之后:"+arr[0]);

        String str = "小红";
        System.out.println("引用传递之前:"+str);

        yinYongChuanDi2(str);
        System.out.println("引用传递之后:"+str);

    }

    public static void yinYongChuanDi(int []arr){
        arr[0] = 66;
    }

    public static void yinYongChuanDi2(String str){
        str = "小明";
    }

欢迎关注微信公众号:小红的成长日记,一起学Java!

欢迎关注微信公众号:小红的成长日记,一起学Java!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值