294761325
2017-02-27 16:14
Class c1 = Foo.class;
c1就是Foo类的类类型 如何分解这句话?
c1是Foo类的类也就是Class的类型?可以这样理解?
Class c1 = Foo.class;
System.out.println(c1.getName());
为什么结果又是Foo?
我是这么理解的:
Foo是一个类,没错吧;
然后这个类它有各种各样的属性,比如什么类名啊,类性别啊(假装它有),类体积啊(假装它有),类周长啊(假装它有)等等;
我们现在只不过取出来其中一个这个类的其中一个非常牛逼的属性:也就是这个类的类型(简称类(的)类型),这个类类型的牛逼之处在于:只要有了这个类的类型,我们就可以知道它的类名,它所有的成员变量,甚至它所有的的方法名;就像你知道了一个人的身份证号码一样,这个人的什么名字性别年龄指纹你都能通过这个身份证号码查到。
假设这个Foo这个类是个人的话,那么它的类类型就相当于这个人的身份证号码;
我们用Class c1 = Foo.class;这个语句取得了这个类的身份证号码(类类型),然后通过c1.getName();调用了取出这个类名字的方法getName(),那么你自然会看到这个类的名字,也就是Foo~
Class c1 = new Foo() 我的理解是可以看出是Fool类的向上转型,创建了一个父类的实例
Class类里面包含了人类能抽象出来的世界万物里面的所有属性(声光电热);Class类的实例被称为某类(某事物具有的共同属性)的类类型,某类的类类型的实例就是我们常用的实例对象(参数具体化)。
建议大家看一本书《java从入门到放弃》
概念
Class类是所有类(注意是对象)的共有信息的抽象,比如该类实现的接口、对应的加载器、类名等等。一句话,类类型保存了每个类所对应的类型信息。每一个类都有一个Class对象,这个对象在类被加载后由JVM自动构造。也是由JVM管理的,Class类是没有公共的构造方法的。
Class对象对于类来说就像是,DNA对于每个人,里面有你的一切生物信息。java中可以通过Class来取得类的实例,也许将来的将来通过你的DNA也能得到你的另一个实例。科幻电影里是已经实现了。ok,概念应该有个初步的认识了。
参考http://blog.csdn.net/zhuojiajin/article/details/39255815
首先如果你是初学者我不建议你把反射这里看很深,会影响你后面写代码的思路。反射的东西初学者浅尝辄止就好。只要知道反射是动态加载类,能和静态加载类区分开就行。等你用Spring+SpringMVC开发一段时间,遇到瓶颈了。再回来看效果会好很多。现在给你讲很难讲清楚,你可能面向对象的抽象概念都没理解。
现在疯吧 反正早晚都得疯 晚疯不如早疯
反射——Java高级开发必须懂的
151468 学习 · 335 问题
相似问题