版权声明:原创文章,转载请声明原处 https://blog.csdn.net/qq_41723615/article/details/86237038
引用传递是整个Java的精髓所在, 而引用传递核心意义是:同一块堆内存空间
可以被不同的栈内存所指向, 不同栈内存可以对同一堆内存进行内容的修改。
范例:引用传递
//引用传递
class Message{
private int num=10;
public Message(int num){
this.num=num;
}
public void setNum(int num){
this.num=num;
}
public void getNum(int num){
return this.num;
}
}
public class ByRefTest{
public static void main(String args[]){
Message msg=new Message(30);
fun(msg);
System.out.println(msg.getNum());
}
public static void fun(Message temp){
temp.setNum(100);
}
}
本程序首先在Message类中只定义了一个num属性( int为基本数据类型),然后利用Message类的构
造方法进行num属性的赋值操作,最后在主方法中调用了fun()方法,在fun()方法的参数上接收了Message
类对象的引用,以便可以修改num属性的内容。而当fun()方法执行完毕后temp断开与堆内存的引用,但是
对于堆内存的修改却保存了下来,所以最终的结果是1000;
第一道引用范例是一个标准的引用传递操作,即不同的钱内存指向了同一块堆内存空间,但是在进
行引用分析中不得不去考虑一种特殊的类一String类。
public class TestDemo{
public static void main(String args[]){
String msg="hello"; //定义String对象
fun(msg);//引用传递
System.out.println(msg);//输出msg对象内容
}
public static void fun(String temp){//接收字符串引用
temp="word";//改变字符串引用
}
}
范例:引用传递的实际引用
class Member{
private int mid;
private String name;
private Member child; //表示孩子
//car有实例化对象表示有车
//car为null表示没有车
private Car car; //表示属于人的车
public Member (int mid,String name){
this.mid=mid;
this.name=name;
}
public String getInfo(){
return"人员编号:"+this.mid+",姓名:"+this.name;
}
public void setChild(Member child){
this.child=child;
}
public Member getChild(){
return this.child;
}
public void setCar(Car car){
this.car=car;
}
public Car getCar(){
return this.car;
}
}
class Car{
private Member member; //车属于一个人
private String pname;
public Car(String pname){
this.pname=pname;
}
public String getInfo(){
return"车的名字:"+this.pname;
}
public void setMember(Member member){
this.member=member;
}
public Member getMember(){
return this.member;
}
}
public class ByRefTest1{
public static void main(String args[]){
//第一步:设置数据
Member m=new Member(1,"陈冠佑"); //独立对象
Member chd=new Member(2,"陈冠希"); //一个孩子
Car c=new Car("宝马320Li"); //独立对象
Car cc=new Car("法拉利");
m.setCar(c); //一个人有一辆车
c.setMember(); //一辆车属于一个人
chd.setCar(); //一个孩子有一辆车
cc.setMember(chd); //一辆车属于一个孩子
m.setChild(chd); //一个人有一个孩子
//第二步:取出关系
//通过人找到车的信息
System.out.println(m.getCar().getInfo());
//通过车找到人的信息
System.out.println(c.getMember().getInfo());
//通过人找到他孩子的信息
System.out.println(m.getChild().getInfo());
//通过人找到他孩子的车的信息
System.out.println(m.getChild().getCar().getInfo());
}
}
简单Java类的设计原则:
类名称=表名称
属性名称(类型)= 表字段(类型)
一个实例化对象 = 一行记录
多个实例化对象(对象数组)= 对行记录(外键)
引用关系 = 外键约束
第一步:根据定义的结构关系设置数据;
第二步:根据定义的结构关系取出数据。
本程序在Member类中增加了一个表示孩子的属性“child” ;其类型为Member类型, 如果一个人
有孩子则为其设置一个实例化对象, 如果没有则设置为null。特别需要注意的是, 在通过人找到孩子所
对应车的信息时使用了代码链的形式“m.getChild().getCar().getlnfo” ,这类代码一定要观察每一个方法
的返回值, 如果返回的是一个类的引用, 则可以继续调用这个类的方法, 而此类代码在以后的开发中也
一定会出现。