成员方法传参机制
基本数据类型的传参机制
- 看一个案例,分析结果是什么?
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();
}
}
- 结论及示意图
引用传参传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参!
成员方法返回类型是引用类型应用实例
- 编写类 MyTools 类,编写一个方法可以打印二维数组的数据。
- 编写一个方法 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;
}
}