java反射详解
来源:互联网 发布:淘宝开店卖家警骗局 编辑:程序博客网 时间:2024/05/18 14:42
下面是java反射的两个例子
Reflection,通过一个类名,打印出构造函数,方法和变量
package com.zcb;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;import java.util.Scanner;/** * * @author zhengchubin * */public class ReflectionTest {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubString name;if (args.length > 0)name = args[0];else {System.out.println("Enter class name (e.g. java.util.Date): ");Scanner in = new Scanner(System.in);name = in.nextLine();}try {Class<?> cl = Class.forName(name);Class<?> superClass = cl.getSuperclass();String modifiers = Modifier.toString(cl.getModifiers());if (modifiers.length() > 0)System.out.print(modifiers + " ");System.out.print("class " + name);if (superClass != null && superClass != Object.class)System.out.print("extends " + superClass.getName());System.out.print("\n{\n");printConstructors(cl);// 打印构造方法System.out.println();printMethods(cl);// 打印方法System.out.println();printFields(cl);// 打印数据成员System.out.println("}");} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.exit(0);}private static void printFields(Class<?> cl) {// TODO Auto-generated method stubField[] fields = cl.getDeclaredFields();for (Field f : fields) {System.out.print("\t");Class<?> type = f.getType();String name = f.getName();String modifiers = Modifier.toString(f.getModifiers());if (modifiers.length() > 0)System.out.print(modifiers + " ");System.out.println(type.getName() + " " + name + ";");}}private static void printMethods(Class<?> cl) {// TODO Auto-generated method stubMethod[] methods = cl.getDeclaredMethods();for (Method m : methods) {System.out.print("\t");Class<?> retType = m.getReturnType();String name = m.getName();String modifiers = Modifier.toString(m.getModifiers());System.out.print(modifiers + " ");System.out.print(retType + " " + name + "(");@SuppressWarnings("rawtypes")Class[] paramTypes = m.getParameterTypes();for (int j = 0; j < paramTypes.length; j++) {if (j > 0)System.out.print(", ");System.out.print(paramTypes[j].getName());}System.out.println(");");}}private static void printConstructors(Class<?> cl) {// TODO Auto-generated method stub@SuppressWarnings("rawtypes")Constructor[] constructors = cl.getDeclaredConstructors();for (Constructor<?> c : constructors) {System.out.print("\t");String name = c.getName();String modifiers = Modifier.toString(c.getModifiers());System.out.print(modifiers + " ");System.out.print(name + "(");@SuppressWarnings("rawtypes")Class[] paramTypes = c.getParameterTypes();for (int j = 0; j < paramTypes.length; j++) {if (j > 0)System.out.print(", ");System.out.print(paramTypes[j].getName());}System.out.println(");");}}}
运行结果:
MethodPointer相当于C/C++中的回调函数
package com.zcb;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;/** * * @author zhengchubin * */public class MethodPointerTest {public static void main(String[] args) throws SecurityException,NoSuchMethodException {// TODO Auto-generated method stubMethod square = MethodPointerTest.class.getMethod("square",double.class);Method sqrt = Math.class.getMethod("sqrt", double.class);printTable(1, 10, 10, square);printTable(1, 10, 10, sqrt);}public static double square(double x) {return x * x;}private static void printTable(int i, int j, int k, Method f) {// TODO Auto-generated method stubdouble x = (j - i) / (k - 1);for (double l = i; l <= j; l += x) {double y;try {y = (Double) f.invoke(null, l);System.out.printf("%10.4f|%10.4f%n", l, y);} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
运行结果:
- java反射机制详解!
- java 反射机制详解
- JAVA反射详解
- JAVA反射机制详解
- java反射机制详解
- java反射详解
- Java反射机制详解
- Java反射机制详解
- java反射机制详解
- java反射详解
- Java反射机制详解
- java反射详解
- Java反射机制详解
- JAVA反射详解
- java反射详解
- java反射详解
- java反射详解
- java反射详解
- Eclipse离线安装svn的方法
- BigDecimal类的加减乘除
- 关于linux安装loadrunner的问题
- 图文详解YUV420数据格式
- struts1 多选框设置
- java反射详解
- ubuntu /etc/profile和/etc/environment的比较
- 数据库锁
- ubuntu 12.10 上 android 编译环境搭建
- jbpm核心配置文件jbpm.hibernate.cfg.xml的解析
- Mysql安装完后,mysql command line client打不开(闪一下消失)的解决办法
- 使用AsiHttp 提交 json数据
- total commander 笔记
- 13-5-16 Android自定义空间实现wifi信号强度