《疯狂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);
转载于:https://www.cnblogs.com/IvySue/p/6288577.html
《疯狂Java讲义》(七)---- 方法相关推荐
- 《疯狂JAVA讲义》学习笔记(一)
本人之前一直从事iOS开发,最近开始接触Eclipse插件开发,打算先重拾一下扔了很久的Java.看到大家都在网上推荐李刚的<疯狂JAVA讲义>,于是下了一本开始学习.以下为前七章本人记录 ...
- 学习《疯狂Java讲义第4版》PDF+代码+课件+面试题分析
学习java选择了<疯狂java讲义>最新的第四版,用了两个多月时间看完,一边阅读,一边敲代码.对Java有了不少新的认识.书中实例清晰明了,讲解也是娓娓道来.Java可以编写图形桌面系统 ...
- 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条
http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程 ...
- 《疯狂Java讲义精粹》读书笔记2 ------ 多态
-----------------<疯狂Java讲义精粹>2读书笔记--------------- Java引用变量有两个类型: · 编译时类型(由声明该变量时使用的类型决定) · 运行时 ...
- java画图颜色_手绘板,多种颜色选择。我抄的《疯狂java讲义》的,包我乱导的,但代码能用。...
[java]代码库import javax.swing.*; import java.awt.image.*; import java.awt.datatransfer.*; import javax ...
- 《疯狂Java讲义》学习笔记 第六章 面向对象(下)
<疯狂Java讲义>学习笔记 第六章 面向对象(下) 6.1包装类 基本数据类型 包装类 byte Byte short Short int Integer long Long char ...
- 李刚疯狂java讲义第3_【Java】-NO.16.EBook.4.Java.1.009-【疯狂Java讲义第3版 李刚】- 泛型...
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.009-[疯狂Java讲义第3版 李刚]- 泛型 Style:EBook Series:Java Si ...
- [疯狂Java讲义精粹] 第十三章|类加载机制与反射
java.lang.reflect包下的接口和类, 包括Class, Method, Filed,Constructor和Array等, 这些类分别代表类, 方法, Field, 构造器和数组, Ja ...
- 疯狂Java讲义:P200接口
接口 Output package lee; public interface Output {//接口里定义的成员变量只能是常量int MAX_CACHE_LINE=50;//接口里定义的只能是pu ...
- 疯狂Java讲义_Chapter4_编写控制台的五子棋游戏
编写控制台的五子棋游戏 昨天复习了下<疯狂Java讲义>,完成前几章的习题, 现在基本完成了控制台五子棋游戏的编写,能够按照要求 保证用户下和电脑下的棋上不能已经有棋子 判断横.竖.左斜. ...
最新文章
- 独热编码(One-Hot)的理解
- 快速理解编码,unicode与utf-8
- 无盘服务器怎么修改ip,怎么进入无盘服务器修改IP地址呢
- 利用Sql Server2005发送邮件
- 【今晚7点半】:主编对话Netless白板创始人伍双
- .NET Core微服务之基于Exceptionless实现分布式日志记录
- MySQL的mysql_insert_id和LAST_INSERT_ID
- STL之 set简略介绍。
- 互联网日报 | 5月12日 星期三 | 全国人口共14.1178亿人;长安汽车迈入2000万辆时代;Soul递交纳斯达克招股书...
- 我将要关注的kaggle比赛
- ts转换成mp4,ts转mp4方法
- Jetpack Room基本用法
- 常用的logo设计技巧
- 关于路由器,交换机,宽带猫(光猫)的相关概念详解
- 网件4300_如何重命名Netgear Arlo相机
- 键值数据库PebblesDB读后感
- BERT微调做中文文本分类
- 上海建融家园获资本数百万元天使轮融资
- fastjson和json对比。fastjson快速入门。
- js选择器获取元素的value值,如何判断为空