-
JVM和类
当调用java命令运行某个java程序时,该命令将会启动一个java虚拟机进程,同一个JVM里的所有线程、所有变量都处于同一个进程里,他们都使用该JVM进程的内存区。
当系统出现以下几种情况时,JVM进程将被终止。
->程序运行到最后正常结束。
->程序运行到使用System.exit()或Runtime.getRuntime().exit()处结束程序。
->程序运行过程中遇到未捕获的异常或错误而结束。
->程序所在平台强制结束了JVM进程。当java程序运行结束时,JVM进程结束,该进程在内存中的状态将丢失。
定义一个包含类变量的类
public class Test{
//定义一个类变量
public static int a = 6;
}
定义一个类创建Test类的实例,并访问类变量a
public class Test1{
public static void main(String [] args){
Test a = new Test();
a.a++;
System.out.println(a.a);
}
}
下面也创建Test对象,并访问其类变量a的值
public class Test2{
public static void main(String [] args){
Test b = new Test();
System.out.println(b.a);
}
}
运行结果:
Text类里的a成员变量是静态变量,同一个类的所有实例的静态变量共享同一块内存区,运行Test1时改变了第一个Test实例的成员变量a,那么第二个Test实例的成员变量a也将搜狐都爱影响,其实并不是这样,因为两次运行java程序处于两个不同的JVM进程中,两个JVM之间不会共享数据。
-
类的加载
类的加载指的是通过类加载器将类的class文件读入内存,并为之创建一个java.lang.Class对象。 -
类的连接
类被加载后,接着将会进入连接阶段,连接阶段负责把类的二进制数据合并到jre中。类连接飞卫如下三个阶段。
(1)验证:检验被加载的类是否有正确的内部结构,并和其他类协调一致。
(2)准备:负责为类的类变量分配内存,并设置默认初始值。
(3)解析:将类的二进制数据中的符号引用替换成直接引用。 -
类的初始化
主要对类变量进行初始化。对类变量指定初始值有两种方式:
(1)声明类变量时指定初始值;
(2)使用静态初始化块为类变量指定初始值。