廉頗老矣,尚能飯否

          java:從技術(shù)到管理

          常用鏈接

          統(tǒng)計(jì)

          最新評(píng)論

          java反射例題【轉(zhuǎn)載】

          例題一 :簡(jiǎn)單例題

          package pkg;
          import java.lang.reflect.*;

          public class Test {
           public static void main(String args[]) {
            try {
             Class c = Class.forName("java.lang.String");
             Method[] m = c.getDeclaredMethods();
             for (int i = 0; i < m.length; i++)
              System.out.println(m[i].toString());
            } catch (Throwable e) {
             System.err.println(e);
            }
           }
          }

          例題二:找出類的方法
          package pkg;

          import java.lang.reflect.*;

          public class Test {
           private int methodDemo(Object p, int x) throws NullPointerException {
            if (p == null)
             throw new NullPointerException();
            return x;
           }

           public static void main(String args[]) {
            try {
             Class cls = Class.forName("pkg.Test");
             Method[] methlist = cls.getDeclaredMethods();
             for (int i = 0; i < methlist.length; i++) {
              Method m = methlist[i];
              System.out.println("name = " + m.getName());
              System.out.println("decl class = " + m.getDeclaringClass());
              Class[] pvec = m.getParameterTypes();
              for (int j = 0; j < pvec.length; j++) {
               System.out.println("param #" + j + " " + pvec[j]);
              }
              Class[] evec = m.getExceptionTypes();
              for (int j = 0; j < evec.length; j++) {
               System.out.println("exc #" + j + " " + evec[j]);
              }
              System.out.println("return type = " + m.getReturnType());
              System.out.println("-----");
             }
            } catch (Throwable e) {
             System.err.println(e);
            }
           }
          }
          例題三:獲取構(gòu)造器信息

          package pkg;

          import java.lang.reflect.*;

          public class Test {
           public Test() {
           }

           protected Test(int i, double d) {
           }

           public static void main(String args[]) {
            try {
             Class cls = Class.forName("pkg.Test");
             Constructor[] ctorlist = cls.getDeclaredConstructors();
             for (int i = 0; i < ctorlist.length; i++) {
              Constructor ct = ctorlist[i];
              System.out.println("name = " + ct.getName());
              System.out.println("decl class = " + ct.getDeclaringClass());
              Class[] pvec = ct.getParameterTypes();
              for (int j = 0; j < pvec.length; j++) {
               System.out.println("param #" + j + " " + pvec[j]);
              }
              Class[] evec = ct.getExceptionTypes();
              for (int j = 0; j < evec.length; j++) {
               System.out.println("exc #" + j + " " + evec[j]);
              }
              System.out.println("-----------------------------------------------------");
             }
            } catch (Throwable e) {
             System.err.println(e);
            }
           }
          }

          例題四:獲取類的字段(域)

          package pkg;

          import java.lang.reflect.*;

          public class Test {
           private double d;
           public static final int i = 37;
           String s = "testing";

           public static void main(String args[]) {
            try {
             Class cls = Class.forName("pkg.Test");
             Field[] fieldlist = cls.getDeclaredFields();//cls.getFields()
             for (int i = 0; i < fieldlist.length; i++) {
              Field fld = fieldlist[i];
              System.out.println("name = " + fld.getName());
              System.out.println("decl class = " + fld.getDeclaringClass());
              System.out.println("type = " + fld.getType());
              int mod = fld.getModifiers();
              System.out.println("modifiers = " + Modifier.toString(mod));
              System.out.println("-----------------------------------------------------");
             }
            } catch (Throwable e) {
             System.err.println(e);
            }
           }
          }
          例題五:根據(jù)方法的名稱來(lái)執(zhí)行方法
          package pkg;

          import java.lang.reflect.*;

          public class Test {
           public int add(int a, int b) {
            return a + b;
           }

           public static void main(String args[]) {
            try {
             Class cls = Class.forName("pkg.Test");
             Class[] partypes = new Class[2];
             partypes[0] = Integer.TYPE;
             partypes[1] = Integer.TYPE;
             Method meth = cls.getMethod("add", partypes);
             //Test methobj = new Test();
             Object methobj = cls.newInstance();
             Object[] arglist = new Object[2];
             arglist[0] = new Integer(37);
             arglist[1] = new Integer(47);
             Object retobj = meth.invoke(methobj, arglist);
             Integer retval = (Integer) retobj;
             System.out.println(retval.intValue());
            } catch (Throwable e) {
             System.err.println(e);
            }
           }
          }

          例題六:創(chuàng)建新的對(duì)象

          package pkg;

          import java.lang.reflect.*;

          public class Test {
           public Test() {
           }

           public Test(int a, int b) {
            System.out.println("a = " + a + " b = " + b);
           }

           public static void main(String args[]) {
            try {
             Class cls = Class.forName("pkg.Test");
             Class[] partypes = new Class[2];
             partypes[0] = Integer.TYPE;
             partypes[1] = Integer.TYPE;
             Constructor ct = cls.getConstructor(partypes);
             Object[] arglist = new Object[2];
             arglist[0] = new Integer(37);
             arglist[1] = new Integer(47);
             Object retobj = ct.newInstance(arglist);

            } catch (Throwable e) {
             System.err.println(e);
            }
           }
          }
          例題七:.改變字段(域)的值
          package pkg;

          import java.lang.reflect.*;

          public class Test {
           public double d;

           public static void main(String args[]) {
            try {
             Class cls = Class.forName("pkg.Test");
             Field fld = cls.getField("d");
             Test test = new Test();
             System.out.println("d = " + test.d);
             fld.setDouble(test, 12.34);
             System.out.println("d = " + test.d);
            } catch (Throwable e) {
             System.err.println(e);
            }
           }
          }
          例題八:數(shù)組

          package pkg;

          import java.lang.reflect.*;

          public class Test {
           public static void main(String args[]) {
            try {
             Class cls = Class.forName("java.lang.String");
             Object arr = Array.newInstance(cls, 10);
             Array.set(arr, 5, "this is a test");
             String s = (String) Array.get(arr, 5);
             System.out.println(s);
            } catch (Throwable e) {
             System.err.println(e);
            }
           }
          }

          例題九:5 x 10 x 15 的整型數(shù)組

          package pkg;

          import java.lang.reflect.*;

          public class Test {
           public static void main(String args[]) {
            int[] dims = new int[] { 5, 10, 15 };
            Object arr = Array.newInstance(Integer.TYPE, dims);
            Object arrobj = Array.get(arr, 3);
            Class cls = arrobj.getClass().getComponentType();
            System.out.println(cls);
            arrobj = Array.get(arrobj, 5);
            Array.setInt(arrobj, 10, 37);
            int arrcast[][][] = (int[][][]) arr;
            System.out.println(arrcast[3][5][10]);
           }
          }




          柳德才
          13691193654
          18942949207
          QQ:422157370
          liudecai_zan@126.com
          湖北-武漢-江夏-廟山

          posted on 2009-04-18 15:04 liudecai_zan@126.com 閱讀(260) 評(píng)論(0)  編輯  收藏 所屬分類: 程序人生

          主站蜘蛛池模板: 瓦房店市| 日土县| 随州市| 观塘区| 潞西市| 泗水县| 永登县| 天祝| 迁安市| 长兴县| 二连浩特市| 永新县| 岳西县| 棋牌| 黔西| 芜湖市| 石狮市| 泰州市| 牙克石市| 邯郸县| 普定县| 济阳县| 平罗县| 淄博市| 吴桥县| 内江市| 平乡县| 新泰市| 芷江| 文昌市| 山西省| 兴业县| 客服| 航空| 阿巴嘎旗| 台安县| 义马市| 江川县| 会东县| 安多县| 湘阴县|