在Java中,类加载器把一个类加载进Java虚拟机中,要经过三个步骤来完成:加载、链接和初始化,其中链接又可以分成验证、准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下:

  1. 加载:查找和导入类或接口的二进制数据;
  2. 链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;
    • 验证:检查导入类或接口的二进制数据的正确性;
    • 准备:给类的静态变量分配并初始化存储空间;
    • 解析:将符号引用转成直接引用;
  3. 初始化:激活类的静态变量的初始化Java代码和静态Java代码块。

我们可以开始看2者的区别了。

Class.forName(className) 方法,其实调用的方法是Class.forName(className,true,classloader);注意第2个boolean参数,它表示的意思是在加载之后必须初始化。在执行过此方法后,目标对象的静态块代码已经被执行,静态参数也已经被初始化。

再看ClassLoader.loadClass(className) 方法,其实他调用的方法是ClassLoader.loadClass(className,false); 注意看第2个 boolean参数,该参数表示目标对象被加载后不进行链接,这就意味着不会去执行该类静态块中的内容。

反射中的 Class.forName() 与 ClassLoader.loadClass() 的区别的更多相关文章

  1. 015 反射中的 Class.forName() 与 ClassLoader.loadClass() 的区别

    作者:nnngu GitHub:https://github.com/nnngu 博客园:http://www.cnblogs.com/nnngu 简书:https://www.jianshu.com ...

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

        看到一个面试题,说说Class.forName() 与 ClassLoader.loadClass()的区别,特意记录一下,方便后续查阅.     在我们写java代码时,通常用这两种方式来动 ...

  3. 反射中Class.forName()和ClassLoader.loadClass()的区别

    一 Java类装载过程 装载:通过累的全限定名获取二进制字节流,将二进制字节流转换成方法区中的运行时数据结构,在内存中生成Java.lang.class对象: 链接:执行下面的校验.准备和解析步骤,其 ...

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

    Class的装载分了三个阶段,loading,linking和initializing,分别定义在The Java Language Specification的12.2,12.3和12.4. Cla ...

  5. Class.forName和ClassLoader.loadClass的区别(转载)

    Class的装载分了三个阶段,loading,linking和initializing,分别定义在The Java Language Specification的12.2,12.3和12.4.Clas ...

  6. java两种反射的区别 - Class.forName()和ClassLoader.loadClass()

    在理解这两种反射机制之前,需要弄清楚java类的加载机制. 装载:通过类的全限定名获取二进制字节流(二进制的class文件),将二进制字节流转换成方法区中的运行时数据结构,在内存中生成Java.lan ...

  7. Class.forName和ClassLoader.loadClass等

    Class类 首先,Class类里可以记载所有类的属性.方法等信息.这个也就是运行时类别标记,它记录了所有的对象(比如int,MyClass,void,数组等等)对应的类信息. Class对象 JVM ...

  8. Class.forName和ClassLoader.loadClass的比较

    文章出处:http://blog.csdn.net/wikijava/article/details/5576043 Class的装载分了三个阶段,loading,linking和initializi ...

  9. Class.forname和ClassLoader.loadClass的源码分析

    最近在研读<深入理解java虚拟机:JVM高继特性与最佳实践>第二版, 今天想起来很久前,写数据库连接,使用Class.forName,当时没有深究,所以便简单的看了下源码,顺便做了以下记 ...

随机推荐

  1. jsp实现文件下载的代码(转载)

    Java代码   OutputStream out=response.getOutputStream(); byte by[]=new byte[500]; File fileLoad=new Fil ...

  2. vscode 中使用 csscomb

    我看中 csscomb 主要是用来给 css 属性排序用的,当然他也有格式化的作用: 1.安装不必说,但是装了之后,默认似乎没用: 2.点开 文件-首选项,搜下 csscomb 就知道了: 3.第一个 ...

  3. This module embeds Lua, via LuaJIT 2.0/2.1, into Nginx and by leveraging Nginx's subrequests, allows the integration of the powerful Lua threads (Lua coroutines) into the Nginx event model.

    openresty/lua-nginx-module: Embed the Power of Lua into NGINX HTTP servers https://github.com/openre ...

  4. talib 中文文档(七):Overlap Studies Functions

    Overlap Studies Functions 重叠指标 BBANDS - Bollinger Bands 函数名:BBANDS 名称: 布林线指标 简介:其利用统计原理,求出股价的标准差及其信赖 ...

  5. SQL Server批量数据导出导入BCP&Bulk使用

    数据导出导入,首先考虑使用什么技术实现导出与导入利用BCP结合Bulk技术实现数据的导出与导入 1.bcp数据导出(这里是命令行方式),导出的数据需是格式化的,有两种方式可选 a.对传输的数据格式要求 ...

  6. 【开发者笔记】利用shp2pgsql将shape文件导入到postgresql中

    导入shp文件到postgresql中 1.首先,你需要让shp2pgsql命令可用,百度下载,加入环境变量即可. 下载地址:https://download.osgeo.org/postgis/wi ...

  7. 配置Tomcat直接显示目录结构和文件列表

    Tomcat是直接显示目录结构和文件列表,只是在配置里面给关闭了. 关键在这里:\conf\web.xml 这个文件有一段配置直接控制Tomcat是允许显示目录结构和文件列表. <servlet ...

  8. POJ1236:Network of Schools(tarjan+缩点)?

    题目: http://poj.org/problem?id=1236 [题意] N(2<N<100)各学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输,问题1 ...

  9. Mybatis的CRUD案例

    一.Mybatis增删改查案例 上一节<Mybatis入门和简单Demo>讲了如何Mybatis的由来,工作流程和一个简单的插入案例,本节主要继上一讲完整的展示Mybatis的CRUD操作 ...

  10. xshell过期了怎么办,是学生就用学生版吧

    访问这里:https://www.netsarang.com/download/software.html 点击Free for Home & School 下载家庭版和学生版 来到这个页面了 ...