Java中的引用传递(数据表与简单Java类的映射 1)

引用传递

核心意义:同一块堆内存空间可以被不同的栈内存所指向,而不同的栈内存可以对同一堆内存空间的内容进行修改
1.标准的引用传递范例
class Message{
    private int num=10;
    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 args[]){
     Message msg=new Message(30);        //实例化Message类对象同时传递num属性内容
     fun(msg);                           //引用传递
     System.out.println(msg);
   }
   public static void fun(Message temp){
      temp.setNum(100);                  //修改num属性内容
   }
}
程序执行结果:100
2.String类对象的引用传递
public class TestDemo{
  public static void main(String args[]){
      String msg="Hello";
      fun(msg);
      System.out.println(msg);
  }
  public static void fun(String temp){
    temp="World";
  }
}
程序执行结果:Hello

在String类的对象引用传递中,字符串的内容一旦被实例化是不可改变的,它是通过改变引用来实现的。
从上面的程序可以看出,msg的内容没有发生变化,是因为所有的变化都是在fun方法中发生的,随着fun方法的结束,temp就会失效,其所对应的堆内存也变成了垃圾。

3.综合范例
class Message{
    private String info="无用内容";
    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 args[]){
     Message msg=new Message("Hello");        //实例化Message类对象
     fun(msg);                                //引用传递
     System.out.println(msg.getInfo());       //调用get方法输出info属性内容
   }
   public static void fun(Message temp){
      temp.setInfo("World");                  //修改info属性内容
   }
}
程序执行结果:World
4.实际应用
——设计一个人和车的简单Java类程序。
class Member{
  private int id;             //人员编号
  private String name;        //人员姓名
  private Car car;            //表示人的车
  private Member child;       //表示人的孩子
  
  public Member(int id,String name,){
     this.id=id;
     this.name=name;
  }
  public void setCar(Car car){
     this.car=car; 
  }
  public Car getCar(){
     return this.car;
  }
  public void setChild(Member member){
     this.member.member;
  }
  public Member getChild(){
     return this.child;
  }
  public String getInfo(){
     return "人员编号:"+this.id+",人员姓名:"+this.name;
  }
}
class Car{
  private String cname;       //车的名字
  private Member member;      //车的所有者
  public Car(String cname){
     this.cname=cname;
  }
  public void setMember(Member member){
     this.member=member;
  }
  public Member getMember(){
     return this.member;
  }
  public String getInfo(){
     return "车的名字:"+cname;
  }
}

public class TestDemo{
  public static void main(String args[]){
     //第一步:根据结构设置属性
     Member me=new Member(101,"刘雯");
     Member mc=new Member(102,"刘欢");
     Car ca=new Car("英菲尼迪");
     Car cb=new Car("保时捷911");
     me.setCar(ca);                          //一个人有一辆车
     ca.setMember(me);                       //一辆车属于一个人
     mc.setCar(cb);                          //一个孩子有一辆车
     cb.setMember(mc);                       //一辆车属于一个孩子
     me.setChild(mc);                        //一个人有一个孩子
     //第二步:根据结构取出属性
     System.out.println(ca.getMember().getInfo());            //通过车找到人的信息
     System.out.println(me.getCar().getInfo());               //通过人找到车的信息
     System.out.println(me.getChild().getInfo());             //通过人找到孩子的信息
     System.out.println(me.getChild().getCar().getInfo());    //通过人找到孩子车的信息
  }
}
程序执行结果:人员编号:101,人员姓名:刘雯
             车的名字:英菲尼迪
             人员编号:102,人员姓名:刘欢
             车的名字:保时捷911

以上的程序是从两张数据表中映射过来的,程序设计原则如下:

  • 类名称=表名称
  • 属性名称(类型)=表中字段(类型)
  • 一个实例化对象=表中一行记录
  • 多个实例化对象(对象数组)=多行记录
  • 引用关系=外键约束

在这里对于数据表与简单JAVA类的映射做了简单说明,关于更进一步的内容(一对多、多对多等)在后面的博客中说明。

表1:

Member
id(人员编号):nt
name(人员姓名):String
car(车的名字):Car

表2:

Car
cname(车的名字):String
member(车的主人):Member

以上内容为自己的浅解,欢迎广大读者指正,如果对你有所帮助,请添加关注,以后会有更多的作品奉上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值