一  方法的参数传递机制

  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讲义》(七)---- 方法相关推荐

  1. 《疯狂JAVA讲义》学习笔记(一)

    本人之前一直从事iOS开发,最近开始接触Eclipse插件开发,打算先重拾一下扔了很久的Java.看到大家都在网上推荐李刚的<疯狂JAVA讲义>,于是下了一本开始学习.以下为前七章本人记录 ...

  2. 学习《疯狂Java讲义第4版》PDF+代码+课件+面试题分析

    学习java选择了<疯狂java讲义>最新的第四版,用了两个多月时间看完,一边阅读,一边敲代码.对Java有了不少新的认识.书中实例清晰明了,讲解也是娓娓道来.Java可以编写图形桌面系统 ...

  3. 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条

    http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程 ...

  4. 《疯狂Java讲义精粹》读书笔记2 ------ 多态

    -----------------<疯狂Java讲义精粹>2读书笔记--------------- Java引用变量有两个类型: · 编译时类型(由声明该变量时使用的类型决定) · 运行时 ...

  5. java画图颜色_手绘板,多种颜色选择。我抄的《疯狂java讲义》的,包我乱导的,但代码能用。...

    [java]代码库import javax.swing.*; import java.awt.image.*; import java.awt.datatransfer.*; import javax ...

  6. 《疯狂Java讲义》学习笔记 第六章 面向对象(下)

    <疯狂Java讲义>学习笔记 第六章 面向对象(下) 6.1包装类 基本数据类型 包装类 byte Byte short Short int Integer long Long char ...

  7. 李刚疯狂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 ...

  8. [疯狂Java讲义精粹] 第十三章|类加载机制与反射

    java.lang.reflect包下的接口和类, 包括Class, Method, Filed,Constructor和Array等, 这些类分别代表类, 方法, Field, 构造器和数组, Ja ...

  9. 疯狂Java讲义:P200接口

    接口 Output package lee; public interface Output {//接口里定义的成员变量只能是常量int MAX_CACHE_LINE=50;//接口里定义的只能是pu ...

  10. 疯狂Java讲义_Chapter4_编写控制台的五子棋游戏

    编写控制台的五子棋游戏 昨天复习了下<疯狂Java讲义>,完成前几章的习题, 现在基本完成了控制台五子棋游戏的编写,能够按照要求 保证用户下和电脑下的棋上不能已经有棋子 判断横.竖.左斜. ...

最新文章

  1. 独热编码(One-Hot)的理解
  2. 快速理解编码,unicode与utf-8
  3. 无盘服务器怎么修改ip,怎么进入无盘服务器修改IP地址呢
  4. 利用Sql Server2005发送邮件
  5. 【今晚7点半】:主编对话Netless白板创始人伍双
  6. .NET Core微服务之基于Exceptionless实现分布式日志记录
  7. MySQL的mysql_insert_id和LAST_INSERT_ID
  8. STL之 set简略介绍。
  9. 互联网日报 | 5月12日 星期三 | 全国人口共14.1178亿人;长安汽车迈入2000万辆时代;Soul递交纳斯达克招股书...
  10. 我将要关注的kaggle比赛
  11. ts转换成mp4,ts转mp4方法
  12. Jetpack Room基本用法
  13. 常用的logo设计技巧
  14. 关于路由器,交换机,宽带猫(光猫)的相关概念详解
  15. 网件4300_如何重命名Netgear Arlo相机
  16. 键值数据库PebblesDB读后感
  17. BERT微调做中文文本分类
  18. 上海建融家园获资本数百万元天使轮融资
  19. fastjson和json对比。fastjson快速入门。
  20. js选择器获取元素的value值,如何判断为空

热门文章

  1. 软件安装——在Vmware中安装CentOS7(转载)
  2. 从标准输入读取几行输入。每行输入都要打印到标准输出上,前面加上行号。...
  3. Android应用程序线程消息循环模型分析
  4. open*** 跨平台部署
  5. 网络战争阴影临近,伊朗核设施受攻击
  6. 软件测试——软件开发过程
  7. leetCode:reverseInteger 反向整数 【JAVA实现】
  8. 手机不ROOT使用xposed框架-微信群同步-微咖讲师-安装教程
  9. SpringMVC 工作流程
  10. ajax传图片的方法