JAVA引用的误区以及应用
呵呵!还是先给大家出个题吧!
public class PreferenceTest {
public int testVar = 0;
/**
* create data: 2009-12-30</br> Just for me to test preference.
*
* @author XiangJie
* @param args
*
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
PreferenceTest test1 = new PreferenceTest();
test1.testVar = 10;
PreferenceTest test2 = test1;
test2.testVar = 5;
test1 = null;
System.out.println(test2.testVar);
}
}
请问打印结果是什么?
下面我来分析一下这个问题,和以前一样先不给出答案啊!
要讨论这个问题,就首先要了解JAVA对象和引用的关系,以及堆栈的存储关系!
以这个例子来讨论:PreferenceTest test1 = new PreferenceTest();在初始化的时候,首先是在堆中new出一片区域用于存储对象,也就是说对象是存储在堆中的,而PreferenceTest test1 只是一个引用,它存在与栈中,“=”的目的是让这个引用指向对应的对象,
。理清了这些关系我们来讨论结果到底是什么,首先是引用test1指向已经初始化的Object(对象),然后,test1.testVar=10的意思就是通过这个引用拿到object,再将它的变量testVar赋值为10,而PreferenceTest test2 = test1是指引用test2通过引用test1拿到object,也就是说现在object有两个引用指向它,test2.testVar=5实质上还是在操作当前的object,现在它的变量testVar赋值为5了,现在最关键的也就是test1=null,这句的意思是什么呢?其实很简单,将它的引用指向空(null),而并不是说当前的object变为null了,通过这一句,其实在栈中只有test2指向当前的object,答案也就出来了。
打印的结果为:5
大家也许会觉的这些都是小儿科,其实当真正遇到这个问题的时候,大家会发现往往是最基础的问题把你给栏注了。
下面给大家说一下在项目中实实在在遇到的问题:
开发过eclipse的朋友也许遇到过No more handles Exception ,引起这个exception的具体原因以及该怎么解决以后在讲,现在只是简单的说一下,其实SWT与JAVA的一个区别说造成的,java有一套完整的垃圾回收机制,所以我们不用担心垃圾回收的问题,而在SWT中的很多对象有一个dispose方法,这个方法就是用于释放对象的,只不过是它已经处理了很多实现类,但是有一种资源它没有处理过,那就是Resource对象,这个有点类似于C++,你要手动的去释放这些
相关文档:
本人正在学习Java,那些知识点都学得很好,但一旦要我用所学的知识做个项目出来我就无从下手,不知道从哪里做起才好!一方面的原因是我的阅读量太少了,二者经验不足!我正焦急着怎么改变我这种状态,所以想找些做项目的教材来自学,但真不知道该看哪些教材好,所以在此向各位项目高手请教,请给我一些建议或推荐给我一些教 ......
一、反射(Reflect)
反射就是把Java类中的各种成分映射成一个个的java对象。例如,一个类有:成员变量,方法,构造方法,包等等信息,利用反射技术可以对一个类进行解剖,把各个组成部分映射成一个个对象。映射成对象后,就可以调用对象的方法对其操作了。与反射相关的重要的类有Cl ......
———————————————————
付出的努力非常人所能想象
——————————— ......
Chapter 01
Getting Started
一、核心概念
1.什么叫类?
类就是某一种事物的一般性的集合体,是相同或相似的各个事物共同特性的一种抽象。
2.什么叫对象?
在面向对象概念中,对象(Object)是类的实例(instance)。对象与类的关系就像变量与数据类型的关系一样。
3.类的核心 ......