Java中类的生命周期
Java虚拟机管理类和对象的生命周期;
(1)类的生命周期从类被加载,连接,初始化开始,到类被卸载结束;
(2)类处于生命周期时,它的二进制数据位于运行时方法区内,在堆区还有一个相应的描述类的Class类的对象;
(3)只有当类处于生命周期中时,Java程序才能够使用它。
1.Java虚拟机及程序的生命周期
(1)通过java命令运行一个Java程序时,启动一个Java虚拟机进程;
(2)Java虚拟机进程从启动到终止的过程,称为Java虚拟机生命周期;
(3)程序生命周期和Java虚拟机生命周期是一致的,因为Java虚拟机进程从创建起的任务就是执行Java程序。
2.类的加载,连接和初始化
a.Java程序要使用某个类时,Java虚拟机要确保这个类被加载,连接和运行,其中连接包括验证,准备和解析。
b.加载:查找并加载类的二进制数据;
c.连接
c.1 验证:确保加载类的正确性;
c.2 准备:为静态变量分配内存,并将其初始化为默认值;
c.3 解析:将类中的符号引用转换为直接引用。
d初始化:
给类的静态变量赋予正确的初始值
(1)加载
1.1 加载需要完成:
1.1.1 将类的.class文件中的二进制数据读到内存中的运行时数据区的方法区;
1.1.2 在堆区创建一个java.lang.Class对象(对象都放在堆区),用于封装类在方法区内的数据结构。
1.2 加载的最终产品是位于运行时数据区堆区的java.lang.Class对象,Class对象封装了类在方法区的数据结构,并向Java程序提供访问类在方法区内的数据结构的接口
1.3 类的加载由加载器完成
1.3.1 Java虚拟机自带的加载器
包括启动类加载器,扩展类加载器和系统类加载器《后两个都是java.lang.Class类的实例》
1.3.2 用户自定义的类加载器
java.lang.Class的子类的实例,用户可以通过它定制类的加载方式
类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载过程中遇到.class
相关文档:
1.Java里面使用
static
方法有什么好处?
答:在项目中,对于频繁使用的方法,使用static
修饰会提高效率吗?
静态方法的好处就是不用生成类的实例就能直接调用和对象无关
你不用生成对象就能用这个方法了,不是提高效率?你生成对象得占用内存空间啊
至于静态属性也能提高效率,你普通的属性每个类对 ......
转:Java学习路线图,专为新手定制的Java学习计划建议 收藏 转自:http://tieba.baidu.com/f?kz=692446591 怎么学习Java,这是很多新手经常会问我的问题,现在我简单描述下一个Java初学者到就业要学到的一些东西: 首先要明白Java体系设计到得三个方面:J2SE,J2EE,J2ME(KJAVA)。J2SE,Java 2 Platform Standard Edition, ......
一、向上转型。
通俗地讲即是将子类对象转为父类对象。此处父类对象可以是接口。
1,向上转型中的方法调用。
看下面代码:
package com.wensefu.others;
public class Animal {
public void eat(){
System.out.println("animal eatting...");
}
}
class Bird extends Animal{
public void ......
系统自动抛出的异常
所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行。
语句抛出的异常
用户程序自定义的异常和应用程序特定的异常,必须借助于 throws 和 throw 语句来定义抛出异常。
throw是语句抛出 ......
关于volatile
我们知道,在Java中设置变量值的操作,除了long和double类型的变量外都是原子操作,也就是说,对于变量值的简单读写操作没有必要进行同步。
这在JVM 1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下
volatile关键字的使用变得非常重 ......