Class.forName()的作用
大家都用过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()的作用的更多相关文章
- Class.forName()的作用与使用总结
1.Class类简介: Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类 ...
- ava中Class.forName的作用浅谈
转自:http://www.jb51.net/article/42648.htm Class.forName(xxx.xx.xx) 返回的是一个类 一.首先你要明白在java里面任何class都要装载 ...
- Class.forName()的作用与使用总结(转载)
转载自:Class.forName()的作用与使用总结 1.Class类简介: Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识.这项信息纪录了每个对象所属的类.虚拟机 ...
- [转]Class.forName()的作用与使用总结
1.Class类简介: Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类 ...
- Class.forName的作用以及为什么要用它【转】
Class.forName(xxx.xx.xx) 返回的是一个类 首先你要明白在java里面任何class都要装载在虚拟机上才能运行.这句话就是装载类用的(和new 不一样,要分清楚). 至于什么时候 ...
- Java中Class.forName()的作用(转载)
http://www.360doc.com/content/10/0712/10/1720440_38421273.shtml# 使用jdbc方式连接数据库时会使用一句代码Class.forName( ...
- Class.forName的作用
在java语言中,任何类只有被装载到JVM上才能运行.Class.forName()方法的作用就是把类加载到JVM中,它会返回一个与带有给定字符串明的类或者接口相关联的Class对象,并且JVM会加载 ...
- java中的Class.forName的作用
Class.forName有什么作用 Class.forName(xxx.xx.xx) 返回的是一个类 首先你要明白在java里面任何class都要装载在虚拟机上才能运行.这句话就是装载类用的(和ne ...
- Java面试题之Class.forName的作用
按参数中指定的字符串形式的类名去搜索并加载相应的类,如果该类字节码已经被加载过,则返回代表该字节码的Class实例对象,否则,按类加载器的委托机制去搜索和加载该类,如果所有的类加载器都无法加载到该类, ...
随机推荐
- sublime text 3 3114 注册码
-– BEGIN LICENSE -– Michael Barnes Single User License EA7E-821385 8A353C41 872A0D5C DF9B2950 AFF6F6 ...
- PHP ajax基础
后台对数据处理,并返回前台: <?php //接收 $action = $_GET['action']; if ($action == 'orderID') { $orderID = trim( ...
- PHP慢脚本日志和Mysql的慢查询日志
1.PHP慢脚本日志 间歇性的502,是后端 PHP-FPM 不可用造成的,间歇性的502一般认为是由于 PHP-FPM 进程重启造成的. 在 PHP-FPM 的子进程数目超过的配置中的数量时候,会出 ...
- mysql 存储过程在批处理数据中的应用
最近批处理数据的时候,突然想到:为什么不使用存储过程进行数据批处理? 为什么要进行批处理? 自答:减少数据库连接次数,提高效率. 存储过程批处理数据的优点:一次编译,永久执行. 这次的批处理逻辑较简单 ...
- Marquee 滚动参数
new marquee("Layer3", 2, 1, 989, 68, 20, 0, 0, 238); 参数说明:Layer3 :容器ID 2 :向上滚动(0向上 1向下 2向左 ...
- Android中的动画机制
1 逐帧动画 逐帧动画 就是一系列的图片按照一定的顺序展示的过程. 逐帧动画很简单, 只需要在drawable中或者anim中定义一个Animation-list 其中包含多个it ...
- getComputedStyle的简单用法
var number=window.getComputedStyle("元素").style样式名
- 【JSOI2010】Group 部落划分 BZOJ 1821
1821: [JSOI2010]Group 部落划分 Group Time Limit: 10 Sec Memory Limit: 64 MB 聪聪研究发现,荒岛野人总是过着群居的生活,但是 ...
- Python复习之下划线的含义
__xx__ 系统定义名字 __xx 双下划线的表示的是私有类型的变量.只能是允许这个类本身进行访问了.连子类也不可以 _xx 单下划线 不能用'from moduleimport *'导入 即保护类 ...
- C#基本工具代码
1.下载Xlsx public static void TryToDisplayGeneratedFileXlsx(string writeFilePath, string fileName) { H ...