学习尚硅谷反射一章笔记:
1.疑问1:有两种可以调用公共的结构:new的方式和反射的方式。
解决方式:1.new的方式是在确定要造具体的类的对象时选择用,2.反射机制是在不确定要创建哪个类的对象时,使用,目前我的理解是反射机制和泛型一样是一个模板,主要体现在动态性(可以在服务器上理解这个技术)
2.反射机制与面向对象中的封装性是不是矛盾的?如何看待两个技术?
答: 不矛盾
首先分析什么是面向对象的封装性,其主要体现是将属性和方法设置为私有的使其在其他类中调用时无法访问该类中内部的私有属性和私有方法。要想使用其私有属性和私有方法则应该使用该类内部的public方法进行调用
反射机制是动态的。可以调用私有方法,但是不建议用。
3.关于java.lang.Class类的理解
Class实例对应着加载到内存中的一个运行时类。
3.1 类的加载过程:
程序经过javac.exe命令以后,回生成一个或者多个字节码文件(.class文件),然后调用java.exe对某个或多个字节码文件进行解释运行,调用java.exe的过程就是将字节码文件加载到内存中。此过程就称为类的加载机制,加载到内从中的类称之为运行时类,此运行时类就是Class的一个实例,Class的实例就对性着一个运行时类
加载到内存中的运行时类,会缓存一段时间,在这段时间内,我们可以通过不同的方式获取此运行时类。
3.2获取运行时类的常见的三种方式:
1:Class clazz1 = Person.class;(这种方式不能很好的表达出运行时类的动态特性,直接把运行时类的类型写死了)
2: Class clazz2 = person.getclass();//sout(person); //xxxx.yyyy.Person@...
3: Class clazz3 = Class.forName(String classpath); //体现反射的动态特性
4: 创建Class对应的运行时类的对象的通用方法,代码实现。以及这样操作,需要对应的运行时类构造器方面满足的要求。
Object obj = clazz.newInstance();创建了对应的运行时类的对象
*必须有空参的构造器
*权限修饰符的权限要足够通常为public