书接上回:介绍完方法、对象的基本概念后来具体看一看方法和对象之间的值传递问题。
方法的可变参数
①采用数组形参来定义方法
public static void test(int a ,String[] books);
ps:如果没有参数要定义一个空数组或者是null
public class Personn //数组法
{
public void printInfo(String[] args)//定义一个方法,形参是一个字符串数组
{
for(int i=0;i<args.length;i++)
System.out.println(args[i]);//将输入的数组一一打印出来。
}
}
public class text3 //检验
{
public static void main(String[] args)
{
Personn nn=new Personn();//声明一个Personn的对象
String[] ss=new String[]{"caizi","7952","火星","159263"};//建立一个String类型的数组
nn.printInfo(ss);//引用nn对象的方法,实参参就是字符串数组ss。没有参数要填null
}
}
结果:
caizi
7952
火星
159263
②以可变个数形参来定义方法
==public static void test(int a ,String…books);==不可变的放前面,可变的放最后。
引用时不需要创建数组,会有一定不同
ps:如果没有参数可以不填
public class Personn //...法
{
public void printInfo1(String... args)//使用Java特有的... 方式达成可变参数的输出,内部还是用迭代的办法。
{
for(int i=0;i<args.length;i++)
System.out.println(args[i]);//将输入的数组一一打印出来。
}
}
public class text3 //检验
{
public static void main(String[] args)
{
Personn nn=new Personn();//声明一个Personn的对象
String[] ss=new String[]{"caizi","7952","火星","159263"};//建立一个String类型的数组
nn.printInfo1("八戒","八戒","你真可爱");//需要特别注意的用法
nn.printInfo1(ss);//普通传递数组
}
}
结果:
八戒
八戒
你真可爱
caizi
7952
火星
159263
- 总结:
1.可变参数:方法参数部分指定类型的参数个数是可变多个
2.声明方式:方法名(参数的类型名…参数名)
或者方法名(参数类型名[ ] 参数名)
3.可变参数方法的使用与方法参数部分使用数组是一致的
4.方法的参数部分有可变形参,需要放在形参声明的最后
方法的参数传递
方法,必须有其所在类或对象调用才有意义。
若方法含有参数:
- 形参:方法声明时的参数
- 实参:方法调用时实际传给形参的参数值
Java虚拟机的存储原理
Java的实参值如何传入方法呢?
Java里方法的参数传递方式只有一种:值传递。
即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。
- 基本数据类型在参数的传递过程中,就是将实参的值赋给形参。
- 对象在参数传递中传递的是地址(就是将heap中的值传递了),改变了对象的“值”就是将heap中的值给改了,没有赋值给形参。(这个跟C语言的指针有点类似)