您的位置:首页 > 编程语言 > Java开发

JAVA 类加载 类实例化 调试

2010-11-06 13:31 127 查看
最近没事学习学习JAVA语言,复习复习大学学的第一门编程语言。再打打基础~

好了,废话少说,直接正题~

 

1.虽然JAVA拥有自动回收内存机制,开发人员完全可以不必担心对象实例回收问题,但是这种机制也导致回收滞后。因此,在开发的时候,内存资源占用问题仍然要考虑。我们可以看下下面这段代码:
While(rs.next())
{
ResultSet rs1=...//构建了ResultSet的实例
//类可以说是一段符合类规范的源代码,也可以说是这段源代码编译生成的class,在没有
//使用之前,系统内存中并没有类的影子,类也只是硬盘里的一段字节罢了。
...
}
 
这段程序是数据库查询操作过程中很多人常做的,一旦数据表的量达到一定的程度之后,内存中就生成了大量的ResultSet实例,很可能会抛出异常,系统资源已经耗尽。这种情况一旦发生就会造成系统资源的损失。
 
 
2.异常处理:
在finally中进行最后的处理,通常在finally中完成资源的关闭操作,例如数据连接的关闭,网络连接的管理,文件的关闭等工作。
 
异常处理机制会影响程序的执行效率,对于实时性要求很高的程序来说,要适当避免对try...catch的使用。
 
 
3.静态
当调用Class.forName();的时候,或者调用静态方法和访问静态变量的时候都会完成类的加载,但是并没有实例化类。(可单步调试观察)
 
静态变量:JVM为静态变量在内存中分配一个且只分配一个存储位置,也就是如果生成一个对象的多个实例,但是这些实例的静态变量只会指向同一个内存位置。
如static int i=1;
静态代码段:是指在类中的一段代码,它并不存在于任何方法中,如
Static{
System.out.println("Static1");
}
Static代码段在加载类的时候执行,同一个类的静态代码段在同一个进程中只会执行一次。
静态方法:类在实例化的时候会消耗系统资源,很多时候我们需要执行一段代码,但是并不想构造一个类,这时就可以利用静态方法。静态方法在加载类的时候就会加载 到内存静态存储区,无需构造类的实例就可以调用。
 
当一个含有静态程序段的类构造的时候,先执行静态程序段,再按照继承顺序执行构造函数。这是因为构造静态变量,执行静态程序段是在类加载的时候完成的,而类加载是在类实例构造前完成的。(可通过单步调试验证)
 
]package jead.chap2;

public class Static1 {
static int i = 1;//静态变量
static {//静态代码段
System.out.println("Static1");
}
public static void main(String args[]) {//静态方法
Static1 a = new Static1();
Static1 b = new Static1();
a.i++;
System.out.println("a.i=" + a.i + " b.i=" + b.i);
}
}

在eclipse的debug模式下调试如下图所示,首先我们在第4,6,9行设置断点,然后F11一下,得下图:



从图中我们可以看到modification和clinit,知道程序正在执行的动作。然后F8一下,得



 



程序在6处suspended,完成输出"Static1".接下来F5可以看到加载和实例化的整个过程:
 



 
进入ClassLoader类进行加载。
 



进入方法类中。
 



在第三个断点处暂停。接下来进行实例化工作。
 
 


注意debug中用的是init!刚才一开始的时候我们看到的clinit估计是classload init.关于这两个的区别网上也有相应的解释,个人感觉经过这种单步调试之后,基本可以明白了。
下面是进入父类Object,默认从Object继承。



我们看到Thread下面有三个蓝色图标,我猜应该是栈示意图。



再F5一下,少了最上面一个蓝色图标,估计我的猜想是正确的。从栈顶pop了一个element.
 
最后看下执行完a.i++后的b.i的值



从图中悬浮框可以看到static的变量i的值为2.
 
这样整个类加载和类实例化,以及static的测试就到此了~
好吧,写了这么多代码之后重新回过头来学习JAVA,感觉还真有点意思,想当初学习的时候哪会考虑这些问题,直接一个System.out.print("Hello World.");就知道可以在控制台上输出字符串了~,也不知道是怎么实现的~现在再学习学习研究研究,基础决定高度,呵呵,为这个可能是大学最后一个Android项目做好充分的准备,so压力~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息