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

Parameter(参数)、Method(方法)、Exercise(练习)

基本数据类型的传参机制

看一下案例,将main中的值传递给类中对象

/**
* @ClassName MethodParameter
* @Description TODO
* @Author Orange
* @Date 2021/4/13 13:42
* @Version 1.0
**/
public class MethodParameter {
public static void main(String[] args) {
int a = 10;
int b = 20;
//创建AA 对象名字 obj
BB obj = new BB();
obj.swap(a, b); //调用swap
System.out.println("main 方法a=" + a + " b=" + b); //a=10 b=20
//小结:形参的改变是不会影响实参的值的
}
} class BB {
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
}
} 程序运行结果:
-------------------
a 和b 交换前的值
a=10 b=20 a 和b 交换后的值
a=20 b=10
main 方法a=10 b=20
-------------------

示意图

小结

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


引用数据类型的传参机制

看一下案例:

  • D 类中编写一个方法test100,可以接收一个数组,在方法中修改该数组,看看原来的数组是否变化?

  • D 类中编写一个方法test200,可以接收一个Person(age,sal)对象,在方法中修改该对象属性,看看原来的对象是否变

/**
* @ClassName MethodParameter02
* @Description TODO
* @Author Orange
* @Date 2021/4/14 9:15
* @Version 1.0
**/
public class MethodParameter02 {
public static void main(String[] args) {
//测试
D d = new D(); //创建一个D类对象d
int[] arr = {1, 2, 3}; //建立一个以为数组
System.out.println("调用test100前,数组情况:");
for(int i = 0; i < arr.length; i++) { //打印调用test100前 mian中数组
System.out.print(arr[i] + "\t");
}
System.out.println();
d.test100(arr); //调用方法test100(arr);
System.out.println("调用test100后,数组情况:");
//遍历数组
for(int i = 0; i < arr.length; i++) { //打印调用test100后 mian中数组
System.out.print(arr[i] + "\t");
}
System.out.println();
}
}
class D {
//D 类中编写一个方法test100,
//可以接收一个数组,在方法中修改该数组,看看原来的数组是否变化
public void test100(int[] arr) {
arr[0] = 200;//修改元素
//遍历数组
System.out.println(" test100中数组情况");
for (int i = 0; i < arr.length; i++) { //打印修改后test100中的数组
System.out.print(arr[i] + "\t");
}
System.out.println();
}
} 程序运行结果:
-----------------------
调用test100前,数组情况:
1 2 3
test100中数组情况
200 2 3
调用test100后,数组情况:
200 2 3
-----------------------

示意图

小结

  引用数据类型参数传递的是引用数据所在的地址值,由于相同的地址指向的是同一区域的值,对该区域的值进行修改后,在main中由于地址没变,指向的还是那片区域,但是其中的值已经在调用test100时被改变了,所以在打印main中数组时发生了变化,这就是与基本数据类型传递的区别。

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


成员方法返回类型是引用类型应用实例

  编写类MyTools 类,编写一个方法可以打印二维数组的数据。

  编写一个方法copyPerson,可以复制一个Person 对象,返回复制的对象。克隆对象, 注意要求得到新对象和原来的

  对象是两个独立的对象,只是他们的属性相同

/**
* @ClassName MethodExercise01
* @Description TODO
* @Author Orange
* @Date 2021/4/13 15:46
* @Version 1.0
**/
import java.sql.SQLOutput;
import java.util.Scanner; public class MethodExercise01 {
public static void main(String[] args) {
Info p = new Info();
p.age = 100;
p.name = "Orange";
//创建tools
MyTools tools = new MyTools();
Info p2 = tools.copyPerson(p); //至此,p和 p2是Info对象,但是是两个对立的对象,属性相同
System.out.println("p的属性 age = " + p.age + " 名字 = " + p.name);
System.out.println("p的属性 age = " + p.age + " 名字 = " + p.name);
//可以同对象之间相互比较看看是否为同一个对象
System.out.println(p == p2); //False
}
} class Info{
String name;
int age;
} class MyTools {
public void printArray(int[][]arr) {
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {
System.out.println(arr[i][j]);
}
System.out.println();
}
} public Info copyPerson(Info p){
//创建一个新的对象
Info p2 = new Info();
p2.name = p.name;//把原来对象的名字赋给p2.name
p2.age = p.age;//把原来对象的年龄赋给p2.age return p2;
}
} 程序运行结果:
-------------------------------
p的属性 age = 100 名字 = Orange
p的属性 age = 100 名字 = Orange
false
-------------------------------

最新文章

  1. Xshell显示中文乱码问题
  2. 功能强大而又简单易学的编程语言Python
  3. 一个页面中显示多个button时总行数计算公式。
  4. 深入理解CSS中的长度单位
  5. SharePoint 2013 同步FBA认证用户
  6. julia生成指定格式的字符串.jl
  7. C#函数运行超时则终止执行(任意参数类型及参数个数通用版)
  8. GitHub Desktop安装异常解决
  9. spring Scurity终于测试OK了,复杂的功能还待深入研究!发布出来一起探讨吧!
  10. C# 窗体在线2,8,16进制转换以及,在线更新时间
  11. Git 忽略提交 .gitignore
  12. Delphi 项目总结
  13. [No0000194]聊聊 Chrome DevTools 中你可能不知道的调试技巧
  14. CF1110H Modest Substrings AC自动机、DP
  15. \x 开头编码的数据解码成中文
  16. xtrabackup 详解
  17. dubbo和rabbitmq对比
  18. NSDictionary打印编码改中文的方法
  19. windows操作系统用命令提示符查看占用端口号的进程
  20. Linux 开机、重启和用户登录注销、用户管理、用户组

热门文章

  1. JDK8 四大核心函数式接口及扩展接口总结
  2. Pycharm中图标的含义
  3. JWT拦截器与跨域问题
  4. .net gRPC初探 - 从一个简单的Demo中了解并学习gRPC
  5. STL中的智能指针(Smart Pointer)及其源码剖析: std::auto_ptr
  6. P6329 【模板】点分树 | 震波
  7. JZOJ 4872.集体照
  8. 从零开始使用阿里云OSS服务(白嫖)
  9. .net 移动mas短信接口开发
  10. vue-cli 更新遇到的问题,卸载不掉旧版本2.9.6(可行)