Java笔记_成员方法传参机制

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

Parameter(参数)、Method(方法)、Exercise(练习)

基本数据类型的传参机制

看一下案例,将main中的值传递给类中对象

/**
* @ClassName MethodParameter
* @Description TODO
* @Author Orange
* @Date 2021/4/13 13:42
* @Version 1.0
**/
public class MethodParameter {
   public static void main(String[] args) {
       int a = 10;
       int b = 20;
   //创建AA 对象名字 obj
       BB obj = new BB();
       obj.swap(a, b);                                                 //调用swap
       System.out.println("main 方法a=" + a + " b=" + b);                //a=10 b=20
       //小结:形参的改变是不会影响实参的值的
   }
}

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

程序运行结果:
-------------------
a 和b 交换前的值
a=10	b=20

a 和b 交换后的值
a=20	b=10
main 方法a=10 b=20
-------------------

示意图
小结

  基本数据类型传递的是值(即值的拷贝),形参的任何改变不会影响实参!


引用数据类型的传参机制

看一下案例:

  • D 类中编写一个方法test100,可以接收一个数组,在方法中修改该数组,看看原来的数组是否变化?

  • D 类中编写一个方法test200,可以接收一个Person(age,sal)对象,在方法中修改该对象属性,看看原来的对象是否变

/**
* @ClassName MethodParameter02
* @Description TODO
* @Author Orange
* @Date 2021/4/14 9:15
* @Version 1.0
**/
public class MethodParameter02 {
   public static void main(String[] args) {
       //测试
       D d = new D();                          //创建一个D类对象d
       int[] arr = {1, 2, 3};                  //建立一个以为数组
       System.out.println("调用test100前,数组情况:");
       for(int i = 0; i < arr.length; i++) {   //打印调用test100前 mian中数组
           System.out.print(arr[i] + "\t");
       }
       System.out.println();
       d.test100(arr);                         //调用方法test100(arr);
       System.out.println("调用test100后,数组情况:");
       //遍历数组
       for(int i = 0; i < arr.length; i++) {   //打印调用test100后 mian中数组
           System.out.print(arr[i] + "\t");
       }
       System.out.println();
   }
}
class D {
   //D 类中编写一个方法test100,
   //可以接收一个数组,在方法中修改该数组,看看原来的数组是否变化
   public void test100(int[] arr) {
       arr[0] = 200;//修改元素
       //遍历数组
       System.out.println(" test100中数组情况");
       for (int i = 0; i < arr.length; i++) {  //打印修改后test100中的数组
           System.out.print(arr[i] + "\t");
       }
       System.out.println();
   }
}

程序运行结果:
-----------------------
调用test100前,数组情况:
1	2	3	
test100中数组情况
200	2	3	
调用test100后,数组情况:
200	2	3	
-----------------------

示意图
小结

  引用数据类型参数传递的是引用数据所在的地址值,由于相同的地址指向的是同一区域的值,对该区域的值进行修改后,在main中由于地址没变,指向的还是那片区域,但是其中的值已经在调用test100时被改变了,所以在打印main中数组时发生了变化,这就是与基本数据类型传递的区别。引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参!


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

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

/**
* @ClassName MethodExercise01
* @Description TODO
* @Author Orange
* @Date 2021/4/13 15:46
* @Version 1.0
**/
import java.sql.SQLOutput;
import java.util.Scanner;

public class MethodExercise01 {
   public static void main(String[] args) {
       Info p = new Info();
       p.age = 100;
       p.name = "Orange";
       //创建tools
       MyTools tools = new MyTools();
       Info p2 = tools.copyPerson(p);

       //至此,p和 p2是Info对象,但是是两个对立的对象,属性相同
       System.out.println("p的属性 age = " + p.age + " 名字 = " + p.name);
       System.out.println("p的属性 age = " + p.age + " 名字 = " + p.name);
       //可以同对象之间相互比较看看是否为同一个对象
       System.out.println(p == p2);            //False
   }
}

class Info{
   String name;
   int age;
}


class MyTools {
   public void printArray(int[][]arr) {
       for(int i = 0; i < arr.length; i++) {
           for(int j = 0; j < arr[i].length; j++) {
               System.out.println(arr[i][j]);
           }
           System.out.println();
       }
   }

   public Info copyPerson(Info p){
       //创建一个新的对象
       Info p2 = new Info();
       p2.name = p.name;//把原来对象的名字赋给p2.name
       p2.age = p.age;//把原来对象的年龄赋给p2.age

       return p2;
   }
}

程序运行结果:
-------------------------------
p的属性 age = 100 名字 = Orange
p的属性 age = 100 名字 = Orange
false
-------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OrangeQG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值