易截截图软件、单文件、免安装、纯绿色、仅160KB

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 Swing GUI文件拖拽

      为了方便,有时我们需要直接将本地文件或字符或图片直接拖拽到图形上,让组件自动打开拖拽的文件。基于这种思想,我写了如下代码实现这个拖拽监听的功能。
      1.UI源码
package ibees.desktop;
import javax.swing.BorderFactory;
import javax.swing ......

传智播客2009 12 24 二、java基础加强(2)

一、反射(Reflect)
       反射就是把Java类中的各种成分映射成一个个的java对象。例如,一个类有:成员变量,方法,构造方法,包等等信息,利用反射技术可以对一个类进行解剖,把各个组成部分映射成一个个对象。映射成对象后,就可以调用对象的方法对其操作了。与反射相关的重要的类有Cl ......

java gui 选择文件

import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class DisplayFile {
       /**
        * @param args
& ......

Java解析网络数据流的三种特殊方法

UTF8转换成GB2312 当我们在基于HTTP协议的JSP或Servlet的应用中获取数据或发送请求时,JVM会把输送的数据编码成UTF8格式。如果我们直接从HTTP流中提取中文数据,提取的结果为“????”(可能更多问号),为转换成我们能够理解的中文字符,我们需要把UTF8转换成GB2312,借助ISO-8859-1标准编码能够轻易的实现,下面 ......

java的一些网址


J2SE部分:
  13本经典的Java书,新人必看:
  http://www.ibeifeng.com/read.php?tid=846&u=14387
  
  尚学堂马士兵ooa&ood免费
  http://www.ibeifeng.com/read-htm-tid-14397.html&u=14387
  
  Java高清PDF书籍大杂烩
  http://www.ibeifeng.com/read.php?tid=4580&u=1438 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号