ClaasLoader及连接过程

1. 类的加载的最终产品是位于堆区的Class对象

 

2. Class对象封装了类在方法区内的数据机构,并且向Java程序员提供了访问方法区内的数据结构的接口

 

3. 有两种类型的加载器

---Java虚拟机自带的加载器

  .根类加载器(Bootstrap),由C++实现,程序员无法查看

  .扩展类加载器(Extension),java实现

  .系统类加载器(System),又称应用加载器,java实现

---用户自定义的类加载器

  .java.lang.ClassLoader的子类

  .用户可以定制类的加载方式

4. Every Class object contains a reference to the ClassLoader that defined it.

 

5. public ClassLoader getClassLoader()

Returns the class loader for the class. Some implementations may use null to represent the bootstrap class loader. This method will return null in such implementations if this class was loaded by the bootstrap class loader

 

Class clazz = Class.forName("java.lang.String");

System.out.println(clazz.getClassLoader());

会返回null

 

6. 类加载器并不需要等到某个类被“首次主动使用”时再加载它

 

7. JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载的过程中遇到了.class文件缺失或存在错误,类加载器必须在程序首次主动使用该类时才报告错误(LinkageError错误)

 

8. 如果这个类一直没有被程序主动使用,那么类加载器,就不会报告错误

 

9. 类被加载后,就进入连接阶段。连接就是将已经读入到内存的类的二进制数据合并到虚拟机的运行时的环境中

 

10. 类的验证的内容

---类文件的结构检查

---语义检查

---字节码验证

---二进制兼容性的验证



 11.类的准备


 12.类的解析
  



 13. 类的初始化
   



 14.理解ClassLoader

class Singleton{
	
	private static Singleton singleton = new Singleton();
	public static int counter1;
	public static int counter2 = 0;
	
	private Singleton(){
		counter1++;
		counter2++;
	}
	
	
	public static Singleton getInstance(){
		return singleton;
	}

 

public class MyTest {
	
	public static void main(String[] args) {
		/**
		 * 分析:在类的连接的、准备阶段,为静态变量分配内存,并将其初始化默认值,
		 * 此时,private static Singleton singleton=null
		 * 		public static int counter1=0
		 * 		public static int counter2 = 0;
		 * 
		 * 
		 * 调用Singleton.getInstance(),调用类的静态方法,属于首次主动使用该类,此时会执行初始化,
		 * 为类的静态变量赋予正确的初始值(静态变量声明顺序,从上到下)
		 * singleton = new Singleton()--->调用构造函数--->counter1=1 counter2=1
		 * 初始化 public static int counter1;,没有被赋值,counter1=1
		 * 初始化public static int counter2 = 0;,被重新赋值counter2=0
		 * 结果为1 
		 *       1
		 */
		Singleton singleton = Singleton.getInstance();
		
		System.out.println(singleton.counter1);
		System.out.println(singleton.counter2);
	}
	
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值