.Class, Class.forName, .getClass()的区别
来源:互联网 发布:知乎 一二级市场套利 编辑:程序博客网 时间:2024/05/19 05:34
本来是在学习反射机制的, 可是看到其中有用到Class.forName, 自己对这个也不太熟悉, 于是就先补补这方面的知识
.Class和Class.forName是编译时决定, 而.getClass()是运行时决定
.Class: JVM将使用类的类装载器, 将类装入内存(前提是:类还没有装入内存),不对类做类的初始化工作.返回类的Class的对象(转, 不是很懂).getClass(): 返回对象运行时的真正对象(有可能存在向上转换)所属的类
Class.forName(): 装入类, 并做类的初始化
首先看个例子理解下
public class TestClass {public static void main(String[] args) throws Exception {Test t = new Test();System.out.println(Test.class);System.out.println(t.getClass());System.out.println(Class.forName("com.Test"));}}
上面的例子打印出来的结果是
Class com.Test
三者都是相同的, 当打印
System.out.println(t.getClass() == Class.forName("com.Test"));System.out.println(Test.class == Class.forName("com.Test"));System.out.println(t.getClass() == Test.class);时, 结果都是true
Test类如下
public class Test {}
然后在Test类中增加如下代码
public class Test {public Test() {System.out.println("构造函数初始化");}static{System.out.println("静态初始化");}{System.out.println("非静态初始化");}}这时需要分3种情况
1. System.out.println(Test.class);
打印为空
2. Test t = new Test();
System.out.println(t.getClass());
打印为: 构造函数初始化
静态初始化
非静态初始化
3. System.out.println(Class.forName("com.Test"));
打印为: 静态初始化
第一种情况, 由于只是装入内存, 不对类进行初始化, 所以不会执行构造函数, 静态/非静态代码块
第二种情况, 这种情况下, 会执行静态代码块和非静态代码块, 所以会执行
第三种情况, 这种情况下, 只会对类进行静态初始化
这篇文章就到这里为止了, 经过查阅资料和查看网上的文章, 大概的介绍了下三者的区别, 经过这次学习,
发现对java的执行过程不太清楚, 改天有空再补补这方面的知识
0 0
- .Class, Class.forName, .getClass()的区别
- getClass(),forName()和.class的区别
- Java中.class,class.forName(),getClass()的区别
- 类名.class, class.forName(), getClass()区别
- 类名.class, class.forName(), getClass()区别
- 类名.class, class.forName(), getClass()区别
- 类名.class, class.forName(), getClass()区别
- 类名.class, class.forName(), getClass()区别
- 类名.class, class.forName(), getClass()区别
- java中类名.class, class.forName(), getClass()区别
- 类名.class, class.forName(), getClass()区别
- 类名.class, class.forName(), getClass()区别
- 类名.class, class.forName(), getClass()区别
- java中类名.class, class.forName(), getClass()区别
- .getClass()、.class、.forName()
- 【Java】类名.class, class.forName(), getClass()区别
- 类名.class Class.forName("类的全路径") 对象实例.getClass的区别
- 类.class和类对象.getClass()、Class.forName("类名")的区别
- Unity3d and automated builds
- 59A - Word
- Linux学习内容——我想学学完这些应该高手了
- Linux学习内容--我认为已经足够了
- Letter Combinations of a Phone Number
- .Class, Class.forName, .getClass()的区别
- Red and Black
- C++中的向上类型转换和向下类型转换
- C++中重定义、重写、重载的区别以及隐藏与覆盖的访问
- C++ 虚函数表解析
- C++中虚函数工作原理和(虚)继承类的内存占用大小计算
- C++ primer plus(第六版)学习笔记、习题答案(4.2)
- 数字图象处理之二维码图像提取算法(四)
- STM32入门篇之通用定时器彻底研究新手教程,含11个例程,全面剖析TIMER,另外有个2.0库的