面向对象编程-基础(二)-传参机制

1、成员方法

1.1 基本介绍

在某些情况下,我们要需要定义成员方法(简称方法)。比如人类:除了有一些属性外( 年龄,姓名…),我们人类还有一 些行为比如:可以说话、跑步…,通过学习,还可以做算术题。这时就要用成员方法才能完成。
现在要求对 Person 类完善。

1.2 方法的调用机制原理:(重要!-示意图!!!)

在这里插入图片描述

1.3 成员方法的好处

  1. 提高代码的复用性
  2. 可以将实现的细节封装起来,然后供其他用户来调用即可

1.4 成员方法的定义

访问修饰符 返回数据类型 方法名(形参列表..) {
	//方法体 语句;
	//也可以没有返回值,那么返回的数据类型就是void
	return 返回值; 
}
  1. 形参列表:表示成员方法输入 cal(int n) , getSum(int num1, int num2)
  2. 返回数据类型:表示成员方法输出, void 表示没有返回值
  3. 方法主体:表示为了实现某一功能代码块
  4. return 语句不是必须的。

1.5 注意事项和使用细节


public int[] getSumAndSub(int n1, int n2) {
	int[] resArr = new int[2]; // resArr[0] = n1 + n2;
	resArr[1] = n1 - n2;
	return resArr;
}

//细节: 调用带参数的方法时,一定对应着参数列表传入相同类型或兼容类型 的参数 byte b1 = 1;
byte b2 = 2;
a.getSumAndSub(b1, b2); //byte -> int

//细节: 
//1.实参和形参的类型要一致或兼容、个数、顺序必须一致
//a.getSumAndSub(1.1, 1.8); //double ->int(×)

//a.getSumAndSub(100);//× 个数不一致
a.f3("tom", 10); //ok
//a.f3(100, "jack"); // 实际参数和形式参数顺序不对


//2. 返回类型可以为任意类型,包含基本类型或引用类型(数组,对象) // 具体看 getSumAndSub
//
//3. 如果方法要求有返回数据类型,则方法体中最后的执行语句必须为 return 值; // 而且要求返回值类型必须和 return 的值类型一致或兼容

//4.思考: 一个方法最多有一个返回值 [如何返回多个结果 返回数组 ]

访问修饰符 :
(作用是控制 方法使用的范围)
如果不写默认访问,有四种:

  1. public,
  2. protected,
  3. 默认,
  4. private

返回数据类型

  1. 一个方法最多有一个返回值 [思考,如何返回多个结果 返回数组 ]
  2. 返回类型可以为任意类型,包含基本类型或引用类型(数组,对象)
  3. 如果方法要求有返回数据类型,则方法体中最后的执行语句必须为return值;而且要求返回值类型必须和return的值类型一致或兼容
  4. 如果方法是void,则方法体中可以没有return语句,或者只写return;

方法名
遵循驼峰命名法,最好见名知义,表达出该功能的意思即可, 比如 得到两个数的和 getSum, 开发中按照规范:
在这里插入图片描述
在这里插入图片描述

2、成员方法传参机制(非常非常重要)

方法的传参机制对我们今后的编程非常重要,一定要搞的清清楚楚明明白白。

2.1 基本类型数据传参机制

public class MethodParameter01 {
	//编写一个 main 方法
	public static void main(String[] args) {
	int a = 10;
	int b = 20;
	//创建 AA 对象 名字 
	obj AA obj = new AA(); obj.swap(a, b); //调用 swap
	
	System.out.println("main 方法 a=" + a + " b=" + b);
	//这里输出的a和b仍然是 a=10 b=20 
	}
}

class AA {
	public void swap(int a,int b){
	System.out.println("\na 和 b 交换前的值\na=" + a + "\tb=" + b);//a=10 b=20 
	//完成了 a 和 b的交换
	int tmp = a;
	a = b;
	b = tmp;
	System.out.println("\na 和 b 交换后的值\na=" + a + "\tb=" + b);//a=20 b=10 
	}
}

在这里插入图片描述

由上面的代码片段可得出结论:

基本类型数据,传递的是值(值拷贝),形参的任何改变不影响实参数。

在这里插入图片描述

2.2 引用类型数据传参机制

2.2.1 参数为数组

在这里插入图片描述
main方法中定义原数组为[1,2,3],传递进入test100方法后,在方法内修改数组的值,然后在main方法中输出数组,数组改变。
然后在

结论:在参数为数组时候,形参的改变会影响实参。

2.2.2 参数为对象

public class TestClass {
    public static void main(String[] args) {
        // 测试
        B b = new B();

        // 测试
        Person p = new Person();
        p.name = "jack";
        p.age = 10;
        b.test200(p);
        //  如果 test200 执行的是 p.age = 10000,下面的结果是 10000
        //  如果 test200 执行的是 p = null ,下面的结果是 10
        //  如果 test200 执行的是 p = new Person();..., 下面输出的是 10 
        System.out.println("main 的 p.age=" + p.age);//10

    }
}
class B {
    public void test200(Person p) {
        // p.age = 10000; //修改对象属性 
        
        //思考
        // p = new Person();
        // p.name = "tom";
        // p.age = 99;
        
        // 思考
        p = null;
    }
}
class Person {
    String name;
    int age;
}

上面有三种情况:

  1. 如果 test200 执行的是 p.age = 10000,下面的结果是 10000
  2. 如果 test200 执行的是 p = null ,下面的结果是 10
  3. 如果 test200 执行的是 p = new Person();…, 下面输出的是 10

第一种:
p.age = 10000,因为引用类型传递的是地址,所以修改p.age的值,实参也会改变。
在这里插入图片描述

第二种:
p = null ,相当于形参断开了和堆内存中实参地址的联系,但是栈内存中的实参还是连接着,所以输出的是10。
在这里插入图片描述

第三种:
p = new Person();相当于在堆内存中重新开了一个空间,和实参一点关系都没有,肯定不会改变。
在这里插入图片描述

结论:引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参!

本博客引用韩顺平老师Java课程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值