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


声明: 本文由( 魔豆先生 )原创编译,转载请保留链接: Java Class.forName、Class.class、getClass示例区分

转载于:https://my.oschina.net/mythroad/blog/160756

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值