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