package java_study01;
/**
* 可以个数形参的方法的使用:jdk5.0新特性
* 1.可变个数形参的格式:数据类型 ... 变量名
* 2.可变个数形参的方法在调用时,给可变个数的形参赋值时,可以赋值的个数为:0个,1个,。。。。
* 3.可变个数形参的方法与同名的方法之间,彼此构成重载
* 4.可变个数形参的方法与形参类型相同的数组的方法不能同时出现在类中。
* 5.可变个数形参必须声明为方法形参的最后一个参数。
* 6.在一个方法的形参位置,最多只能声明一个可变个数形参
*/
public class MethodArgs {
public static void main(String[] args) {
MethodArgs m = new MethodArgs();
m.show("哈哈哈"); //调用可变个数形参的方法
m.show(); //调用可变个数形参的方法
m.show("AA","bb","CC"); //调用可变个数形参的方法
}
public void show(int i) {
System.out.println(i);
}
// public void show(String s) {
// System.out.println(s);
// }
// 可变个数形参的方法
public void show(String ... strs) {
System.out.println("show(String ... strs)");
// 遍历方式和数组相同
for(int i = 0;i < strs.length;i++){
System.out.println(strs[i]);
}
}
//不能再声明了。
// public void show(String[] strs){
//
// }
public void show(int i,String... strs) {
}
//报错:The variable argument type String of the method show must be the last parameter
// public void show(int... strs,int i) {
//
// }
}
变量赋值机制
package com.atguigu.java1;
/**
* 变量的值传递机制:
* 如果赋值的基本数据类型的变量,则传递的是基本数据类型变量所保存的具体的数值。
* 如果赋值的引用数据类型的变量,则传递的是引用数据类型变量所保存的地址值。
*
*/
public class ValueTransferTest1 {
public static void main(String[] args) {
int m = 10;
int n = m;
System.out.println("m = " + m + ",n = " + n);
m = 20;
System.out.println("m = " + m + ",n = " + n);
System.out.println("------------------");
Order m1 = new Order();
m1.orderId = 1001;
Order m2 = m1;//o1,o2就同时指向堆空间中创建的同一个对象实体
System.out.println(m2.orderId);//1001
m2.orderId = 1002;
System.out.println(m1.orderId);
}
}
class Order{
int orderId;
}
原理
值赋值机制:针对基本数据类型
package java_study01;
/**
*
* 方法的参数的传递机制:值传递机制
*
* 1.形参:方法在声明时,指明的参数。
* 实参:方法在被调用时,具体给形参赋的值,就是实参
*
* 2.如果方法的形参是基本数据类型的变量,则方法调用时,传递的实参即为基本数据类型变量所保存的具体的数值。
* 如果方法的形参是引用数据类型的变量,则方法调用时,传递的实参即为引用数据类型变量所保存的地址值。
*/
public class ValueTransfer {
public static void main(String[] args) {
int m = 10;
int n = 5;
System.out.println("m = " + m + ",n = " + n);
// 交换m和n的值
// int temp = m;
// m = n;
// n = temp;
// 并没有实现m和n值的交换
ValueTransfer v = new ValueTransfer();
v.swap(m, n);
// 变量值没有发生任何改变
System.out.println("m = " + m + ",n = " + n); //10,20
}
// 交换m和n变量的值。--没有成功(相当于修改的是swap方法中的m和n,并没有修改mian方法中的m,n)
public void swap(int m, int n) {
int temp = m;
m = n;
n = temp;
System.out.println("m = " + m + ",n = " + n); //20,10
}
}
值赋值机制:针对引用数据类型
package com.atguigu.java1;
public class ValueTransferTest3 {
public static void main(String[] args) {
Data d = new Data();
System.out.println("m = " + d.m + ",n = " + d.n);
//调用方法,实现Data中m和n值的互换
ValueTransferTest3 v = new ValueTransferTest3();
v.swap(d);
System.out.println("m = " + d.m + ",n = " + d.n);
}
public void swap(Data data){
int temp = data.m;
data.m = data.n;
data.n = temp;
}
}
class Data{
int m = 10;
int n = 5;
}