package com.niu.demo.ReflectTest; import java.util.*; import java.lang.reflect.*; public class ReflectTest{ private static Double a = 100.1; public static void main(String[] args){ String name; if(args.length > 0){ name = args[0]; }else{ //Scanner in = new Scanner(System.in); //System.out.println("Enter class name:"); //name = in.nextLine(); } try{ //Class cl =Class.forName(name); //获取属性a的Class Class cl = a.getClass(); //获取父类的Class Class supercl = cl.getSuperclass(); //获取类的修饰符 String modifiers = Modifier.toString(cl.getModifiers()); if(modifiers.length()>0){ System.out.print(modifiers + " "); } //System.out.print("class " + name); System.out.print("class " + cl.getName()); if(supercl!=null && supercl !=Object.class){ System.out.print(" extends " + supercl.getName()); } System.out.print("\n{\n"); printFields(cl); System.out.println(); printConstructors(cl); System.out.println(); printMethods(cl); System.out.print("}"); }catch(Exception e){ e.printStackTrace(); } } public static void printConstructors(Class cl){ Constructor[] constructors = cl.getDeclaredConstructors(); for(Constructor c : constructors){ String name = c.getName(); System.out.print(" "); String modifiers = Modifier.toString(cl.getModifiers()); if(modifiers.length()>0){ System.out.print(name + " ("); } Class[] parameterTypes = c.getParameterTypes(); for(int j =0;j<parameterTypes.length;j++){ if(j>0){ System.out.print(" , "); } System.out.print(parameterTypes[j].getName()); } System.out.println(");"); } } public static void printMethods(Class cl){ Method[] methods = cl.getDeclaredMethods(); for(Method m : methods){ Class retType = m.getReturnType(); String name = m.getName(); String modifiers = Modifier.toString(m.getModifiers()); System.out.print(" "); if(modifiers.length() > 0){ System.out.print(modifiers+" "); } System.out.print(retType.getName()+" "+name+"("); Class[] parameterTypes = m.getParameterTypes(); for(int i = 0;i<parameterTypes.length;i++){ if(i > 0){ System.out.print(" , "); } System.out.print(parameterTypes[i].getName()); } System.out.println(")"); } } public static void printFields(Class cl) throws IllegalAccessException{ Field[] fields = cl.getDeclaredFields(); for(Field f:fields){ String modifiers = Modifier.toString(cl.getModifiers()) ; if(modifiers.length() > 0){ //覆盖java默认的权限设置,可以直接访问private修饰的属性或者方法 f.setAccessible(true); //x.get(Object y)获取x在y对象中的值 System.out.println(" "+modifiers+" "+f.getName()+" = "+f.get(a)); if(f.getName().equals("value")){ //x.set(Object obj,Object value); //设置对象obj中x的值为value f.set(a,999.9); System.out.println("==================================="); System.out.println("此属性修改过 ======> "+modifiers+" "+f.getName()+" = "+f.get(a)); System.out.println("==================================="); } } } } }
JAVA新手入门手稿——通过反射分析类的结构
猜你喜欢
转载自blog.csdn.net/GeekYoung/article/details/80341497
今日推荐
周排行