本文标签:
差异:
1、出现的时期不同:Class.forName()在运行时加载;Class.class和getClass()是在编译器加载
2、Class.class只是在编译时用来存放类的相关信息,并没有实例化对象;而getClass()既实例化了对象,又存放了类信息 3、例: Test t=new Test(); Class c=t.getClass(); Class c=Class.class; Class c=Class.forName("Test");
示例:
package com.hsia.util;
public class Test {
Test(){}
private String test;
public String getTest() {
return test; }public void setTest(String test) {
this.test = test; }public static void f(Test t)
{ System.out.print(t); }public static void main(String[] arg) throws Exception
{ System.out.println(Test.class); System.out.println(new Test()); System.out.println(Test.class.newInstance());Class clas = null;
try { clas = Class.forName("Test"); //此处必须为完整路径 com.hsia.util.Test System.out.println(clas); } catch (ClassNotFoundException ex) { // handle exception case } System.out.println(clas);Test t=new Test();
System.out.println(t.getClass().newInstance()); System.out.println(t);f(t); } }输出结果:
第一次输出:
class com.hsia.util.Test com.hsia.util.Test@1df38fd com.hsia.util.Test@16a786 null com.hsia.util.Test@1efb836 com.hsia.util.Test@126e85f com.hsia.util.Test@126e85f第二次输出:
class com.hsia.util.Test com.hsia.util.Test@de6ced com.hsia.util.Test@c17164 null com.hsia.util.Test@61de33 com.hsia.util.Test@14318bb com.hsia.util.Test@14318bb结论:
Test.class:输出类名
new Test():输出类实例的内存物理地址 Test.class.newInstance():输出类实例的内存物理地址 t.getClass().newInstance():输出类实例的内存物理地址 t:也是类实例内存地址声明: 本文由()原创编译,转载请保留链接: