Java培训SE基础 对象的传递

1. 为什么要传递对象

在有些方法中, 功能的完成除了需要一些基本数据外, 还需要复杂类型, 比如在Teacher类中方法

public void lesson() {

    // 老师上课的代码, 老师上课时, 需要一台电脑, 这时就可以通过参数传递一个电脑对象

}

修改为

public void lesson(Computer computer) {

// 老师上课的代码, 老师上课时, 需要一台电脑, 这时就可以通过参数传递一个电脑对象

// 这样在老师上课的代码中, 就可以直接使用传入的Computer对象.

}

2.对象如何传递

在方法调用时, 由调用者传实参时,负责把对象传给方法.

public class Computer {    

       private double cpu;

       private int memory;    

       public Computer() {}     

       public Computer(double cpu, int memory) {

              this.cpu = cpu;

              this.memory = memory;

       } 

       public void setCpu(double cpu) {

              this.cpu = cpu;

       }    

       public double getCpu() {

              return cpu;

       }    

       public void setMemory(int memory) {

              this.memory = memory;

       }      

       public int getMemory() {

              return memory;

       }    

       public String say() {

              return “CPU:” + cpu + “GHz, 内存:” + memory + “G”;

       }    

}

 

public class Teacher {   

       private String name;

       private int age = 30;

       private String gender = “女”;  

       public Teacher() { // 无参构造器

              this(“佟刚”, 35, “女”);  

       }     

       public Teacher(String name, int age, String gender) {

              this.name = name;

              this.age = age;

              this.gender = gender;

       }     

       public void setName(String name) {

              this.name = name;

       }     

       public String getName() {

              return name;

       }    

       public void setAge(int age) {

              this.age = age;

       }     

       public int getAge() {

              return age;

       }     

       public void setGender(String gender) {

              this.gender = gender;

       }    

       public String getGender() {

              return gender;

       }   

       public void lesson(Computer com) { // 这个方法应该需要一台电脑才能上课

              System.out.println(“[” + this.name + “] 老师使用电脑[” + com.say() + “]在上课”);

       }      

       public String say() {

              return “姓名:” + this.name + “,年龄:” + this.age + “,性别:” + this.gender;

       }

}

 

public class TeacherTest {      

       public static void main(String[] args) {

              Teacher t = new Teacher(“李四”, 25, “女”);

              Computer com = new Computer(3.5, 4); // 要传递的对象先创建好

              t.lesson(com); // 通过实参传递对象

        // 以上代码打印输出为”[李四] 老师使用电脑[CPU:3.5GHz,内存:4G]在上课”

       }      

}

3.传递的是什么

在方法调用中的实参com是在main方法中声明的引用变量, 但是这个引用指向了在main中创建的新的Computer对象, 所以在lesson方法执行时, 接收到的是对象的引用, 通过引用使用了对象.

4.对象传递的优点

即使对象很大, 属性很多, 在对象传递时, 并不是把对象本身复制了一份, 而是只把对象的引用传递了, 优点就是速度快.

5.对象传递的危险性

危险性就在于因为传递了对象的引用, 这样通过引用一方面可以读取对象的属性或调用对象的方法, 同时如果通过引用直接修改对象的属性, 也会导致对象属性的变化, 所以当把对象传递给方法时, 如果在方法内部有对于对象的修改操作, 对于调用者来说, 这个修改也是同步的.

public class Teacher {

private String name;

public void lesson(Computer com) { // 这个方法应该需要一台电脑才能上课

              System.out.println(“[” + this.name + “] 老师使用电脑[” + com.say() + “]在上课”);

        com.setMemory(8);

       }

}

 

public class TeacherTest {      

       public static void main(String[] args) {

              Teacher t = new Teacher();

              Computer com = new Computer(3.5, 4); // 要传递的对象先创建好

              t.lesson(com); // 通过实参传递对象      

        System.out.println(com.getMemory()); // 输出的不是原来的4而是在方法中被修改后的8

       }     

}

想要了解跟多关于Java培训课程内容欢迎关注尚硅谷Java培训,尚硅谷除了这些技术文章外还有免费的高质量Java培训训课程视频供广大学员下载学习


上一篇:
下一篇:
关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
电话:010-56253825
邮箱:info@atguigu.com
地址:北京市昌平区宏福科技园综合楼6层(北京校区)

 深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦6层(上海校区)