博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《疯狂Java讲义》(七)---- 方法
阅读量:5095 次
发布时间:2019-06-13

本文共 2057 字,大约阅读时间需要 6 分钟。

一  方法的参数传递机制

  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

你可能感兴趣的文章
hdu 5402 Travelling Salesman Problem (技巧,未写完)
查看>>
[AIR] 获取U盘,打开U盘
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
django url 路由设置技巧
查看>>
三言两语说清“线性流程”
查看>>
(转)虚函数和纯虚函数区别
查看>>
ad logon hour
查看>>
获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName...
查看>>
证件照(1寸2寸)拍摄处理知识汇总
查看>>
Git入门简介
查看>>
eclipse里maven install时,报错提示jdk为无效的目标版本:1.7
查看>>
罗马数字与阿拉伯数字转换
查看>>
Eclipse 反编译之 JadClipse
查看>>
asp.net 获取IP地理位置的几个主要接口
查看>>
Python入门-函数
查看>>
[HDU5727]Necklace(二分图最大匹配,枚举)
查看>>
距离公式汇总以及Python实现
查看>>
设计模式之装饰者模式
查看>>
开启Spark history server
查看>>
【转】Linux内核调试方法总结
查看>>