java基础之引用传递

                              引用传递

  引用传递的核心意义:同一块堆内存空间可以被不同的栈内存所指向,不同的栈内存可以对同一堆内存进行内容的修改。

 

一、三个程序分析

 

范例:

 

Class  Message{

  Private int num = 10;//基本数据类型(不包含string)不在堆内存中开辟空间。

Public Message(int num){

   This.num = num;

}

Public void setnum(int num){

   This.num = num;

}

Public int getnum(){

 Return this.num;

}

}

Public class testdemo{

Public static void main(string arg[]){

  Message mes = new Message(30);

  Fun(msg);

 System.out.println(msg.getnum);

}

Public static void fun(Message temp){

  Temp.setnum(100);

}

}

输出结果:num = 100

内存分析:

 

范例二:

Public class testdemo{

Public static void main(string arg[]){

  String msg = “hello”

  Fun(msg);

 System.out.println(msg);

}

Public static void fun(Stringe temp){

   temp  = “World” ;

}

}

输出结果:msg = hello ;

 

内存分析:

 

fun()方法调用结束之后,temp以及temp所指引的堆内存全部变为垃圾。

 

 

 

范例3 :

 

Class  Message{

  Private string info = “nihao”;

Public Message(string info){

   this.info = info;   

}

Public void setinfo(string info){

  this.info = info

}

Public string  getinfo(){

 Return this.info;

}

}

Public class testdemo{

Public static void main(string arg[]){

  Message mes = new Message(30);

  Fun(msg);

 System.out.println(msg.getnum);

}

Public static void fun(Message temp){

  Temp.setnum(100);

}

}

输出结果:info = world

内存分析:

 

结论:每一个String变量只能保存一个数据。

 

String类对象一旦声明则无法改变。对象内容的改变依靠的是引用地址的改变。

 

String类对象内容的改变:

  

  如果说将一个对象传递回到类的方法里面,那么就相当于取消了封装,

可以通过对象访问属性。

 

程序:

  class Info{

    private String msg = "hello";

public void print(){

System.out.println("msg = "+msg);

}

//本类接收本类对象

public void fun(Info temp){

//在类的内部直接利用对象访问私有属性。实现String类内容的修改

// temp属于Info类,可以调用私有属性msg;

  temp.msg= "world";

}

  }

  public class Testdemo{

    public static void main(String args[]){

  Info info  =  new  Info();

  info.fun();

  info.print();

}

  }

 

  • 引用传递的实际运用

问题描述:每一个人都有一辆汽车或者没有汽车。要求可以通过面向对象的方式描述以上关系。

class Car{

    private String pname;

    private Member member;

    public Car(String pname){

        this.pname = pname;

    }

    public void setPname(){

        this.pname = pname;

    }

    public String getPname(){

        return pname;

    }

    public void setMember(Member member) {

        this.member = member;

    }

    public Member getMember() {

        return member;

    }

    public String getinfo(){

        return "车名称:"+this.pname;

    }

}

class Member{

    private int num;

    private String name;

    private Car car;

    private Member child;

    public Member(int num,String name){

        this.num = num;

        this.name = name;

    }

 

    public void setNum(int num) {

        this.num = num;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getNum() {

        return num;

    }

 

    public String getName() {

        return name;

    }

    public void setCar(Car car) {

        this.car = car;

    }

    public Car getCar() {

        return car;

    }

    public void setChild(Member child) {

        this.child = child;

    }

    public Member getChild() {

        return child;

    }

    public String getinfo(){

        return "人员编号:"+this.num+"、姓名"+this.name;

    }

}

public class day02 {

    public static void main(String args[]){

        Member me  =  new Member(01,"柳旭");

        Member chd  = new Member(02,"铭铭");

        Car c = new Car("宝马");

        Car cc = new Car("奥拓");

        me.setCar(c);//一个人有一辆车

        c.setMember(me);//一辆车有一个车主人

        chd.setCar(cc);//一个孩子有一辆车

        cc.setMember(chd);//一辆车属于一个孩子

        me.setChild(chd);//一个人有一个孩子

        //人找车

        //Member类中的gerCar()方法返回的是Car类型,所以能够调用Car类中的方法。

        System.out.println(me.getCar().getinfo());

   System.out.println(c.getMember().getinfo());//车找人

        //通过人找到孩子的信息、

     System.out.println(me.getChild().getinfo());

        //通过人找到孩子车的信息    System.out.println(cc.getMember().getCar().getinfo());

    }

}

引用传递为两个不同类型的类建立起了桥梁,实现了两个类的相互调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值