关键词搜索

源码搜索 ×
×

(Java)引用传递及基本应用

发布2019-10-30浏览580次

详情内容

一、引用传递分析

所谓的引用传递就是指将堆内存空间的使用权交给多个栈内存空间

  1. 引用传递范例(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
    复制

    在这里插入图片描述

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载