public class ClassLoaderOrClassForName{

    public static void main(String[] args) throws ClassNotFoundException{
ClassLoader loader = ClassLoader.getSystemClassLoader();
Class<?> loadClass = loader.loadClass("TestDiff");
System.out.println("Load Class : " + loadClass.getName());
System.out.println("------");
Class<?> forName = Class.forName("TestDiff");
System.out.println("Class for Name : " + forName.getName());
}
} class TestDiff{
static {
System.out.println("Static Method");
}
} output:

Load Class : TestDiff
------
Static Method
Class for Name : TestDiff

  Class.forName方法将类的.class文件加载到jvm的同时会执行static方法块中的内容。

  classLoader只会将类的.class文件加载到jvm中,不会执行static中的内容,只有在调用newInstance()方法调用构造函数,创建类的对象。

  

  JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化。

  加载阶段会在内存中生成一个代表这个类的Class对象,作为方法区这个类的各种数据的入口

  验证阶段主要是为了确保Class文件的字节流中包含的信息是否符合当前虚拟机的要求,并且不会危害jvm自身的安全

  准备阶段是正式为类变量分配内存并设计类变量的初始值阶段,即在方法区中分配这些变量所使用的内存空间

  解析阶段是指虚拟机将常量池中的符号饮用替换为直接应用的过程,符号引用就是class文件中的CONSTANT_Class_info,CONSTANT_Field_info,CONSTANT_Method_info

  初始化阶段是类加载最后一个阶段。初始化阶段是执行类构造器<client>方法的过程。<client>方法是由编译器自动收集类中的类变量的赋值操作和静态语句块中的语句合并而成。虚拟机会保证<client>方法执行前,父类的<client>方法已经执行完毕。

  JVM提供了3种类加载器

    Bootstrap ClassLoader:负责加载JAVA_HOME\lib目录中的,或通过Xbootclasspath参数指定路径中的,且被虚拟机认可的类

    Extension ClassLoader:负责加载JAVA_HOME\lib\ext目录中的,或通过java.ext.dirs系统变量指定路径中的类库

    Application ClassLoader:负责加载用户路径上的类库

classLoader和Class.forName的区别的更多相关文章

  1. loadClass和forName 的区别

    类的加载方式 1.隐式加载:new 2.显式加载,loadClass,forName 等 loadClass 和 forName的区别 类的装载过程 1.加载:通过classLoader加载class ...

  2. java加载类的方法1.classloader 2.class.forName()

    java加载类的方法1.classloader 2.class.forName() 加载一个类后,是在方法去创建这个类的元信息class对象,在方法区立刻创建.在方法区创建.

  3. ClassLoader.loadClass()与Class.forName()的区别

    ClassLoader.loadClass()与Class.forName()都是反射用来构造类的方法,但是他们的用法还是有一定区别的. 在讲区别之前,我觉得很有不要把类的加载过程在此整理一下. 在J ...

  4. ClassLoader.loadClass和Class.forName的区别

    为什么要把ClassLoader.loadClass(String name)和Class.forName(String name)进行比较呢,因为他们都能在运行时对任意一个类,都能够知道该类的所有属 ...

  5. ClassLoader.loadClass()与Class.forName()的区别《 转》

    ClassLoader.loadClass()与Class.forName()区别: ClassLoader.loadClass()与Class.forName()大家都知道是反射用来构造类的方法,但 ...

  6. java 类名.class、object.getClass()和Class.forName()的区别 精析

        1.介绍 getClass()介绍 java是面向对象语言,即万物皆对象,所有的对象都直接或间接继承自Object类: Object类中有getClass()方法,通过这个方法就可以获得一个实 ...

  7. java中Class对象详解和类名.class, class.forName(), getClass()区别

    一直在想.class和.getClass()的区别,思索良久,有点思绪,然后有网上搜了搜,找到了如下的一篇文章,与大家分享. 原来为就是涉及到Java的反射----- Java反射学习 所谓反射,可以 ...

  8. 类名.class, class.forName(), getClass()区别

    1:Class cl=A.class; JVM将使用类A的类装载器, 将类A装入内存(前提是:类A还没有装入内存),不对类A做类的初始化工作.返回类A的Class的对象. 2:Class cl=对象引 ...

  9. 【转】 java中Class对象详解和类名.class, class.forName(), getClass()区别

    Class对象的生成方式如下: 1.类名.class           说明: JVM将使用类装载器, 将类装入内存(前提是:类还没有装入内存),不做类的初始化工作.返回Class的对象 2.Cla ...

随机推荐

  1. python 基础语法练习回顾

    #!/usr/bin/python# -*- coding: UTF-8 -*-import timeimport calendar student = {"age": 7,&qu ...

  2. 不同浏览器中scrollHeight的比较

    每个浏览器的兼容性不同所以就有了如下判断方案 document.body是DOM中Document对象里的body节点, document.documentElement是文档对象根节点(html)的 ...

  3. Ubuntu LNMP系统搭建Zabbix监控

    系统环境 操作系统类型:Ubuntu 系统环境版本:4.4.0-122-generic IP地址:192.168.152.118 第一步:选择适当的操作系统类型与各项的版本要求,我这边直接使用LNMP ...

  4. vue 修饰符

    Vue.js 为 v-on 提供了事件修饰符来处理 DOM 事件细节,如:event.preventDefault() 或 event.stopPropagation(). Vue.js通过由点(.) ...

  5. UIPath Level 1

    近日搬砖养家糊口,忙于项目,博客更新一度中断,自己都觉得委屈了. 培训视频看的眼睛耳朵疼,做完最后一个终极考试,哪儿哪儿都觉得不舒服~ 先来个截图,醒醒脑~ 今儿就歇下了~

  6. 查看JVM内存使用状况

    1.jps:查看本地正在运行的java进程和进程ID(pid) 2.jinfo pid,查看指定pid的所有JVM信息 1)jinfo -flags pid 查询虚拟机运行参数信息. 2)jinfo ...

  7. oracle中“ORA-00060: 等待资源时检测到死锁” 或存储过程编译卡死 解决方法

    之前在调试存储过程时,出现卡死情况,无法插入数据 解决方法 1.查看那些表被锁住: --1.查看那些表被锁住--- select b.owner,b.object_name,a.session_id, ...

  8. CentOS 7上安装PGI 2017编译器

    1. 安装PGI编译器 在PGI的官方网站的右上角,有一个社区免费版(Community Edition)的下载链接(GET PGI FOR FREE),根据操作系统选择合适的版本即可. 需要注意的是 ...

  9. MySQL— pymysql模块(防止sql注入),可视化软件Navicat

    一.Pymysql import pymysql #python2.X 中是 mysqldb 和 pythonmysql 用法是一模一样的 #pymysql可以伪装成上面这两个模块 user = in ...

  10. Spring———bean的创建方式,注入方式,复杂类型注入 概括

    Spring相关概念和类    1.IOC             inverse of control    控制反转   反转了创建对象的方式            以前:new 对象,管理和维护 ...