一、引用传递分析
所谓的引用传递就是指将堆内存空间的使用权交给多个栈内存空间
- 引用传递范例(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
复制