`
Scliu123
  • 浏览: 39977 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

JDK_实例(Java 参数传递)

阅读更多
package book.oo;

public class PassParamter {

	public PassParamter() {
	}

	public void methodA(ComplexNumber comNum) {
		// comNum这个引用指向了一个新new出来的对象。
		comNum = new ComplexNumber(1, 2);
	}

	public void methodB(ComplexNumber comNum) {
		// comNum这个引用指向的还是同一个对象,但是,这里修改该对象的值。
		comNum.setRealPart(1);
		comNum.setRealPart(2);
	}

	public void methodC(int num) {
		// 将num的值加1
		num++;
	}

	public static void main(String[] args) {

		PassParamter test = new PassParamter();
		ComplexNumber comNum = new ComplexNumber(5, 5);
		System.out.println("调用methodA方法之前,comNum: " + comNum.toString());
		test.methodA(comNum);
		System.out.println("调用methodA方法之后,comNum: " + comNum.toString());
		System.out.println("调用methodB方法之前,comNum: " + comNum.toString());
		test.methodB(comNum);
		System.out.println("调用methodB方法之后,comNum: " + comNum.toString());
		int num = 0;
		System.out.println("调用methodC方法之前,num: " + num);
		test.methodC(num);
		System.out.println("调用methodC方法之后,num: " + num);

//		 调用methodA方法之前,comNum: 5.0 + 5.0i
//		 调用methodA方法之后,comNum: 5.0 + 5.0i
//		 调用methodB方法之前,comNum: 5.0 + 5.0i
//		 调用methodB方法之后,comNum: 2.0 + 5.0i
//		 调用methodC方法之前,num: 0
//		 调用methodC方法之后,num: 0

		/**
		 * Java的参数传递策略:
		 * 0,所谓传值的意思是:在调用方法时,将参数的值复制一份,方法里面用复件,方法外面用原件,复件改变了,不影响原件;原件改变了,不影响复件。
		 * 1,对于基本数据类型,比如int,long等类型,采用传值的策略。将参数的值复制一份后传给方法,方法可以改变参数值的复件,但不会改变参数值的原件。
		 * 2,对于对象类型,也采用的传值策略,不过,是将参数的引用复制(2个引用指向同一个对象)一份传给方法,方法可以改变参数引用的复件,但不会改变参数引用的原件。
		 * 
		 * 解释三个输出:
		 * 1,调用methodA方法时,首先将comNum对象的引用复制一份,将引用的复件传递给methodA方法,main方法保持引用的原件,此时,引用原件和引用复件都指向comNum对象。
		 * 执行comNum = new ComplexNumber(1,2);语句后,将引用复件指向了另外一个新的对象,此时,引用复件和引用原件指向的是不同的对象。回到main方法时,操作的仍然是引用原件指向的comNum对象。
		 * 2,调用methodB方法时,首先将comNum对象的引用复制一份,将引用的复件传递给methodB方法,main方法保持引用的原件,此时,有引用原件和引用复件都指向comNum对象。
		 * 执行comNum.setRealPart(1);comNum.setRealPart(2);语句后,修改了引用复件所指对象的内容,而此时,引用复件和引用原件指向的是同一个对象,因此,引用原件指向的对象的内容也改变了。回到main方法时,comNum对象也改变了。
		 * 3,调用methodC方法时,首先将num的值复制一份,将值的复件传递给methodC方法,main方法保持值的原件。 执行num
		 * ++;语句后,复件的值会加1。回到main方法时,操作的仍然是原件,值保持不变。
		 */

	}
}

 

分享到:
评论

相关推荐

    Java JDK实例宝典

    全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...

    Java开发技术大全(500个源代码).

    invokeByObject.java 对象实参传递示例程序 invokeByValue.java 传值调用示例程序 invokeMethod.java 同一个类中调用方法示例 invokeOther.java 类的外部调用方法示例 invokeStaticMethod.java 调用静态方法...

    java8源码-jdk8:Java8(又称为jdk1.8)是Java语言开发的一个主要版本。Oracle公司于2014年3月18日发布Java

    表达式:Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。 方法引用:方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言...

    mac os jdk8

    Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。 方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用...

    java编程基础,应用与实例

    1.3 安装Java程序开发工具(JDK1.5) 2 1.3.1 安装JAVA 2 Standard Edition 1.5.0 3 1.3.2 安装开发文档及最终完成 5 1.3.3 Java开发工具 6 1.4 Java程序开发过程 7 1.5 运行第一个Java程序 7 1.6 巩固...

    java 导出报表实例

    JAVA:JDK1.4 IDE:Eclipse3.1 2.使用包 jexcelapi_2_5_8 3.备注: 通过四种报表的标识来动态生成Table和Excel 标识可通过cn.com.test.IConstants类获得 调用cn.com.test.vo下的值对象来传递标识和数据 如果使用Object...

    jdk8-112安装包.rar

    Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。 方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例057 用List集合传递学生信息 70 实例058 用TreeSet生成不重复自动排序 随机数组 71 实例059 Map映射集合实现省市级联选择框 73 第4章 字符串处理技术 75 4.1 格式化字符串 76 实例060 把数字格式化为货币字符串 ...

    Java项目开发与毕业设计指导

    当然也可以在Eclipse中配置运行时程序的参数来运行程序(运行时参数主要负责传递端口号,服务器地址等)。 Ch12:基于Agent实现的分布式计算 本程序的运行基于Aglet,首先要安装和配置Aglet:推荐安装Aglet稳定...

    java的servlet调用Kettle5.0的实例

    java的servlet调用Kettle5.0的实例。网上的例子比较少,特意写了一个上传上来供大家看。我的运行环境是myeclipse2016+jdk1.7+tomcat7。

    Java语言程序设计的课程设计项目——利用Java实现地球系动画完整实现实例(第2部分).pdf

    杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究, 1/13 页 1 1.1 利用 Java 实现地球系动画完整实现实例(第 2 部分) 1.1.1 利用 MyEclipse 等工具开发 Java 程序 ——...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    1.5.1 JDK和Java平台 16 1.5.2 Java编译器(Java Compiler) 17 1.5.3 Java类库(Java Class Libraries) 17 1.5.4 Java虚拟机(Java Virtual Machine) 17 1.5.5 HelloWorld的整个流程 17 1.6 小结:我们学会...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    1.5.1 JDK和Java平台 16 1.5.2 Java编译器(Java Compiler) 17 1.5.3 Java类库(Java Class Libraries) 17 1.5.4 Java虚拟机(Java Virtual Machine) 17 1.5.5 HelloWorld的整个流程 17 1.6 小结:我们学会...

    疯狂JAVA讲义

    5.2.2 方法的参数传递机制 116 5.2.3 形参长度可变的方法 120 5.2.4 递归方法 121 5.2.5 方法重载 123 学生提问:为什么方法的返回值类型不能用于区分重载的方法? 124 5.3 成员变量和局部变量 124 5.3.1 成员...

Global site tag (gtag.js) - Google Analytics