三個例子講清楚Java反射
阿新 • • 發佈:2018-12-23
package com.ccy.reflective; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import org.junit.Test; /** * <p> * Title: ReflectiveTest.java * Package com.ccy.reflective * </p> * <p> * Description: 反射API測試類 * <p> * @author Tom.Cai * @created 2015-12-10 下午10:30:12 * @version V1.0 * */ public class ReflectiveTest { /** * 反射獲取類資訊 */ @Test public void reflectiveGetClassInfo(){ try { Class cls = Class.forName("java.lang.String"); //獲取父類 Class superclass = cls.getSuperclass(); System.out.println(superclass.getName()); //獲取類的修飾符 int modify = cls.getModifiers(); String retval = Modifier.toString(modify); System.out.println(retval); } catch (ClassNotFoundException e) { e.printStackTrace(); } } /** * 反射獲取類的建構函式 */ @Test public void reflectiveGetConstructors(){ try { Class cls = Class.forName("java.lang.String"); //獲取構造方法 Constructor<String>[] declaredConstructors = cls.getDeclaredConstructors(); for(Constructor<String> con:declaredConstructors){ //獲取構造方法的名稱 String name = con.getName(); System.out.println(name); //獲取構造方法的修飾符 int conModify = con.getModifiers(); String conRetval = Modifier.toString(conModify); System.out.println(conRetval); //迴圈獲取建構函式的引數 Class<?>[] parameterTypes = con.getParameterTypes(); for(int i = 0;i<parameterTypes.length;i++){ System.out.println(parameterTypes[i].getName()); } System.out.println("------"); } } catch (ClassNotFoundException e) { e.printStackTrace(); } } /** * 反射獲取類的欄位 */ @Test public void reflectiveGetClassFields(){ try { Class cls = Class.forName("java.lang.String"); Field[] fields = cls.getDeclaredFields(); for(Field f:fields){ //獲取欄位型別名稱 Class<?> type = f.getType(); String typeName = type.getName(); System.out.println(typeName); //獲取欄位修飾符 int modify = f.getModifiers(); String modifyName = Modifier.toString(modify); System.out.println(modifyName); //獲取欄位名稱 String filedName = f.getName(); System.out.println(filedName); } } catch (ClassNotFoundException e) { e.printStackTrace(); } } /** * 反射獲取類方法資訊 */ @Test public void reflectiveGetClassMethods(){ try { Class cls = Class.forName("java.lang.String"); Method[] declaredMethods = cls.getDeclaredMethods(); for(Method m:declaredMethods){ //獲取還回型別名稱 Class<?> returnType = m.getReturnType(); String returnTypeName = returnType.getName(); System.out.println(returnTypeName); //獲取方法修飾符 int modifiers = m.getModifiers(); String modifiersName = Modifier.toString(modifiers); System.out.println(modifiersName); //迴圈獲取引數型別名稱 Class<?>[] parameterTypes = m.getParameterTypes(); for(int i=0;i<parameterTypes.length;i++){ String parameterName = parameterTypes[i].getName(); System.out.println(parameterName); } } } catch (ClassNotFoundException e) { e.printStackTrace(); } } }