以前只学习了一些java很基础的东西,像反射呀多线程这些都没有去深入了解。
1. 反射不是jdk5.0的新特性,自从1.2以来就有了,框架的编写都会用反射技术来实现。
2.我们用class(小写)来表示生活中各种类,描述这类事物有什么属性,没有什么属性,什么行为等等,class不管具体的值,由这个类的实例对象来决定 。
3. java程序中各个class也算是一种事物,同一种事物,那么我们怎么描述这一类事物?这时我们就需要Class。比如说 人---->Person java 类----->Class
4. Class中就应该包括这个类的名字,属于哪个包,有哪些方法,有哪些成员变量。有哪些方法等等。
5. Class class1 = 字节码1;Class class2 = 字节码2;每一份字节码就是Class的实例对象。
6.当我们在源程序中用到了Person这个类的时候,先把类的字节码加载到内存里面来,再用这个类的字节码复制出一个个的对象来,我们用到了几个类,内存中就会存在这几个类的字节码,这些字节码就是Class的实例对象。
7.- ①
C
lass class1 = Date.class;//
字节码
1 Class class2 = Person.class;//
字节码
2
;
② Person p = new Person(),p 就是那个字节码new出来的对象, p.getClass() 得到的是那份字节码对象new出来的。以上两种方法都是这个类的字节码已经加载到内存里面来了,现在要得到字节码,不需要再加载了,自己找到那份字节码,把它返回。
③ Class .forName( "com.interview.Person" ); 也可以得到这个类的字节码,但是这时这个类的字节码还没有加载到内存里,通过该语句加载完成之后,就把那份字节码在内存中缓存起来,同时 forName 方法返回了该字节码。以后想要这份字节码就不需要再加载了。做反射时主要用这种方式。
- 8. 可以将括号里面的值换成一个字符串类型的变量,等程序运行起来以后这个变量的值从一个配置文件里面装载进来。
9. 八种基本类型和一个void类型都有对应的Class,有9个预定义Class类型的对象。
10. Integer 类中有一个TYPE常量代表Integer所包装的int类型的字节码。其他封装类类型也是一样。总之,只要在源程序中出现的类型,都有各自的Class实例对象,例如,int[],void,,,