JavaSE 之 面向对象(上)可变个数形参&&变量赋值机制

本文介绍了Java中的方法参数传递机制,重点讲解了值传递对于基本数据类型和引用数据类型的区别。同时,详细阐述了可变个数形参的使用规则,包括其声明、调用和遍历方式,并通过示例展示了如何在方法中实现可变个数参数的功能。此外,还探讨了方法重载和可变个数形参的关系以及限制条件。
摘要由CSDN通过智能技术生成
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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值