学学Java反射
来源:互联网 发布:win7网络发现无法启用 编辑:程序博客网 时间:2024/06/05 03:49
先看看别人的一篇文章
Java中的反射
基本概念可以参考上面那篇文章,这里不多少,直接上代码,撸起。
package reflact_demo;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;/** * ClassUtil.java 封装一些反射的操作 * Created by Administrator on 2017/1/5. */public class ClassUtil { /** * 打印类的信息,包括类的成员函数、成员变量(只获取成员函数) */ public static void printClassMethodMessage(Object obj){ Class c = obj.getClass(); System.out.println("类的名称是:" + c.getName()); Method []ms = c.getMethods(); for (int i = 0; i < ms.length; i++) { Class returnType = ms[i].getReturnType(); System.out.print(returnType.getName()+" "); //得到的方法名称 System.out.print(ms[i].getName()+"("); //获取参数类型 Class[] paramTypes = ms[i].getParameterTypes(); for (Class c1:paramTypes) { System.out.print(c1.getName()+","); } System.out.println(")"); } } /** * 获取成员变量的信息 */ public static void printFieldMessage(Object obj){ Class c = obj.getClass(); /* * 成员变量也是对象 * java.lang.reflect.Field * Field类封装了关于成员变量的操作 * getFields()方法获取的是所有的public的成员变量的信息 * getDeclaredFields获取的是该类自己声明的成员变量的信息 */ Field[] fs = c.getDeclaredFields(); for (Field f : fs) { //得到成员变量的类型的类类型 Class fieldType = f.getType(); String typeName = fieldType.getName(); //得到成员变量的名称 String fieldName = f.getName(); System.out.println(typeName + " " + fieldName); } } /** * 打印对象的构造函数信息 */ public static void printConMessage(Object obj){ Class c = obj.getClass(); /* * 构造函数也是对象 * java.lang. Constructor中封装了构造函数的信息 * getConstructors获取所有的public的构造函数 * getDeclaredConstructors得到所有的构造函数 */ Constructor[] cs = c.getDeclaredConstructors(); for ( Constructor con : cs ) { System.out.println("构造函数:"); System.out.print(con.getName()+"("); //获取构造函数的参数列表--->得到的是参数列表的类类型 Class[] paramTypes = con.getParameterTypes(); for (Class c1 : paramTypes ) { System.out.print(c1.getName() + ","); } System.out.println(")"); } }}
写个方法测试一下
package reflact_demo;import java.io.BufferedReader;import java.io.InputStreamReader;import java.lang.reflect.Method;/** * MethodDemo.java * Created by Administrator on 2017/1/5. */public class MethodDemo { private static UserService us = new UserService(); public static void main(String[] args){ ClassUtil.printClassMethodMessage(MethodDemo.class); //ClassUtil.printFieldMessage(MethodDemo.class); // ClassUtil.printConMessage(MethodDemo.class); }}
//UserService.classpublic class UserService { public void delete(){ System.out.println("删除用户"); } public void update(){ System.out.println("修改用户"); } public void find(){ System.out.println("查找用户"); }}
其中一个方法测试结果:
0 0
- 学学Java反射
- 学学java
- 开始学学java吧
- 学学java.io的设计理念
- 代码优化:学学Java看看Android
- 终于下定决心好好学学java了
- Java远程通讯可选技术及原理【学学学】
- java中调用js脚本 学学还是有用的
- 【反射】JAVA反射机制
- 学学HTML
- 学学编译
- 学学php
- 学学Gearman
- 学学Gearman
- 学学js
- 我想学学
- JAVA 反射
- java 反射
- Unity学习笔记(一):基础入门
- [CSAPP] 优化程序性能(一)
- 变量地址生命周期的一个问题
- 【JAVA】3.使用eclipse编写JAVA程序
- ogg-00869的一个乌龙事件
- 学学Java反射
- thinkphp连接sybase数据库
- Scanner类概述及其构造方法
- Mybatis中的延时加载
- MTK 65XX系列通过USB OTG添加Ethernet RJ45有线网卡支持
- Linux_Hi3518E开发_制作根文件系统镜像
- Ubuntu下安装beta版R报dpkg: dependency problems prevent configuration of r-recommended错误[已解决]
- Compound Words(复合词) UVA 10391
- OpenGL ES 2.0 笔记 - 特殊的内建变量