wordpress最新版本下载,天津做网站优化价格,自己做的网站出现乱码,苏州战斧网络科技有限公司1.什么是动态语言#xff1f;程序运行时#xff0c;可以改变程序的结构或者变量类型#xff1b;如Python#xff0c;javaScriptfunction(){var svar a3;var b4; evals(s);}在执行javascript代码的的过程中#xff0c;可以改变变量的值或插入语句改变结构。但J…1.什么是动态语言程序运行时可以改变程序的结构或者变量类型如PythonjavaScriptfunction(){var svar a3;var b4; evals(s);}在执行javascript代码的的过程中可以改变变量的值或插入语句改变结构。但Javac 并不是动态的语言不过我们可以利用反射的机制字节码的操作等获得动态语言的特性使得Java的编程更加灵活。2.反射(reflection)----程序已经运行但依然可以加载探知使用编译期间完全未知的类----在程序运行的时候可以只根据类的名称来动态加载一个类。对于任意一个已经加载的类我们都能知道它的所有属性和方法对于任意一个对象我们都能调用它的方法和属性。----Class clz Class.forName(包名.类名“)-----加载完类之后会在堆的内存中产生一个Class类型的对象(一个类只有一个Class对象)这个对象包含了类的完整的结构信息通过这个对象我们可以看到类的结构信息它就像一面镜子所以称之为反射。2.简单的实例通过反射。User类的结构信息就会被保存到clz对象中。另外获取Class对象的方法1.类名.class() 如(int.class User.class)2.对象名.getClass()3.反射的作用--动态加载类获取类的(属性方法)Class clz Class.forName(包名.类名“)--动态构造对象User u clz.getDeclaredsConstructor ( 形参类型.class....).newInstance();--动态调用类的任意方法构造器Methods []arr clz.getDeclaredtMethods()(获得所有方法)Methods method clz.getDeclaredMethods(方法名, 方法的形参类型.class)Constructor [] arr clz.getDeclaredConstructors()(获得所有的构造器)Constructor constructor clz.getDeclaredsConstructor ( 形参类型.class....)--动态调用处理属性Fileds[] array clz.getFields();(只能获得Publicb属性的变量)Fileds[] array clz.getDeclaredFields()(获得所有属性)Filed field clz.getDeclaredFields(指定名称的属性)--动态获取泛型信息--处理注解4.实例package com.ljl.reflection;import java.lang.reflect.Method;public class ReflectionTest1 {public static void main(String[] args) throws Exception {// TODO Auto-generated method stubClass clz Class.forName(com.ljl.reflection.User);System.out.println(clz);//通过反射构造对象User u1 (User) clz.getConstructor().newInstance();System.out.println(u1);//通反射API调用普通方法Method method1 clz.getDeclaredMethod(setId, int.class);method1.invoke(u1, 001);Method method2 clz.getDeclaredMethod(setName, String.class);method2.invoke(u1, panda);//u1.setId(001);u1.setName(panda);相同System.out.println(u1);//通过反射Api操作属性java.lang.reflect.Field f clz.getDeclaredField(id);//若属性私有不能操作将会报错。//设置:不做安全检查f.setAccessible(true);f.set(u1, 002);System.out.println(u1);}}结果