javan

i like java
随笔 - 0, 文章 - 28, 评论 - 2, 引用 - 0
数据加载中……

Class.forName、Class.class(属性)、getClass()的区别

Class.forName、Class.class(属性)、getClass()的区别

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:也是类实例内存地址

posted on 2009-05-26 17:09 whl 阅读(2981) 评论(1)  编辑  收藏

评论

# re: Class.forName、Class.class(属性)、getClass()的区别  回复  更多评论   

d
2016-04-08 12:46 | 4

只有注册用户登录后才能发表评论。


网站导航: