类初始化和类的加载问题

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命令来运行某个主类,当运行某个主类时,程序会先初始化该主类




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值