二进制流的来源
1.从压缩包(jar war ear)中获取
2.从网络中获取(Apple技术)3.**从运行过程中动态生成(动态代理)--Proxy-->$Proxy(AVRO,Tlwift等格式可以在运行时将某个schema文件生成对应的若干class再加载)4.从其他文件生成(JSP文件生成class类)5.从数据库中读取
1.获取字节码文件对象
Class c =Class.forName("全路径");2.获取单个公共无参构造方法
//public Constructor<T> getConstructor(Class<?>... parameterTypes)//参数:要获取的构造方法的参数数据类型的class字节码文件对象Constructor con = c.getConstructor();// 返回的是构造方法对象//public T newInstance(Object... initargs)//使用此Constructor对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例Object obj = con.newInstance();System.out.println(obj);//全路径对象3.获取单个公共有参构造方法
//public Constructor<T> getConstructor(Class<?>... parameterTypes)Constructor con = c.getConstructor(String.class,int.class,String.class);//public T newInstance(Object... initargs)Object obj = con.newInstance("name1",20,"北京");System.out.println(obj);4.获取单个私有构造方法
//IllegalAccessException:非法的访问异常Constructor con = c.getDeclaredConstructor(String.class);//暴力访问
con.setAccessible(true);//值为true则指示反射的对象在使用时应该取消Java语言访问检查Object obj = con.newInstance("name1");System.out.println(obj);
获取所有public构造方法
1.获取字节码文件对象
Class c =Class.forName("全路径");2.获取public构造方法
//public Constructor[] getConstructors():所有公共构造方法Constructor[] cons = c.getConstructors();for(Constructor con : cons){System.out.println(con);}
获取所有(public+private)构造方法
1.获取字节码文件对象
Class c =Class.forName("全路径");2.获取public+private构造方法
//public Constructor[] getDeclaredConstructors():所有构造方法Constructor[] cons = c.getDeclaredConstructors();for(Constructor con : cons){System.out.println(con);}
4.通过反射获取成员变量
获取单个(public+private)成员变量并赋值
1.获取字节码文件对象
Class c =Class.forName("全路径");2.通过无参构造方法创建对象
Constructor con = c.getConstructor();Object obj = con.newInstance();2.获取单个公共成员变量并赋值
Field field = c.getField("变量名");//public void set(Object obj,Object value)
field.set(obj,"北京");//给obj对象的field字段设置值为"北京"System.out.println(obj);3.获取单个私有成员变量并赋值
Field field = c.getDeclaredField("变量名");
field.setAccessible(true);
field.set(obj,"北京");System.out.println(obj);
获取所有public成员变量
1.获取字节码文件对象
Class c =Class.forName("全路径");2.获取public成员变量
Field[] fields = c.getFields();for(Field field : fields){System.out.println(field);}
获取所有(public+private)成员变量
1.获取字节码文件对象
Class c =Class.forName("全路径");2.获取public+private成员变量
Field[] fields = c.getDeclaredFields();for(Field field : fields){System.out.println(field);}