成员方法传参机制(重要)


成员方法传参机制

基本数据类型的传参机制

  1. 看一个案例,分析结果是什么?
public void swap(int a,int b) {//假如传的是10和20
		System.out.println("\na和b交换前的值a="+a+"\tb="+b);//a=10 b=20
		//完成a和b的交换
		int tmp=a;
		a=b;
		b=tmp;
		System.out.println("\na和b交换后的值a="+a+"\tb="+b);//a=20 b=10
	}
import java.util.Scanner;

public class MethodParameter01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
    Abc obj=new Abc();
    Scanner input =new Scanner(System.in);
    int n1=input.nextInt();
    int n2=input.nextInt();
    
    obj.swap(n1, n2);
	}

}
class Abc{
	public void swap(int a,int b) {
		System.out.println("\na和b交换前的值a="+a+"\tb="+b);
		//完成a和b的交换
		int tmp=a;
		a=b;
		b=tmp;
		System.out.println("\na和b交换后的值a="+a+"\tb="+b);
	}
}

引用数据类型的传参机制

下面的代码输出什么

public class MethodParameter02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//测试
		AB b=new AB();
//		int arr[]= {1,2,3};
//		b.test100(arr);//调用方法
//		System.out.println("main的arr数组");
//		//遍历数组
//		for(int i=0;i<arr.length;i++) {
//			System.out.println(arr[i]+"\t");
//		}
//    	System.out.println();
    	//测试
    	Person02 p=new Person02();
    	p.name="jack";
    	p.age=10;
    
    	b.test200(p);
    	//测试题,如果test200执行的是p=null,下面结果为10
    	//测试题,如果test200执行的是p=new Person();下面结果为10
    	System.out.println("main的p.age"+p.age);
	}

}
class 	Person02{
	String name;
	int age;
	
}
class AB{
	public void test200(Person02 p) {
		//p.age=10000;//修改对象属性
		//p=null;
		p=new Person02();
		p.name="Tom";
		p.age=99;
	}	
	
	//B类中编写一个方法test100
	//可以接受一个数组,在方法中修改该数组,看看原来的数组是否发生变化
	
	public void test100(int arr[]) {
		arr[0]=200;//修改元素
		//遍历数组
		System.out.println("test100d的arr数组");
		for(int i=0;i<arr.length;i++) {
			System.out.println(arr[i]+"\t");
		}
		System.out.println();
	}
}
  • 结论及示意图

引用传参传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参!

成员方法返回类型是引用类型应用实例

  1. 编写类 MyTools 类,编写一个方法可以打印二维数组的数据。
  2. 编写一个方法 copyPerson,可以复制一个 Person 对象,返回复制的对象。克隆对象, 注意要求得到新对象和原来的对象是两个独立的对象,只是他们的属性相同
public class MethodExercise02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//编写一个方法copyPerson,可以复制一个Person对象,返回复制的对象。克隆对象,
   		//注意要求得到新对象和原来的对象是两个独立的对象,,只是他们的属性相同
		Person03 p=new Person03();
	  	p.name="milan";
	  	p.age=100;
	 	MyTools02 tools= new MyTools02();
		Person03 p2=tools.copyPerson(p);
		//到此p和p2是Person对象,但是是两个独立的对象,属性相同
		System.out.println("p的属性age"+p.age+",p的名字"+p.name);
		System.out.println("p2的属性age"+p2.age+",p的名字"+p2.name);
		//这里提示:可以通过输出对象的hashCode看看对象是否是一个
		System.out.println(p==p2);
	}

}
class Person03{
	String name;
	int age;
}
class MyTools02{
	//编写一个方法copyPerson,可以复制一个Person对象,返回复制的对象。克隆对象,
    //注意要求得到新对象和原来的对象是两个独立的对象,,只是他们的属性相同
	//1.方法的返回类型boolean
		//2.方法的名字  isOdd
		//3.方法的形参 (int number)
		//4.方法体,判断
	public Person03 copyPerson(Person03 p) {
		//创建一个新的对象
		Person03 p2=new Person03();
		p2.name=p.name; //把原来的名字赋给p2.name
		p2.age=p.age;//把原来对象的年龄赋给p2.age
		return p2;
	}
}

文章作者: Chtholly2333
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Chtholly2333 !
  目录