JVM 1.类的加载、连接、初始化
Java类的加载是由类加载器来完成的,过程如下:

首先,加载是把硬盘、网络、数据库等的class文件中的二进制数据加载到内存的过程,然后会在Java虚拟机的运行时数据区的堆区创建一个Class对象,用来描述该类,再在方法区存放这些二进制数据,用来保存类对应的数据结构

Java的类加载器有哪些?

下面的String对象是由bootstrap根类加载器加载的,而自定义类C是由系统加载器加载的:
/**
* 源文档中这样描述:
* 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.
* @author Administrator
*
*/
public class ClassLoader2 { //测试
public static void main(String[] args) throws ClassNotFoundException {
Class c1 = Class.forName("java.lang.String");
System.out.println("String类的加载器:"+c1.getClassLoader());//bootstrap根类加载器(C++实现的),返回null
Class c2 = Class.forName("com.mlxs.classloader.MyClass");
System.out.println("自定义MyClass类的加载器:"+c2.getClassLoader());//AppClassLoader 系统(应用)加载器
/**
* 返回数据:
* String类的加载器:null
* 自定义MyClass类的加载器:sun.misc.Launcher$AppClassLoader@425224ee
*/
} } class MyClass{ }
关于初始化,什么情况下初始化类?在主动使用的时候初始化:

一个例子:
public class ClassLoader1 {
private static ClassLoader1 classLoader1 = new ClassLoader1();
private ClassLoader1(){
a ++;
b ++;
}
public static int a;
public static int b = 0;
public static ClassLoader1 getIntsance(){
return classLoader1;
}
//测试
public static void main(String[] args) {
ClassLoader1 clazz = ClassLoader1.getIntsance();
/**
* 类加载后,
* 准备阶段:(1)classLoader1赋值null,(2)a和b都赋值默认值0;
* 初始化阶段: (1)new classLoader1的时候,a++(=1),b++(=1)
* (2)a没默认值,值不变;b默认值为0,b赋值0
* 所以,最后a=1,b=0
*
* 如果把new ClassLoader1()放到int a b 的后面,则最后a=1,b=1
*/
System.out.println("a:"+clazz.a);
System.out.println("b:"+clazz.b);
}
}
结果:
a:1
b:0
要注意的是:
子类主动使用,会导致父类的初始化;而父类主动使用,不会使子类初始化。如,new Object() 不会导致它的子类(所有的Java类)都初始化
而子类实现接口,当子类被初始化,不会导致接口初始化。只有当接口中的静态变量被使用时才会初始化
JVM 1.类的加载、连接、初始化的更多相关文章
- Java 类的加载与初始化
本文结构: 1.先看几道题 2.类的加载于初始化 (1)类的加载 (2)类的初始化 (a)会发生类的初始化的情况 (b)不会发生类的初始化的情况 首先看几道题. 解析可在看完讲解后再看 Demo1 p ...
- java类的加载以及初始化顺序
类的加载和初始化的了解对于我们对编程的理解有很大帮助,最近在看类的记载方面的问题.从网上查阅了若干文章,现总结如下: 我们通过一段代码来了解类加载和初始化的顺序: package com.classl ...
- jvm(1)类的加载(二)(自定义类加载器)
[深入Java虚拟机]之四:类加载机制 1,从Java虚拟机的角度,只存在两种不同的类加载器: 1,启动类加载器:它使用C++实现(这里仅限于Hotspot,也就是JDK1.5之后默认的虚拟机,有其他 ...
- JVM:java类的加载机制
原文连接:https://www.cnblogs.com/ityouknow/p/5603287.html 类加载机制的奥妙. 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读 ...
- Java类的加载 链接 初始化
原文地址 Java类的加载.链接和初始化.Java字节代码的表现形式是字节数组(byte[]),而Java类在JVM中的表现形式是java.lang.Class类的对象.一个Java类从字节代码到能够 ...
- jvm(1)类的加载(三)(线程上下文加载器)
简介: 类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的. Java Applet 需要从远程下载 Java 类文件到浏览器中并执行. 现在类加载器在 ...
- java类的加载与初始化
https://blog.csdn.net/u013349237/article/details/71076617 1在命令行启动虚拟机jvm进行加载, 2用class.forname()方法进行动态 ...
- Java类的加载及初始化
每个类的编译代码都存在于它自己的独立文件中,该文件在需要使用该程序代码时才会被加载.通常有以下三种加载情况: (1) 访问了子类的静态变量或静态方法:仅对类的静态变量,静态块执行初始化操作,并仅初始化 ...
- java 类的加载、连接和初始化
JVM和类 调用Java命令运行Java程序时,该命令将会启动一条Java虚拟机进程,不管该Java程序启动了多少条线程,创建了多少个变量,它们都处于该Java虚拟机进程里,共享该JVM进程的内存区. ...
随机推荐
- :first // :last
描述: 获取匹配的第一个元素 HTML 代码: <ul> <li>list item 1</li> <li>list item 2</li> ...
- 有趣的insert死锁
昨天看到一个很有意思的死锁,拿来记录下: 环境:deadlock on 事务隔离级别: read commited 表结构: root::>show create table lingluo\G ...
- linux设备驱动归纳总结(七):1.时间管理与内核延时【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-100005.html linux设备驱动归纳总结(七):1.时间管理与内核延时 xxxxxxxxxxx ...
- android listview万能适配器
参考 Android 快速开发系列 打造万能的ListView GridView 适配器 Hongyang public class CommonViewHolder { private Con ...
- 转载:JMS-ActiveMQ浅析
ActiveMQ 即时通讯服务 浅析 一. 概述与介绍 ActiveMQ 是Apache出品,最流行的.功能强大的即时通讯和集成模式的开源服务器.ActiveMQ 是一个完全支持JMS1.1和J2EE ...
- [转]Windows配置Git
原文地址:http://blog.csdn.net/exlsunshine/article/details/18939329 1.从git官网下载windows版本的git:http://git-sc ...
- Can't create/write to file '/tmp/#sql_887d_0.MYD' (Errcode: 17)
lsof |grep "#sql_887d_0.MYD" 如果没有被占用就可以删掉 . https://wordpress.org/support/topic/cant-creat ...
- html+css复习之第2篇 | javascript
1. java 中定义数组和对象: 数组(Array)字面量 定义一个数组: [40, 100, 1, 5, 25, 10] 对象(Object)字面量 定义一个对象: {firstName:&quo ...
- 【转】java编译错误 程序包javax.servlet不存在javax.servlet.*
转载地址:http://blog.163.com/gis_warrior/blog/static/1936171732012811071642/ 编译:javac Servlet.java 出现 软件 ...
- YTU 2296: KMP模式匹配 二(串)
2296: KMP模式匹配 二(串) 时间限制: 1 Sec 内存限制: 128 MB 提交: 29 解决: 17 题目描述 输入一个主串和一个子串,用KMP进行匹配,问进行几趟匹配才成功,若没成 ...