Java中不得不谈的值传递和地址传递
2018-10-29 15:32:49来源:博客园 阅读 ()
个人的一些认识,希望能对初学Java的你,或者困惑于方法参数传递的你祈祷一丝帮助!
下面是一些作者的个人观点,如果有错,欢迎各位大牛指出错误,灰常感谢您的观看与支持...
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
今天学习Java的时候,看见书中提及方法参数传递
有按值传递 和按地址传递;
1 我们如何判断一个类中它采用的值传递还是引用传递呢,我们要看类中的形参。 2 如果形参的数据是基本数据类型,那么我们就可以断定他是值传递,
eg.
本包中的People.java 和Human.java 中有对值传递的介绍;
package com.baidu; public class People { public static void main(String[] args) { // TODO Auto-generated method stub Human human = new Human("dengchunlai"); //human.yang(); 不能这样使用,因为 String yang是定义的字符串类型的类(变量),不是方法; //human.yang;//不能这样使用; String ming = human.yang; System.out.println(human.yang); //但可以这样使用; System.out.println(ming); } }
package com.baidu; public class Human { String yang; public Human(String st1) { // TODO Auto-generated constructor stub yang = st1; } }
上面的源代码是Java中的按值传递:
那什么是引用传递呢?
如果形参里的数据为 类 ; 那么我们就断定他是引用传递; (*)按引用传递参数时,被调用的方法中的代码将直接访问原始对象 ->[按引用传递的基础]
package com.baidu; class Data { String msg; public Data(String str) { // TODO Auto-generated constructor stub this.msg = str; } // public Data() { // // } }
package com.baidu; public class DataPrinter { void print(Data d) { System.out.println(d.msg); } public void setMsg(Data d) { d.msg = "Hello to Java ! "; } }
public class MethodCallDemo2 { public static void main(String[] args) { // TODO Auto-generated method stub Data data = new Data("Hello from Java !"); //创建了一个Data类对象的一个引用data,同时new了一个有参的构造函数; DataPrinter dp = new DataPrinter(); // System.out.println("第一次输出结果;"+ data.msg); dp.setMsg(data); System.out.println("第二次输出结果:"+data.msg); } }
证明()里是一个无参的构造方法:
[个人心得]:在编写代码的时候发现 Data data = new Data("Hello from java !"); 在使用这句语句的时候我在Data 我们需要在类中建立一个带字符串型的形参的构造方法; 由于在之前单独使用创建的时候是调用无参的构造函数,我在想他放到构造一个默认的无参的构造函数呢,于是我在Data类中构造了一个无参的 但事实证明,程序出现报错,由此可证明()中确实是一个构造函数,但为什么不显示他的构造函数呢,第一句语句new的是一个构造函数,且并不显示,可能由于系统默认吧!
言归正传:
这个代码的核心就是 dp.setMsg(data); 我们怎么理解呢,DataPrinter类中的设置器中的形参是Data d; 他这么设置形参的原因是什么呢,可能由于主方法的 dp.setMsg(data); 是要求Data类,所以引用传递,由于(按引用传递参数时,被调用的方法中的代码将直接访问原始对象),所以setMsg()这个方法里面的代码 可以直接访问Data这个原始类的原始对象String msg;
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash