Java笔记_成员方法传参机制
成员方法传参机制(非常重要)
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
-------------------------------
Java笔记_成员方法传参机制的更多相关文章
- Java函数的传参机制
一 最近的一个项目,里面各种返回void,参数用引用类型,那叫一个熟和多,但是也把我绕糊涂了. 我就打算好好理一理java的传参机制,整理一番 二 很多人一听Java的传参,那一定会脱口而出,java ...
- uboot向kernel的传参机制——bootm与tags
http://blog.csdn.net/skyflying2012/article/details/35787971 最近阅读代码学习了uboot boot kernel的过程以及uboot如何传参 ...
- [Java]_函数传参的疑惑与思考
问题来源于leetcode上的两道题 Path Sum I && II,分别写了两个dfs. void dfs(TreeNode node , int sum , ArrayList& ...
- 原来你是这样的JAVA[02]-包、传参、构造器
一.包(package) 在java程序中,一个java源文件称为编译单元,以.java后缀命名.编译单元内可以有一个public类,类名必须与文件名相同.注意:每个编译单元只能有一个public类. ...
- 『Python × C++』函数传参机制学习以及对比
一.Python函数传参 在python中,函数传参实际上传入的是变量的别名,由于python内在的变量机制(名称和变量值相互独立),只要传入的变量不可变(tuple中的元素也要是不可变的才行),那么 ...
- java调用py文件传参执行
java执行的也是py文件主函数. 传参: String url="*********************"; String[] args1 = new String[] { ...
- 学习笔记:JavaScript传参方式———ECMAScript中所有函数的参数都是按值传递
我们把命名参数(arguments)视为局部变量,在向参数传递基本类型值时,如同基本类型变量的复制一样,传递一个副本,参数在函数内部的改变不会影响外部的基本类型值.如: function add10( ...
- java方法中,传参是传值还是传址问题(对比C语言、C#和C++)
问题引出: 编写一个简单的交换值的小程序,如果我们只是简单地定义一个交换函数接收两个数,在函数内部定义一个中间变量完成交换.那么当我们把a,b两个实参传给这个函数时,往往得不到预期的结果.这是为什么呢 ...
- Java基础 - 面向对象 - 类方法传参
调用方法时可以给该方法传递一个或多个值,传给方法的值叫实参,在方法内部,接收实参的变量叫做形参,形参的声明语法与变量的声明语法一样.形参只在方法内部有效. Java中方法的参数主要有3种,分别为值参数 ...
- Java笔记_静态变量和实例变量的区别
这里简单做一下笔记,区分Java全局变量里的静态变量与实例变量. 1.Java里的全局变量 首先了解Java里的全局变量,也叫成员变量. 特点: (1).一个类中既不在方法体内,也不在程序块内定义的变 ...
随机推荐
- Linux之ssh远程连接
Linux之ssh远程连接 一.下载远程连接工具Xshell Xshell是一种远程连接工具,可用来远程连接虚拟机. Xshell免费版下载地址 输入名字和邮箱,可以在邮箱看到下载Xshell的链接. ...
- Netty Protobuf处理粘包分析
背景 最近消息中间件项目进行联调,我负责Server端,使用Java的Netty框架.同事负责Client端,使用Go的net包,消息使用Protobuf序列化.联调时Client发送的消息Serve ...
- Rpc-实现Zookeeper注册中心
1.前言 本文章是笔主在声哥的手写RPC框架的学习下,对注册中心的一个拓展.因为声哥某些部分没有保留拓展性,所以本文章的项目与声哥的工程有部分区别,核心内容在Curator的注册发现与注销,思想看准即 ...
- qt元对象系统之 Q_PROPERTY宏
这个宏需要和Q_OBJECT宏结合使用, moc工具为Q_OBJECT宏所声明的变量和函数生成定义 同时为Q_PROPERTY宏添加函数的映射,以便qt_static_metacall 能够寻找到对应 ...
- JZOJ 2020.07.28【NOIP提高组】模拟
2020.07.28[NOIP提高组]模拟 考试时状态不好,暴力不想打 结束前勉勉强强骗点分 已经不想说什么了······ \(T1\) 复制&粘贴2 逆推答案,枚举 \(k\),分类讨论 \ ...
- 流量加密之:使用Openssl反弹加密shell
流量加密之:使用Openssl反弹加密shell 目录 流量加密之:使用Openssl反弹加密shell 1 背景 2 生成SSL证书 3 Linux平台下 3.1 在Kali上使用 OpenSSL ...
- 【ACR2015】依那西普按需维持治疗策略有效抑制RA骨破坏进展
标签: 类风湿关节炎; 依那西普; 药物减停; 复发重治 对RA疾病复发患者, 依那西普按需治疗与持续足剂量治疗是否存在疗效差异? Inui K, et al. ACR 2015. Presentat ...
- ClickHouse(13)ClickHouse合并树MergeTree家族表引擎之CollapsingMergeTree详细解析
目录 建表 折叠 数据 算法 资料分享 参考文章 该引擎继承于MergeTree,并在数据块合并算法中添加了折叠行的逻辑.CollapsingMergeTree会异步的删除(折叠)这些除了特定列Sig ...
- element导航栏组件封装递归调用
element导航栏组件封装递归调用: https://blog.csdn.net/qq_21271511/article/details/109889934
- 记录篇-浪潮服务器raid卡
在说raid卡之前,首先,我们要明确,不同的raid卡型号,会有不同的配置方式,但是总体来说是大同小异的 这里举例浪潮机架式服务器经常用到的raid卡型号: PM8204 (其实像3108 ...