java反射的基本概念和简单应用
2017-12-04 17:11
495 查看
能够分析类能力的程序称为反射。反射可以用来:
1.在运行时分析类的能力
2.在运行时查看对象,例如,编写一个toString方法供所有类使用
3.实现通用的操作代码。例如:通用dao
一般使用它的主要是工具制造者。
下面介绍反射机制最重要的内容—–检查类的结构
在java.lang.reflect包中有三个类Field、Constuctor、Method分别用于描述类的域、构造器和方法。其次,还可以利用Modifier类的静态方法分析getModifiers返回的整型数值。利用Modifier.toString方法来获取修饰符。
下面代码
代码描述:输入任意类的名称,打印出类的结构。
例如: 输入:java.lang.Double
输出结果:
1.在运行时分析类的能力
2.在运行时查看对象,例如,编写一个toString方法供所有类使用
3.实现通用的操作代码。例如:通用dao
一般使用它的主要是工具制造者。
下面介绍反射机制最重要的内容—–检查类的结构
在java.lang.reflect包中有三个类Field、Constuctor、Method分别用于描述类的域、构造器和方法。其次,还可以利用Modifier类的静态方法分析getModifiers返回的整型数值。利用Modifier.toString方法来获取修饰符。
下面代码
代码描述:输入任意类的名称,打印出类的结构。
import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.Scanner; public class ReflectDemo { public static void main(String[] args) { try { System.out.println("input className:"); Scanner sc = new Scanner(System.in); String className = sc.next(); Class clazz = Class.forName(className); Class superClass = clazz.getSuperclass();//获取该类的父类 String modifies = Modifier.toString(clazz.getModifiers());//获取修饰符 if (modifies.length() > 0) System.out.print(modifies + " "); System.out.print("class " + className); if (superClass != null && superClass != Object.class) System.out.print(" extends " + superClass.getName()); System.out.print("\n{\n"); printFields(clazz); System.out.println(); printConstructors(clazz); System.out.println(); printMethods(clazz); System.out.print("}"); } catch (Exception e) { e.printStackTrace(); } } // 打印该类的所有的方法 private static void printMethods(Class clazz) { Method[] methods = clazz.getDeclaredMethods();//获取该类的所有方法 for (Method method : methods) { Class<?> type = method.getReturnType(); String name = method.getName(); String modifies = Modifier.toString(method.getModifiers()); System.out.print(" "); if (modifies.length() > 0) System.out.print(modifies + " "); System.out.print(type.getName() + " " + name + "("); Class[] parameterTypes = method.getParameterTypes(); for (int i = 0; i < parameterTypes.length; i++) { if (i > 0) System.out.print(","); System.out.print(parameterTypes[i].getName()); } System.out.println(");"); } } // 打印该类的所有构造方法 private static void printConstructors(Class clazz) { Constructor[] constructors = clazz.getDeclaredConstructors();//获取该类的所有构造器 for (Constructor constructor : constructors) { String name = constructor.getName(); String modifies = Modifier.toString(constructor.getModifiers()); System.out.print(" "); if (modifies.l 4000 ength() > 0) System.out.print(modifies + " "); System.out.print(name + "("); Class[] parameterTypes = constructor.getParameterTypes(); for (int i = 0; i < parameterTypes.length; i++) { if (i > 0) System.out.print(","); System.out.print(parameterTypes[i].getName()); } System.out.println(");"); } } // 打印该类的所有的属性 private static void printFields(Class clazz) { Field[] fields = clazz.getDeclaredFields();//获取该类的所有属性 for (Field field : fields) { Class fieldType = field.getType(); String fieldName = field.getName(); String modifies = Modifier.toString(field.getModifiers()); System.out.print(" "); if (modifies.length() > 0) System.out.print(modifies + " "); System.out.print(fieldType.getName() + " " + fieldName + ";\n"); } } }
例如: 输入:java.lang.Double
输出结果:
public final class java.lang.Double extends java.lang.Number { public static final double POSITIVE_INFINITY; public static final double NEGATIVE_INFINITY; public static final double NaN; public static final double MAX_VALUE; public static final double MIN_NORMAL; public static final double MIN_VALUE; public static final int MAX_EXPONENT; public static final int MIN_EXPONENT; public static final int SIZE; public static final java.lang.Class TYPE; private final double value; private static final long serialVersionUID; public java.lang.Double(double); public java.lang.Double(java.lang.String); public boolean equals(java.lang.Object); public static java.lang.String toString(double); public java.lang.String toString(); public int hashCode(); public static native long doubleToRawLongBits(double); public static long doubleToLongBits(double); public static native double longBitsToDouble(long); public int compareTo(java.lang.Double); public volatile int compareTo(java.lang.Object); public byte byteValue(); public short shortValue(); public int intValue(); public long longValue(); public float floatValue(); public double doubleValue(); public static java.lang.Double valueOf(double); public static java.lang.Double valueOf(java.lang.String); public static java.lang.String toHexString(double); public static int compare(double,double); public static boolean isNaN(double); public boolean isNaN(); public static boolean isInfinite(double); public boolean isInfinite(); public static double parseDouble(java.lang.String); }
相关文章推荐
- Java的反射基本概念、语法和应用
- 01_Java基础_数组的定义、基本使用和简单应用
- Java_反射的基本应用
- Java基础---Java---基础加强---内省的简单运用、注解的定义与反射调用、 自定义注解及其应用、泛型及泛型的高级应用、泛型集合的综合
- 初学java之jdk安装,基本概念,简单代码编写
- java学习-JAVA基本排序法示例,JAVA数据类型转换 ,ArrayList用法,Calendar 简单应用
- 简单回顾Java基本概念
- [Java Web]Web应用基本概念
- java反射之Constructor简单应用
- java 用反射简单应用,将Object简单转换成map
- java 反射和注解的简单应用
- 多线程的基本概念及其简单应用
- Java反射-简单应用
- Java反射-简单应用
- JSP应用 java反射简单实现
- Java基础---Java---基础加强---内省的简单运用、注解的定义与反射调用、 自定义注解及其应用、泛型及泛型的高级应用、泛型集合的综合
- java的GUI基本组件的简单应用
- Java反射学习简单应用
- java 用反射简单应用,将Object简单转换成map
- Java文件操作的基本概念和简单操作