《疯狂Java讲义》(七)---- 方法
一 方法的参数传递机制
Java方法的参数传递方式只有一种:值传递。就是将实际参数值的副本传入方法内,而参数本身不会受到任何影响。
eg.
基本类型的值传递
public class PrimitiveTransferTest { public static void swap(int a, int b) {
int tmp = a;
a = b;
b = tmp; System.out.println("in swap(), a =" + a + " b =" + b);
} public static void main(String[] args) {
int a = 6;
int b = 9;
swap(a, b);
System.out.println("after swap(), a =" + a + ", b =" + b);
} }
输出结果:
in swap(), a =9 b =6
after swap(), a =6, b =9
所以main方法中的a和b,并不是swap方法中的a和b。
main()开始定义了a和b两个局部变量,存在main方法的栈区。当程序执行swap方法时,系统进入swap方法中,并将main方法中的a和b变量作为参数值传入swap方法,传入swap方法的只是a和b的副本,而不是a和b本身,进入swap方法后系统产生了4个变量,即main()的a和b,swap()中的a和b。
在main方法中调用swap方法时,main方法还没结束,因此系统为main和swap分配两块栈区,用于保存main和swap的局部变量。main方法中a和b变量作为参数值传入swap方法,实际上是在swap方法栈区中重新产生了两个变量a和b,并将main方法栈区中a和b变量的值分别赋给swap方法栈区的a和b参数(就是对swap方法的a和b形参进行初始化),此时,系统存在两个变量a,两个变量b,只是存在不同的方法栈区中。这就是值传递。
eg.
引用类型的值传递
public class ReferenceTransferTest { public static void swap(DataWrap dw) {
int tmp = dw.a;
dw.a = dw.b;
dw.b = tmp; System.out.println("in swap(), dw.a =" + dw.a + ", dw.b =" + dw.b);
} public static void main(String[] args) {
DataWrap dw = new DataWrap();
dw.a = 6;
dw.b = 9;
swap(dw); System.out.println("after swap(), dw.a = " + dw.a + ", dw.b =" + dw.b); } } class DataWrap { public int a; public int b;
}
输出结果:
in swap(), dw.a =9, dw.b =6
after swap(), dw.a = 9, dw.b =6
main方法中开始调用swap方法,main方法并未结束,系统会分别开辟出main和swap两个栈区,用于存放main和swap方法的局部变量。调用swap方法时,dw变量作为实参传入swap方法,同样采用值传递的方式:把main方法里的dw变量值赋给swap方法的dw形参,从而完成swap方法的dw形参的初始化,main方法中dw是一个引用,保存了DataWrap对象的地址值,当把dw的值赋给swap的dw形参后,即swap方法的dw形参也保存这个地址值,也引用对内存中的DataWrap对象。当程序在swap方法中操作dw形参时,由于dw制式一个引用变量,故实际操作的还是对内存中的DataWrap对象。此时,不管操作main方法里的dw变量,还是操作swap方法里的dw参数,其实都是操作它所引用的DataWrap对象。
二 形参个数可变的方法
从JDK1.5之后,Java允许定义形参个数可变的参数,从而允许为方法制定数量不确定的形参。在定义方法时,在最后一个形参的类型后增加三点,则表明该形参可以接受多个参数值,多个参数值被当作数组传入。
test(int a, String... books);
《疯狂Java讲义》(七)---- 方法的更多相关文章
- 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题
调用同步锁的wait().notify().notifyAll()进行线程通信 看这个经典的存取款问题,要求两个线程存款,两个线程取款,账户里有余额的时候只能取款,没余额的时候只能存款,存取款金额相同 ...
- 疯狂java讲义——继承
本文章只是记录我在学习疯狂java讲义里面,对之前java知识查缺补漏进行的总结. 方法重写 方法重写要遵循"两同两小一大"规则."两同"即方法名相同.形参列表 ...
- 《疯狂java讲义》笔记 1-5章
1.编译语言和解释语言理解,摘自李刚老师的<疯狂Java讲义>第三版: 就是说,Java和.net都是编译型有事解释型语言.编译型就是根据不同平台编译成不同的可执行机器码,编译过程中会进行 ...
- udp协议基础(转自疯狂java讲义)
第17章 网络编程 17.4 基于UDP协议的网络编程 UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发 ...
- 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条
http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程 ...
- 【Java】-NO.16.EBook.4.Java.1.011-【疯狂Java讲义第3版 李刚】- AWT
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.011-[疯狂Java讲义第3版 李刚]- AWT Style:EBook Series:Java ...
- 【Java】-NO.16.EBook.4.Java.1.012-【疯狂Java讲义第3版 李刚】- JDBC
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.012-[疯狂Java讲义第3版 李刚]- JDBC Style:EBook Series:Java ...
- 【Java】-NO.16.EBook.4.Java.1.006-【疯狂Java讲义第3版 李刚】- 垃圾回收
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.006-[疯狂Java讲义第3版 李刚]- 垃圾回收 Style:EBook Series:Java ...
- 【Java】-NO.16.EBook.4.Java.1.007-【疯狂Java讲义第3版 李刚】- Java基础类
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.007-[疯狂Java讲义第3版 李刚]- Java基础类 Style:EBook Series:J ...
- 【Java】-NO.16.EBook.4.Java.1.008-【疯狂Java讲义第3版 李刚】- 集合/容器
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.008-[疯狂Java讲义第3版 李刚]- 集合 Style:EBook Series:Java Si ...
随机推荐
- 简单的划分数问题<划分问题>
将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 思路: 动态规 ...
- DWR 整合之Struts2.3.16
DWR 能够和任何框架结合. DWR 和 Struts 整合有 2 个层次.最基础的层次就是同时使用这两个框架,这是非常容易的,但是这样就不允许在 DWR 和 Struts 之间共享 Action 了 ...
- 转:Web测试需要了解的知识
这里只是介绍Web测试相对于其他类型软件的测试额外需要了解的内容,关于测试方法不是本文的重点,里面谈到的每一项在以后的文章中再说明.大家看到这些内容可能都不陌生,我晒出的内容也许不对或有误导,请大家指 ...
- hibetnateTemplate常用方法
一.hibetnateTemplate常用方法 1.delete(Object entity) 删除指定的持久化实例在程序中一般先用 Assert.notNull和 Assert.isTrue断 ...
- 关于源码编译每次提示有错误 要make update-api
最近编译newline的版本的时候..同事修改了andoid默认输入法为百度.这是系统自动提供的API,所以每次编译会提示 此时在编译源码生成SDK的过程中会出现这个问题:************** ...
- javascript的 replace() 方法的使用讲解
String.prototype.replace() The replace() method returns a new string with some or all matches of a p ...
- [iOS]C语言技术视频-11-指针变量练习一(交换值)
下载地址: 链接: http://pan.baidu.com/s/1pJIcGm3 密码: s83p
- Linux下hosts、host.conf、resolv.conf
/etc/resolv.conf 该文件是DNS域名解析的配置文件,它的格式很简单,每行以一个关键字开头,后接配置参数. resolv.conf的关键字主要有四个,分别是: nameserver ...
- Nutch是个不错的选择
对搜索引擎的理解:我们并没有google 的源代码,因此学习搜索引擎Nutch是个不错的选择.了解一个大型分布式的搜索引擎如何工作是一件让人很受益的事情.在写 Nutch的过程中,从学院派和工业派借鉴 ...
- JAVA中传递参数乱码问题
url传递中文如果jsp页面,myeclipse.web.xml中org.springframework.web.filter.CharacterEncodingFilter,都是UTF-8编码,直接 ...