网站建设怎么添加评论,手机网站html5模板,wordpress 如何切换主题,天津网站排名方案反射概念
了解反射背景
存在某些变量或形参的声明类型是Object类型#xff0c;但是程序却需要调用该对象运行时类型的方法#xff0c;该方法不是Object中的方法#xff0c;如何解决。转到如何获取该对象运行时类型的方法。 只能运行时才能获取#xff0c;这就用到反射。 …反射概念
了解反射背景
存在某些变量或形参的声明类型是Object类型但是程序却需要调用该对象运行时类型的方法该方法不是Object中的方法如何解决。转到如何获取该对象运行时类型的方法。 只能运行时才能获取这就用到反射。
反射概述
Reflection被视为动态语言的关键。允许程序在运行期间借助Reflection API 取得任何类的内部信息并能直接操作任何对象的内部属性和方法。 例如下面的案例获取类的属性和方法两种都是可行的。 Testpublic void test() {// 创建Person类的实例Person1 person1 new Person1();// 调用Person类的属性和方法// 调用属性person1.age 10;System.out.println(person1.age);// 调用方法person1.show();}/*使用反射完成上述的操作*/Testpublic void test1() throws Exception {// 调用构造器方法ClassPerson personClass Person.class;Person person personClass.newInstance();System.out.println(person);// 调用属性先获取age属性Field ageField personClass.getField(age);// 然后通过属性设置对象内部的属性值之前是通过对象调用方法设置属性值ageField.set(person, 10);System.out.println(ageField.get(person));// 调用方法Method showMethod personClass.getMethod(show);showMethod.invoke(person);}
反射机制提供的功能
在运行时判断任意一个对象所属的类构造任意一个类的对象判断任意一个类所具有的成员变量和方法获取泛型信息调用任意一个对象的成员变量和方法在运行时处理注解生成动态代理
Class类java反射的源头
获取class实例的方式
调用运行时类的静态属性class调用运行时类的对象getClass()调用Class的静态方法forName(String className)使用类的加载器方式
了解类的加载过程 过程1类的装载(loading) 将类的class文件读入内存并为之创建一个java.lang.Class对象。此过程由类加载器完成
过程2链接(linking)
验证(Verify):确保加载的类信息符合JVM规范例如以cafebabe开头没有安全方面的问题。准备(Prepare):正式为类变量static分配内存并设置类变量默认初始值的阶段这些内存都将在方法区中进行分配。解析(Resolve):虚拟机常量池内的符号引用常量名替换为直接引用地址的过程。
过程3初始化(initialization) 执行类构造器()方法的过程。 类构造器()方法是由编译期自动收集类中所有类变量的赋值动作和静态代码块中的语句合并产生的。