[java]反射1
来源:互联网 发布:台视网络直播 编辑:程序博客网 时间:2024/06/16 11:54
很多东西的实现基础,都是反射,spring的AOP,动态代理等等,下面咱们来学习一下Java的反射
什么是反射?
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
反射可以做什么?
反射机制主要提供了以下功能:
在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法;
生成动态代理。
java有哪些反射类?
java.lang.Class;
java.lang.reflect.Constructor; java.lang.reflect.Field;
java.lang.reflect.Method;
java.lang.reflect.Modifier;
java如何实现反射?
通过反射实例化一个类的对象
public class reflecetTest { public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException { Class<?> test = null; test=Class.forName("com.reflect.Test.Person"); //第一种方法,实例化默认构造方法,调用set赋值 Person person= (Person) test.newInstance(); person.setName("小明"); person.setAddress("建国路"); //第二种方法,取得全部的构造函数,使用构造函数赋值 Constructor<?> constructor[]=test.getConstructors(); //查看每个构造方法需要的参数 for (int i = 0;i<constructor.length;i++){ Class<?> clazzs[]=constructor[i].getParameterTypes(); System.out.println("constructor["+i+"]("); if (clazzs.length > 0){ for (int j=0; j<clazzs.length;j++){ if (j == clazzs.length -1 ) System.out.println(clazzs[j].getName()); else System.out.println(clazzs[j].getName()+","); } } System.out.print(")"); } // person = (Person) constructor[0].newInstance("张三"); System.out.println(person); } }
取得一个类的全部属性
public class ReflectTest implements Serializable{ public static void main(String[] args) throws ClassNotFoundException { Class<?> clazz = Class.forName("com.reflect.Test.Person"); System.out.println("===========本类属性============="); Field[] fields = clazz.getDeclaredFields(); for (int i =0; i<fields.length;i++){ //权限修饰符 int meth = fields[i].getModifiers(); String priv = Modifier.toString(meth); //属性类型 Class<?> type = fields[i].getType(); System.out.println(priv +" "+type.getName() + " " + fields[i].getName() + ";"); } System.out.println("=======实现的接口或者父类的属性========="); //取得实现的接口或者父类的属性 Field[] fields1=clazz.getFields(); for (int j = 0; j<fields1.length; j++){ //权限修饰符 int meth = fields1[j].getModifiers(); String priv = Modifier.toString(meth); //属性类型 Class<?> type = fields1[j].getType(); System.out.println(priv + " " +type.getName() + " "+fields1[j].getName() + ";"); } } }
阅读全文
0 0
- Java反射1
- java反射1
- Java反射笔记1
- Java反射(1)
- 说一说java反射(1)
- Java 反射reflex(1)
- java 反射总结1
- java反射(1)
- JAVA 反射1
- java反射详解(1)
- java 反射1
- Java反射 1
- 【Java】反射机制1
- Java中的反射(1)
- java 反射1 Class
- Java反射专题1
- java反射笔记1
- [java]反射1
- servlet3.0新特性
- C/C++中va_list,va_start,va_arg,va_end等可变参数宏的使用
- javascript 性能优化 -1
- 使用gdb调试多进程与多线程程序
- Python :圆圈中最后剩下的数
- [java]反射1
- Gerrit打包安装,只要下载一个文件就可以了
- 矩形覆盖
- Python :求1+2+3+...+n
- 素数距离问题
- if条件语句
- springmvc框架各组件功能理解
- Python :不用加减乘除做加法
- mac os x下配置Android Studio本地gradle