- -
1.1 引用传递
引用传递 1
class Demo
{
int temp = 10 ; //定义属性,没有封装,便于操作
}
public class RefDemo01
{
public static void main(String[] args)
{
Demo d1 = new Demo() ; //实例化Demo对象,实例化之后 temp=10
d1.temp = 20 ; //修改temp属性内容
System.out.println("调用fun()方法之前: "+d1.temp) ;
fun(d1) ;
System.out.println("调用fun()方法之后: "+d1.temp) ;
}
public static void fun(Demo d2) //此处的方法由主方法调用
{
d2.temp = 100 ; //修改temp值
}
}
引用传递 2
public class RefDemo02
{
public static void main(String[] args)
{
String str1 = "Hello" ; //实例化String对象
System.out.println("fun()方法调用之前: " + str1) ;
fun(str1) ; //调用fun()方法
System.out.println("fun()方法调用之后: "+str1) ;
}
public static void fun(String str2) //定义一个方法
{
str2 = "World" ; //修改字符串内容
}
}
引用传递 3
class Demo
{
String temp = "hello" ; //实例化String对象
}
public class RefDemo03
{
public static void main(String[] args)
{
Demo d1 = new Demo() ; //实例化Demo对象
d1.temp = "world" ; //没有修改内容,修改的是内存空间地址。
System.out.println("调用fun()方法之前: "+d1.temp) ;
fun(d1) ;
System.out.println("调用fun()方法之后: "+d1.temp) ;
}
public static void fun(Demo d2)
{
d2.temp = "IronMan" ; //开辟一个新空间
}
}
Sting类是一个特殊的类,其内容不可改变,
1.2 引用传递应用
class Person
{
private String name ; //声明String对象
private int age ; //声明int对象
private Book book ; //一个人有一本书
public Person(String n,int a) //构造方法
{
this.setName(n) ; //为类中属性赋值
this.setAge(a) ;
}
public void setName(String n)
{
name = n ;
}
public void setAge(int a)
{
age = a ;
}
public void setBook(Book bk)
{
book = bk ;
}
public String getName()
{
return name ;
}
public int getAge()
{
return age ;
}
public Book getBook()
{
return book ;
}
}
class Book
{
private String title ;
private float price ;
private Person person ; //一本书对应一个人
public Book(String t,float p)//构造方法
{
this.setTitle(t) ; //给类中属性赋值
this.setPrice(p) ; //给类中属性赋值
}
public void setTitle(String t)
{
title = t ;
}
public void setPrice(float p)
{
price = p ;
}
public void setPer(Person per)
{
person = per ;
}
public String getTitle()
{
return title ;
}
public float getPrice()
{
return price ;
}
public Person getPer()
{
return person ;
}
}
public class RefDemo04
{
public static void main(String[] args)
{
Person per = new Person("IronMan",20) ; //声明并实例化Person对象
Book bk = new Book("悟空传",19.9f) ; //声明并实例化Book对象
per.setBook(bk); //调用set()方法,设置两个对象关系,一个人有一本书
bk.setPer(per) ; //调用set()方法,设置两个对象关系,一本书对应一个人
System.out.println("从人找到书-->"+"姓名:" +per.getName()+",年龄:"+per.getAge()+
",对应的书名:"+per.getBook().getTitle()+",价格:"+per.getBook().getPrice()) ;
System.out.println("从书找到人-->"+"书名: "+bk.getTitle()+",价格:"+bk.getPrice()+
",对应的人名:"+bk.getPer().getName()+",年龄:"+bk.getPer().getAge()) ;
}
}
延伸
增加一个孩子属性
class Person
{
private String name ; //声明String对象
private int age ; //声明int对象
private Book book ; //一个人有一本书
private Person child ;//一个人有一个孩子
public Person(String n,int a) //构造方法
{
this.setName(n) ; //为类中属性赋值
this.setAge(a) ;
}
public void setName(String n)
{
name = n ;
}
public void setAge(int a)
{
age = a ;
}
public void setBook(Book bk)
{
book = bk ;
}
public void setChild(Person cld)
{
child =cld ;
}
public String getName()
{
return name ;
}
public int getAge()
{
return age ;
}
public Book getBook()
{
return book ;
}
public Person getChild()
{
return child ;
}
}
class Book
{
private String title ;
private float price ;
private Person person ; //一本书对应一个人
public Book(String t,float p)//构造方法
{
this.setTitle(t) ; //给类中属性赋值
this.setPrice(p) ; //给类中属性赋值
}
public void setTitle(String t)
{
title = t ;
}
public void setPrice(float p)
{
price = p ;
}
public void setPer(Person per)
{
person = per ;
}
public String getTitle()
{
return title ;
}
public float getPrice()
{
return price ;
}
public Person getPer()
{
return person ;
}
}
public class RefDemo04
{
public static void main(String[] args)
{
Person per = new Person("IronMan",20) ; //声明并实例化Person对象
Person chi = new Person("SpiderMan",10) ;
Book bk = new Book("悟空传",19.9f) ; //声明并实例化Book对象
Book b = new Book("西游日记",20.5f) ;
per.setBook(bk); //调用set()方法,设置两个对象关系,一个人有一本书
bk.setPer(per) ; //调用set()方法,设置两个对象关系,一本书对应一个人
per.setChild(chi) ; //一个人有一个孩子
chi.setBook(b) ; //一个孩子有一本书
b.setPer(chi); //一本书对应一个孩子
System.out.println("从人找到书-->"+"姓名:" +per.getName()+",年龄:"+per.getAge()+
",对应的书名:"+per.getBook().getTitle()+",价格:"+per.getBook().getPrice()) ;
System.out.println("从书找到人-->"+"书名: "+bk.getTitle()+",价格:"+bk.getPrice()+
",对应的人名:"+bk.getPer().getName()+",年龄:"+bk.getPer().getAge()) ;
System.out.println(per.getName()+"的孩子"+per.getChild().getName()+"的年龄"+per.getChild().getAge()+
"书名"+chi.getBook().getTitle()+"价格"+chi.getBook().getPrice()) ;
}
}