大家都用过Class.forName(),也都知道是类加载的作用,其实这方法不只是类加载,还有类初始化。

下面用个小例子说明一下:

A类,是用来加载的类

/**
* 用来测试类加载的类此类有
* 静态代码块,静态参数
* 代码块,参数
* 构造器
*/
public class A {
static int i = 1;
static{
System.out.println("静态代码块初始化");
}
int x = 0;
{
System.out.println("代码块初始化");
}
public A() {
System.out.println("构造方法初始化");
} }

TestClass类,用来测试的加载类的测试类:

/**
* 此方法用来测试Class.forName()的功能
*/
public class TestClass { /**
* Class.forName()方法会做两件事
* 1.会把指定的类加载到内存
* 2.然后把指定的类初始化(类初始化只初始化静态参数和代码块,因为静态是和类同生的)
* @throws ClassNotFoundException
*/
@Test
public void test() throws ClassNotFoundException{
Class clazz = Class.forName("A");
} /**
* Class.forName(String clazz,boolean bl,ClassLoader cl)
* 第一个参数就是要加载类的类路径
* 第二个参数可以指定类加载时是否初始化类
* 第三个参数可以指定加载类的类加载器
* @throws ClassNotFoundException
*/
@Test
public void test2() throws ClassNotFoundException{
ClassLoader cl = Class.forName("TestClass").getClassLoader();
Class.forName("A", false, cl);
}
}

结果:

1.test()输出结果是

静态代码块初始化

说明,Class.forName()不仅加载了类,还初始化了类参数(静态)。

2.test2()输出结果是

 (空)

说明,Class.forName(String,boolean,ClassLoader)可以指定加载类的类路径、是否初始化类参数、加载类的类加载器。当第二个参数为false时,只加载类,不初始化类。

其实,分析一下Class.forName()的源码会发现,forName(String)方法和forName(String,true,currentClassloader)的作用是一样的!

Class.forName()的作用的更多相关文章

  1. Class.forName()的作用与使用总结

    1.Class类简介: Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类 ...

  2. ava中Class.forName的作用浅谈

    转自:http://www.jb51.net/article/42648.htm Class.forName(xxx.xx.xx) 返回的是一个类 一.首先你要明白在java里面任何class都要装载 ...

  3. Class.forName()的作用与使用总结(转载)

    转载自:Class.forName()的作用与使用总结 1.Class类简介: Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识.这项信息纪录了每个对象所属的类.虚拟机 ...

  4. [转]Class.forName()的作用与使用总结

    1.Class类简介: Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类 ...

  5. Class.forName的作用以及为什么要用它【转】

    Class.forName(xxx.xx.xx) 返回的是一个类 首先你要明白在java里面任何class都要装载在虚拟机上才能运行.这句话就是装载类用的(和new 不一样,要分清楚). 至于什么时候 ...

  6. Java中Class.forName()的作用(转载)

    http://www.360doc.com/content/10/0712/10/1720440_38421273.shtml# 使用jdbc方式连接数据库时会使用一句代码Class.forName( ...

  7. Class.forName的作用

    在java语言中,任何类只有被装载到JVM上才能运行.Class.forName()方法的作用就是把类加载到JVM中,它会返回一个与带有给定字符串明的类或者接口相关联的Class对象,并且JVM会加载 ...

  8. java中的Class.forName的作用

    Class.forName有什么作用 Class.forName(xxx.xx.xx) 返回的是一个类 首先你要明白在java里面任何class都要装载在虚拟机上才能运行.这句话就是装载类用的(和ne ...

  9. Java面试题之Class.forName的作用

    按参数中指定的字符串形式的类名去搜索并加载相应的类,如果该类字节码已经被加载过,则返回代表该字节码的Class实例对象,否则,按类加载器的委托机制去搜索和加载该类,如果所有的类加载器都无法加载到该类, ...

随机推荐

  1. jsp利用application统计在线人数的方法

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  2. float,double和decimal类型

    float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位) double:双精度实型,含字节数为8,64bit数值范围-1.7E308~1.7E308(15个有 ...

  3. AutoVFL(适配)

    1.添加约束(系统) a.一个约束(上下左右) +(instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)att ...

  4. 放下恩怨,曝小米中兴投关键性一票让华为顺利取得5G短码控制权

    如果说最近国内科技公司最牛逼最令人振奋的新闻是啥,显然,就是两天前在3GPP RAN1 87次会议的5G短码方案讨论中,华为顺利碾压高通,战胜列强,拿下了5G的控制编码方案的标准. 虽然说,目前,华为 ...

  5. microsoft docx document operation with Java POI library

    microsoft docx document operation with Java POI library combine multiple docx document into one docu ...

  6. Palindrome Index

    传送门: Palindrome Index Problem Statement You are given a string of lower case letters. Your task is t ...

  7. 12.3 Arithmetic-software-

    一.流程图: 二.软件功能: 分为混合模式和单则模式,混合模式生成指定题数的任意四则混合运算,数字是1-10之间随机:单则模式是生成指定题数的加减乘除中指定的某一则运算,数字是1-10之间随机. 用户 ...

  8. C#使用 DirectX SDK 9做视频播放器 并在视频画线添加文字 VMR9

    视频图像处理系列 索引 VS2013下测试通过. 在百度中搜索关键字“DirectX SDk”,或者进入微软官网https://www.microsoft.com/en-us/download/det ...

  9. C# 异步

    private void GetHttpResponse() { var client = new Microsoft.HBase.Client.HBaseClient(new ClusterCred ...

  10. 作为一名前端er,从武汉来到深圳三个月有感

    来到深圳已经三个月了,从最开始的担心自己的能力不够怕不能够在深圳这个互联网产品及其发达的城市立足下来,到现在已经慢慢地拾起了一丁点的信心了 (虽然还有很多知识是不够的.但是相当于之前我的,我是觉得我已 ...