一、引用传递分析
所谓的引用传递就是指将堆内存空间的使用权交给多个栈内存空间
- 引用传递范例(1)
 
public class Test{
    public static void main(String[] args) {
        String str1 = "hello";
        System.out.println(str1);
        fun(str1);
        System.out.print(str1);
    }
    public static void fun(String  str2){
        str2 = "MLDN";
    }
}

 因为字符串内容一旦声明是不可改变的,改变的只是其内存地址的指向。
 
 2. 引用范例(2)
class Demo{
    String  temp = "hello";
}
public class Test{
    public static void main(String[] args) {
        Demo d1 = new Demo();
        d1.temp = "world";
        System.out.println(d1.temp);
        fun(d1);
        System.out.print(d1.temp);
    }
    public static void fun(Demo  d2){
        d2.temp = "MLDN";
    }
}
- 12
 - 13
 - 14
 - 15
 
这里 String 是作为一个 Demo 类的属性存在的,而在操作的时候更改的只是 Demo 类中的属性的内容
 
二、接收本类的引用
实际上对象引用传递上也可以在一个类中接受自己本类对象的实例,而且接收完之后,可以方便地通过此对象直接进行本类中封装属性的访问。
class Demo{
    private int temp = 30;
    public void fun(Demo d2){
    	// 这里对私有属性的访问属于该类的内部访问
        d2.temp = 50; // 直接通过对象调用本类的私有属性
    }
    public int getTemp(){ // getter 方法
        return temp;
    }
    public void setTemp(int t){ // setter 方法
        temp = t;
    }
}
public class Test{
    public static void main(String[] args) {
        Demo d1 = new Demo();
        d1.setTemp(40);
        d1.fun(d1);
        System.out.print(d1.getTemp());
    }
}
- 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 - 22
 
三、范例(1)一对一关系
class Person{
    private String name;
    private int age;
    private Book book; // 一个人有一本书
    public Person(String name,int age){ // 通过构造设置内容
        this.setName(name);
        this.setAge(age);
    }
    public String getName(){
        return name;
    }
    public void setName(String n){
        name = n;
    }
    public int getAge(){
        return age;
    }
    public void setAge(int a){
        age = a;
    }
    public Book getBook(){ // 得到本人的书
        return book;
    }
    public void setBook(Book b){ // 设置本人的书
        book = b;
    }
}
class Book{
    private String title;
    private double price;
    private Person person; // 一本书属于一个人
    public Book(String title,double price){ // 通过构造设置属性内容
        this.setTitle(title);
        this.setPrice(price);
    }
    public String getTitle(){
        return title;
    }
    public void setTitle(String  t){
        title = t;
    }
    public double getPrice(){
        return price;
    }
    public void setPrice(double p){
        price = p;
    }
    public Person getPerson(){
        return person;
    }
    public void setPerson(Person person){
        this.person = person;
    }
}
public class Test{
    public static void main(String[] args) {
        Person per = new Person("李明",30);
        Book bk = new Book("Java",90.0);
        per.setBook(bk);
        bk.setPerson(per);
        System.out.println("从人找到书 --> 姓名:"+per.getName() + "; 年龄:" + per.getAge() +
                "; 书名" + per.getBook().getTitle() + "; 价格:" + per.getBook().getPrice() );
        System.out.println("从书找到人 --> 书名:"+bk.getTitle() + "; 价格:" + bk.getPrice() +
                "; 姓名:" + bk.getPerson().getName() + "; 年龄:" + bk.getPerson().getAge() );
    }
}
- 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 - 22
 - 23
 - 24
 - 25
 - 26
 - 27
 - 28
 - 29
 - 30
 - 31
 - 32
 - 33
 - 34
 - 35
 - 36
 - 37
 - 38
 - 39
 - 40
 - 41
 - 42
 - 43
 - 44
 - 45
 - 46
 - 47
 - 48
 - 49
 - 50
 - 51
 - 52
 - 53
 - 54
 - 55
 - 56
 - 57
 - 58
 - 59
 - 60
 - 61
 - 62
 - 63
 - 64
 - 65
 - 66
 - 67
 - 68
 

四、范例(2)进一步深入一对一关系
上述完成了一个基本的关系,现在有一个新的要求:一个人有一个孩子,每个孩子还会有一本书。
 因为孩子也是一个人,此时只需要简单修改 Person类即可,在类中增加一个自己的引用。
class Person{
    private String name;
    private int age;
    private Book book;
    private Person child; //一个人有一个孩子
    public Person(String name,int age){ // 通过构造设置内容
        this.setName(name);
        this.setAge(age);
    }
    public String getName(){
        return name;
    }
    public void setName(String n){
        name = n;
    }
    public int getAge(){
        return age;
    }
    public void setAge(int a){
        age = a;
    }
    public Book getBook(){ // 得到本人的书
        return book;
    }
    public void setBook(Book b){ // 设置本人的书
        book = b;
    }
    public void setChild(Person child){
        this.child = child;
    }
    public Person getChild(){
        return child;
    }
}
class Book{
    private String title;
    private double price;
    private Person person;
    public Book(String title,double price){ // 通过构造设置属性内容
        this.setTitle(title);
        this.setPrice(price);
    }
    public String getTitle(){
        return title;
    }
    public void setTitle(String  t){
        title = t;
    }
    public double getPrice(){
        return price;
    }
    public void setPrice(double p){
        price = p;
    }
    public Person getPerson(){
        return person;
    }
    public void setPerson(Person person){
        this.person = person;
    }
}
public class Test{
    public static void main(String[] args) {
        Person per = new Person("李明",30);
        Book bk = new Book("Java",90.0);
        Person cld = new Person("李月",18); // 定义一个孩子
        Book b = new Book("JAVAEE",88.0); // 定义孩子有的书
        per.setBook(bk);
        bk.setPerson(per);
        cld.setBook(b); //设置对象间的关系:一个孩子有一本书
        b.setPerson(cld); //一本书属于一个孩子
        per.setChild(cld); //一个人有一个孩子
        System.out.println("从人找到书 --> 姓名:"+per.getName() + "; 年龄:" + per.getAge() +
                "; 书名" + per.getBook().getTitle() + "; 价格:" + per.getBook().getPrice() );
        System.out.println("从书找到人 --> 书名:"+bk.getTitle() + "; 价格:" + bk.getPrice() +
                "; 姓名:" + bk.getPerson().getName() + "; 年龄:" + bk.getPerson().getAge() );
        System.out.println("从人找到书再找到孩子 --> 姓名:"+per.getName() + "; 孩子姓名:" + per.getChild().getName() +
                "; 孩子的书名:" + per.getChild().getBook().getTitle());
    }
}
- 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 - 22
 - 23
 - 24
 - 25
 - 26
 - 27
 - 28
 - 29
 - 30
 - 31
 - 32
 - 33
 - 34
 - 35
 - 36
 - 37
 - 38
 - 39
 - 40
 - 41
 - 42
 - 43
 - 44
 - 45
 - 46
 - 47
 - 48
 - 49
 - 50
 - 51
 - 52
 - 53
 - 54
 - 55
 - 56
 - 57
 - 58
 - 59
 - 60
 - 61
 - 62
 - 63
 - 64
 - 65
 - 66
 - 67
 - 68
 - 69
 - 70
 - 71
 - 72
 - 73
 - 74
 - 75
 - 76
 - 77
 - 78
 - 79
 - 80
 - 81
 - 82
 


                

















