java中类名.class实例.getclass()区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中类名.class实例.getclass()区别相关的知识,希望对你有一定的参考价值。
1 import java.util.HashSet; 2 import java.util.Iterator; 3 4 /** 5 * Created by GOD on 2016/1/23. 6 * Class对象的生成方式如下: 7 1.类名.class 说明: JVM将使用类装载器, 将类装入内存(前提是:类还没有装入内存),不做类的初始化工作.返回Class的对象 8 2.Class.forName("类名字符串") (注:类名字符串是包名+类名) 说明:装入类,并做类的静态初始化,返回Class的对象 9 3.实例对象.getClass() 说明:对类进行静态初始化、非静态初始化;返回引用o运行时真正所指的对象(因为:子对象的引用可能会赋给父对象的引用变量中)所属的类的Class的对象 10 */ 11 public class ClassAndGetclass { 12 public static void main(String[] args) throws ClassNotFoundException { 13 14 //测试.class 15 Class testTypeClass = TestClassType.class; 16 System.out.println("testTypeClass---" + testTypeClass); 17 System.out.println("类装入内存完毕"); 18 19 //测试Class.forName() 20 Class testTypeForName = Class.forName("TestClassType"); 21 System.out.println("testTypeForName---" + testTypeForName); 22 23 //测试Object.getClass() 24 TestClassType testTypeGetClass = new TestClassType(); 25 System.out.println("testTypeGetClass---" + testTypeGetClass.getClass()); 26 27 HashSet hashSet = new HashSet(); 28 hashSet.add("s"); 29 Iterator iterator = hashSet.iterator(); 30 System.out.println(iterator.getClass().getName()); 31 System.out.println(Iterator.class.getName()); 32 33 34 35 } 36 } 37 38 class TestClassType { 39 //构造函数 40 public TestClassType() { 41 System.out.println("----构造函数---"); 42 } 43 //静态的参数初始化 44 static { 45 System.out.println("---静态的参数初始化---"); 46 } 47 //非静态的参数初始化 48 { 49 System.out.println("----非静态的参数初始化---"); 50 } 51 }
输出结果:
testTypeClass---class TestClassType
类装入内存完毕
---静态的参数初始化---
testTypeForName---class TestClassType
----非静态的参数初始化---
----构造函数---
testTypeGetClass---class TestClassType
java.util.HashMap$KeyIterator
java.util.Iterator
生成Class对象的过程其实是如此的:
当 我们编写一个新的java类时,JVM就会帮我们编译成class对象,存放在同名的.class文件中。在运行时,当需要生成这个类的对象,JVM就会 检查此类是否已经装载内存中。若是没有装载,则把.class文件装入到内存中。若是装载,则根据class文件生成实例对象。
1 import java.util.*; 2 import java.lang.reflect.*; 3 4 public class CSDN { 5 public static void main(String args[]) throws Exception{ 6 Set s = new HashSet(); 7 s.add("foo"); 8 Iterator it = s.iterator(); 9 Class[] argsClass = new Class[0]; 10 Method m = Iterator.class.getMethod("hasNext",argsClass); 11 System.out.println(m.invoke(it,argsClass)); 12 } 13 }
//可正常执行
1 import java.util.*; 2 import java.lang.reflect.*; 3 4 public class CSDN { 5 public static void main(String args[]) throws Exception{ 6 Set s = new HashSet(); 7 s.add("foo"); 8 Iterator it = s.iterator(); 9 Class[] argsClass = new Class[0]; 10 Method m = it.getClass().getMethod("hasNext",argsClass); 11 System.out.println(m.invoke(it,argsClass)); 12 } 13 } 14 //不能执行
理由同上: System.out.println(iterator.getClass().getName()); java.util.HashMap$KeyIterator
System.out.println(Iterator.class.getName()); java.util.Iterator
以上是关于java中类名.class实例.getclass()区别的主要内容,如果未能解决你的问题,请参考以下文章
java中类名.class, class.forName(), getClass()区别
java中Class对象详解和类名.class, class.forName(), getClass()区别