Java反射学习--Class

最近在恶补一些比较底层和基础的知识,这些知识或许在工作中直接是用不上的,但是学会了,明白了,无论是对以后就业面试还是更清楚的认识框架技术都是很有帮助的,在这里记下点笔记方便自己以后查找回味,帮助一些对此比较忙热的盆友,也希望各位高手能够指出来不足,让小弟成长,大家互惠互利嘛。

首先今天先记下Class这个东东

此Class非public class 里的class,说的真绕口,学过java的盆友们都知道,什么叫做面向对象吧,其实就是用现实生活的思维去编程,把一堆堆冰冷的代码看成是一个个对象,比如现实生活中代表所有人的一种统称就叫人类,这种思想在java代码里你就可以把它作为一个类,比如叫Person类,它有Name属性,Age属性,等等和现实生活中人一样的属性,这是这个群体(这个类)所共有的,具体到每一个人的身上,各种属性的值也就不同了,也就是所谓的对象,简单说,类就是统称,对象就是个体。

 

现实生活中任何东西都可以看成是一个对象,他们属于不同的类,比如人是人类,轿车卡车是交通工具类,各种化学元素属于化学类,甚至看似飘渺的马列主义是属于思想类的。

在Java Code里,你可以任意地将现实中的类转换成代码,比如之前说的Person,还有对应上面你可以 public class Transportation,public class Chemistry 等等等等,然而这些public class出来的东西我们都知道叫类,不同的类有不同的名字,而他们同样也有着一个统称,那就是Class,注意是大写哦。如果还觉得抽象,我再举个例,语文数学英语计算机,这些都是学科类的各个对象;网络,编程,硬件这又是计算机学科类的各个对象;java,C,C++,VB这又是编程类下的不同对象;面向对象,面向过程,又是Java这个类下的不同对象;而Class则是面向对象这个类下的对象;紧接着什么Person,Date,String则又是Class这个类下的不同对象,所以有一话就是说万物皆是类,看似很飘渺,但其实是很有道理的。

 

扯来扯去扯远了,还是继续说说Class这个东西。

java在编译时候,会先把你声明的数据(包括基本数据类型或者类)转化成字符码,然后把这些字符码装载到JVM后在内存上生成。也就是说,你每一个声明出来的东西都是对应着一段字符码的,这种字符码是对于类而言的,不是个体。也就是说你String s1=“12345”和String s99 ="XXXXXX",他们的字符码都是一样的,因为他们都是String类的字符码。

如何获取字符码并验证我的说法呢,大家可以参考如并思考如下代码的结果。

 1 public class ReflectDemo {
 2 
 3     public static void main(String[] args) throws ClassNotFoundException{
 4         String str = "abc";
 5         //方法一:
 6         Class<?> clas1 = str.getClass();
 7         //方法二:
 8         Class<?> clas2 = String.class;
 9         //方法三:
10         Class<?> clas3 = Class.forName("java.lang.String");
11         System.out.println(clas1 == clas2);
12         System.out.println(clas2 == clas3);
13         System.out.println(clas1 == clas3);
14     }
15 }

答案都是true,因为他们最终获得的字符编码都是String类型的,所以说都是true。

这里还有个方法是Class提供了一个方法是isAnnotation(),通过这种方法你可以知道你声明的这个变量是否为基本数据类型,大家可以实验运行下列代码。
1         Class<?> clas4 = int.class;
2         Class<?> clas5 = Integer.class;
3         System.out.println(clas4.isAnnotation());
4         System.out.println(clas5.isAnnotation());
5         System.out.println(clas4.isAnnotation()==clas5.isAnnotation());

 

Integer.TYPE.isAnnotation的结果又是什么?猜猜看。。。

再次声明纯属自己学习用的,高手勿嘲讽。。。。


posted @ 2012-12-27 11:50  tf_swufe  阅读(182)  评论(0编辑  收藏  举报