JVM进程终止:
1.程序运行到最后正常终止
2.程序运行到使用System.exit()或Runtime.getRuntime().exit()
3.程序执行过程中遇到未捕获的异常或错误而结束
4.程序所在的平坦强行终止JVM进程
看下面的程序
类A
public class A
{
public static int a =5;
}
先执行
public class Test1
{
public static void main(String[] args)
{
A a = new A();
a.a++;
System.out.println(a.a);
}
}
在执行
public class Test2
{
public static void main(String[] args)
{
A b = new A();
System.out.println(b.a);
}
}
Test1的结果是6 Test2的结果是5
因为两次运行Java程序处于不同的JVM进程中 两个JVM之间不会共享数据
加载类的几种情况
1.从本地的文件系统来加载class文件
2.从Jar包中加载class文件
3.通过网络加载class文件
4.把一个Java源文件动态编译,并执行加载
类连接的三个阶段
验证 准备 解析
类的初始化
1.声明静态属性时指定的初始值
2.使用静态初始化快为静态属性指定初始值
假如这个类还没有被加载和连接,程序先加载并连接该类
假如该类的直接父类还没有初始化,则先初始化其直接父类
假如类中有初始化语句则系统依次执行这些初始化语句
当程序主动使用任何一个类的时候,系统会保证该类以及所有的父类(包括直接父类和间接父类)都会被初始化
Java通过下面六种方式初始化类或者接口
1.创建类的实例,为某个类创建实例的方式包括使用new操作符来创建实例,通过反射机制创建实例,通过反射方式来创建实例
2.调用某个类的静态方法
3.访问某个类或者接口的静态属性,或为该静态属性赋值
4.使用反射方式来强制创建某个类或者接口对应的java.lang.class对象
5.初始化某个类的子类当程序主动使用任何一个类的时候,系统会保证该类以及所有的父类(包括直接父类和间接父类)都会被初始化
6.直接使用java.exe命令来运行某个主类,当运行某个主类时,程序会先初始化该主类