java基础之对象与引用

来源:互联网 发布:韩国genie软件最新版 编辑:程序博客网 时间:2024/06/09 15:56

    我们都知道,java是一门面向对象的语言,了解C++的人呢,对指针肯定也是听了很多次,那么,java语言中有没有指针呢?java对象和指针有什么关系呢?


    首先,准确地讲,java中也是有“指针”的,只是被换了一个称呼,叫做“引用”。那么,除了称呼不同以外,java中的引用与C++的指针有什么区别呢?

    java中对于引用的管理是比较严格的,我们不能随意进行操作;而在C++中,我们可以在代码里对指针进行随意操作(当然了,我们不是说要搞破坏)。java中,我们只能借助于引用来访问它所指向的对象,或者将一个引用所指向的对象赋值给另一个引用;如此一来,java对象就被很好地保护了起来,非常安全。

    

class Test {private int a;protected void test(){system.out.println("hello");}}//<span style="font-family: KaiTi_GB2312; font-size: 18px;">这里,我们定了一个非常简单的类Test,在不使用这个类的时候,它是不消耗内存的。</span>Test t1;//声明了一个变量,或者说定义了一个引用,此时它不指向任何一个对象,变量也是存储在内存中的。t1 = new Test();//在内存中创建了一个Test类型的对象,将其在内存中的首地址放入变量t1中。Test t2 = new Test();t1 = t2;//赋值操作,将引用t2所存放的第二个对象的首地址也存放到引用t1中。

    

    

    声明的变量/引用和创建的对象都是存放在内存中的;一般变量/引用占据的空间比较小,而对象则需要占据内存中一段连续的存储空间,所占据的空间大小与类的复杂程度有关。

    赋值操作没有改变对象,是针对变量/引用的操作,会改变相关变量/引用所指向的对象。


    那么,java对象与引用又有什么关系呢?

    显然,从上例可以看出,一个对象可以被零个、一个或多个变量所引用。对象被零个变量引用,即不被引用时,就是我们说的垃圾对象。

    另一方面,一个变量可以引用多少个对象呢?答案是:零个或者一个。

    为什么不能是多个呢?我们可以这么理解:变量在内存中占用的空间是固定的,这个空间只能存放一个地址值,而不能存放多个。一个不恰当的比喻:一个圆珠笔筒中最多只能容纳一个笔芯,而不能容纳多个。

    当一个变量引用零个对象的时候,我们说这个变量是NULL,或者说它引用了一个空对象。此时你或许想到了最常见的一个异常之一 NullPointerException,是的,空指针异常,这也就说明了我们说的变量/引用,跟指针在实质上是一样的。


    综上所述,java中也是有指针的,我们称其为变量/引用;一个对象可以被任意个变量引用,而一个变量却只引用0或1个对象。

    

0 0
原创粉丝点击