关于java反射机制的学习
2017-06-27 15:08
399 查看
package day05; import day04.NioTest; import java.lang.annotation.Annotation; import java.lang.reflect.*; import java.util.Arrays; class Reflect { public Reflect(String s){ System.out.println("String construction"+s); } public Reflect(int i){ System.out.println("int construction"+i); } private int i; private String string; public int ii; public String strings; public int getI() { return i; } public void setI(int i) { this.i = i; } public void stringmethodstring(String s){ System.out.println("stringmethodstring"+"---"+s); } public void stringmethod(){ System.out.println("stringmethod"); } private void privatemethod(){ System.out.println("privatemethod----"); } } interface Myinterface{ void dosth(String ss); void doot(); } public class reflectLearn{ public static void main(String[] args) { Reflect reflect = new Reflect("s"); // NioTest nioTest = new NioTest(); Class cla = Reflect.class; Class cla1 = NioTest.class; System.out.println(cla.getName());//获取带包名的类名 System.out.println(cla.getSimpleName());//获取不带包名的类名 System.out.println(cla1.getModifiers());//获取权限修饰符,枚举类型 System.out.println(Modifier.isPublic(cla1.getModifiers()));//判断修饰符 Package pa = cla.getPackage();//获取包信息 Class superclass = cla.getSuperclass();//获取父类 Class[] classes = cla.getInterfaces();//获取实现的接口 Annotation[] annotations = cla.getAnnotations();//获取注解 Constructor[] constructors = cla.getConstructors();//获取构造器 try{ Constructor constructor = cla.getConstructor(String.class);//获取指定参数(String)的构造器 Reflect reflect1 = (Reflect) constructor.newInstance("sth");//用构造函数实例化一个类 Field[] fields = cla.getFields();//获取变量 System.out.println("变量:"+ Arrays.asList(fields)); Field field = cla.getField("ii"); System.out.println("获取指定变量:"+field.getName()+"变量类型是:"+field.getType().getName()); field.set(reflect,2); System.out.println("field的set和get方法:"+field.get(reflect)); Method[] methods = cla.getMethods();//获取方法 Method method = cla.getMethod("stringmethodstring", String.class);//获取指定方法 method.invoke(reflect,"sth"); method = cla.getDeclaredMethod("privatemethod"); method.setAccessible(true);//获取private和public和protected成员属性和方法 method.invoke(reflect); Myinterface proxy = (Myinterface)Proxy.newProxyInstance(Myinterface.class.getClassLoader(), new Class[]{Myinterface.class},new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // System.out.println("--invoke--"); // method.invoke(proxy); if(method.getName().equals("dosth")){ System.out.println("invoke----dosth"+args[0]); }else { System.out.println("invoke----doot"); } return null; } }); proxy.dosth("?"); proxy.doot(); }catch (Exception e){ System.out.println("????"); } } }另外,动态代理和类加载不是很理解,以后再学习吧。
相关文章推荐
- java学习之理解反射机制
- [学习小记]Java的反射机制
- java学习之反射机制
- Java中反射机制(Reflection)学习
- Java的动态性支持学习二 - 反射机制 属性、方法、对象的操作
- JAVA的反射机制--学习心得
- 深入浅出学习hibernate框架(三):java的反射机制
- Java学习之反射机制的理解
- Java 反射机制-学习笔记
- 关于Java反射机制
- 学习:java原理—反射机制
- Java中反射机制(Reflection)学习
- Java学习之-----反射机制
- Java中反射机制(Reflection)学习
- java学习之反射机制
- Java的反射(reflect)机制的学习
- JAVA中的反射机制的学习
- Java中反射机制(Reflection)学习
- Java的动态性支持学习三 - 反射机制 取消属性、方法、构造器的访问限制
- Java的动态性支持学习一 - 反射机制 概念概述