第二章 一切都是对象
2.1 用引用操纵对象
这部分的重点在于区分引用和对象。
让我们贴上一段简单的代码:
public class Hi {
public Hi(){
System.out.println("Hi~");
}
}
这样我们就有了一个自行创建的类型Hi。我们通过一般的方式来初始化一个对象:
Hi hi = new Hi();
而在实际上,这部分代码应该分成两部分来看。首先是
Hi hi
这部分表示我们创建了一个引用。我们知道我们可以通过这个引用来操控一个类型为Hi的对象。但是呢?他操纵的对象是哪个?我们并不知道,因为我们还没有让他指向任何一个类型为Hi的对象。
new Hi()
这部分则是对对象的创建。我们通过new关键字来表示,我们新创建了一个类型为Hi的对象。而后通过“=”这个符号来将我们所创建的引用hi和刚刚创建的对象进行关联。这里我们需要注意的则是,引用不等于对象。引用只是我们用来操控对象的一个手段。
为了更为直观的体现,我们来写一个简单的例子。我们先创建一个名为Hello类型。我们给他一个属性name,然后创建一个方法,SayHello
public class Hello {
String name;
public Hello(){
name = "小明";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void SayHello(){
System.out.println("Hello~" + name);
}
}
然后我们通过一个方法来让我们更好的认识到引用和对象的区别。
public class HelloTest {
public static void main(String[]args){
Hello a, b;
a = b = new Hello();
a.SayHello();
b.SayHello();
a.setName("小刚");
a.SayHello();
b.SayHello();
}
}
我们在IDE里面运行这个程序。来看一下我们得到的结果。
从运行结果我们可以看出来。我们创建了一个对象Hello,并且我们通过引用a和b来调用这个对象。因为我们重写了Hello的构造器,所以在调用SayHello这个方法时,会输出“Hello~小明”。之后我们通过引用a来更改我们创建的对象的属性name。而后我们可以发现无论是通过引用a还是引用b来调用我们创建的这个Hello对象的方法,所输出的都是我们通过引用a改变后的结果。由此可见,a和b只是对对象的引用而已,并不是对象本身。
这两个引用所指向的是同一个对象。