Java反射機制學習筆記

          一. 反射機制描述
                Java的反射機制允許程序在運行時透過反射API取得任何一個已知名稱的class的內部信息,主要包括屬性名,屬性名的修飾符,方法名,方法返回值,方法修飾符等信息。

          二. Java類反射中的主要方法
               Constructor getConstructor(Class[] params) -- 獲得使用特殊的參數類型的公共構造函數,

               Constructor[] getConstructors() -- 獲得類的所有公共構造函數

               Constructor getDeclaredConstructor(Class[] params) -- 獲得使用特定參數類型的構造函數(與接入級別無關)

               Constructor[] getDeclaredConstructors() -- 獲得類的所有構造函數(與接入級別無關) 

               獲得字段信息的Class 反射調用不同于那些用于接入構造函數的調用,在參數類型數組中使用了字段名:

               Field getField(String name) -- 獲得命名的公共字段

               Field[] getFields() -- 獲得類的所有公共字段

               Field getDeclaredField(String name) -- 獲得類聲明的命名的字段

               Field[] getDeclaredFields() -- 獲得類聲明的所有字段 

               用于獲得方法信息函數:

               Method getMethod(String name, Class[] params) -- 使用特定的參數類型,獲得命名的公共方法

               Method[] getMethods() -- 獲得類的所有公共方法

               Method getDeclaredMethod(String name, Class[] params) -- 使用特寫的參數類型,獲得類聲明的命名的方法

               Method[] getDeclaredMethods() -- 獲得類聲明的所有方法 

          三. Java反射機制應用初探
             
               現在一堆框架搞得人云里霧里的,例如spring等等,大都利用了Java的反射機制,eg. 大名鼎鼎的IOC.昨天晚上閑著沒事的時候,初試了下反射,下面是一個簡單的測試例子:
             

          import java.awt.Button;
          import java.lang.reflect.Method;
          import java.util.Hashtable;

          /**
           * 測試Java的反射機制
           * 
          @author Amigo Xie(xiexingxing1121@126.com)
           * 
          @since 2007/04/20 21:40
           
          */

          public class ReflectionTest {

              
          /**
               * 
          @param args
               
          */

              
          public static void main(String[] args) throws Exception {
                  ReflectionTest reflection 
          = new ReflectionTest();
                  reflection.getNameTest();
                  System.out.println(
          "");
                  reflection.getMethodTest();
              }

              
              
          /**
               * Class的getName()方法測試
               * 
          @throws Exception
               
          */

              
          public void getNameTest() throws Exception {
                  System.out.println(
          "===========begin getNameTest============");
                  String name 
          = "amigo";
                  Class cls 
          = name.getClass();
                  System.out.println(
          "string class name: " + cls.getName());
                  
                  Button btn 
          = new Button();
                  Class btnClass 
          = btn.getClass();
                  System.out.println(
          "button class name: " + btnClass.getName());
                  Class superBtnClass 
          = btnClass.getSuperclass();
                  System.out.println(
          "super button class name: " + superBtnClass.getName());
                  
                  Class clsTest 
          = Class.forName("java.awt.Button");
                  System.out.println(
          "clsTest name: " + clsTest.getName());
                  System.out.println(
          "===========end getNameTest============");
              }

              
              
          /**
               * Class的getMethod()方法測試
               * 
          @throws Exception
               
          */

              
          public void getMethodTest() throws Exception {
                  System.out.println(
          "===========begin getMethodTest==========");
                  Class cls 
          = Class.forName("ReflectionTest");
                  Class ptypes[] 
          = new Class[2];
                  ptypes[
          0= Class.forName("java.lang.String");
                  ptypes[
          1= Class.forName("java.util.Hashtable");
                  Method method 
          = cls.getMethod("testMethod", ptypes);
                  Object args[] 
          = new Object[2];
                  args[
          0= "hello, my dear!";
                  
                  Hashtable ht 
          = new Hashtable();
                  ht.put(
          "name""amigo");
                  args[
          1= ht;
                  
                  String returnStr 
          = (String) method.invoke(new ReflectionTest(), args);
                  System.out.println(
          "returnStr= " + returnStr);
                  System.out.println(
          "===========end getMethodTest==========");
              }


              
          public String testMethod(String str, Hashtable ht) throws Exception {
                  String returnStr 
          = "return str";
                  System.out.println(
          "begin testMethod invoked");
                  System.out.println(
          "str= " + str);
                  System.out.println(
          "name= " + (String) ht.get("name"));
                  System.out.println(
          "end testMethod invoked");
                  
          return returnStr;
              }

          }


                 控制臺輸出如下:
                 ===========begin getNameTest============
                 string class name: java.lang.String
                 button class name: java.awt.Button
                 super button class name: java.awt.Component
                 clsTest name: java.awt.Button
                 ===========end getNameTest============

                 ===========begin getMethodTest==========
                 begin testMethod invoked......
                 str= hello, my dear!
                 name= amigo
                 end testMethod invoked......
                 returnStr= return str
                 ===========end getMethodTest==========

          posted @ 2008-01-08 17:31 靈! 閱讀(256) | 評論 (0)編輯 收藏

          備忘——DES加密解密類

               摘要:        做項目時用到的DES加密解密類,代碼如下: import java.security.*; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFac...  閱讀全文

          posted @ 2008-01-08 17:25 靈! 閱讀(376) | 評論 (0)編輯 收藏

          NetBeans6.0正式版發布

               今天早上一上NetBeans的首頁,看到NetBeans6.0正式版已經發布了,真是Happy。。。
               NetBeans首頁:http://www.netbeans.org
               NetBeans IDE6.0是一個很出色的IDE,它有一個很輕巧的、很快速的編輯器,并且將所有NetBeans的產品集成R到了這個IDE中。NetBeans6.0提供對Ruby、JRuby和Ruby on Rails的支持,加強了對Swing的開發支持,它是一個全新的可視化游戲設計器,更新了數據綁定支持等。新的安裝版本能使你根據需要自定義安裝。
               發布說明:
               NetBeans IDE是一個模塊化的、基于標準的IDE,用Java語言編寫。NetBeans項目包括一個開源的用Java編寫的IDE,以及一個應用平臺,它可以作為一個普通的框架來構造各種應用程序。
           1.  支持的技術

          NetBeans IDE6.0支持如下技術,并且在下述的應用服務器中通過了測試。如果你打算使用JBoss、WebLogic或者Struts的其余沒有顯示列出的版本,請注意你可能會遇到不可預見的IDE錯誤。

          支持的技術:

          l         Enterprise JavaBeans (EJB) 3.0

          l        JAX-WS 2.1

          l         Java Persistence (JSR-220)

          l         JSF1.2 (JSR-127)

          l         Java Servlet 2.5

          l         JavaServer Pages (JSP) 2.1

          l         Struts 1.2.9

          l         Java API for XML-based Remote Procedure Calls (JAX-RPC) 1.6

          l         Java APIs for XML Registries (JAXR) 1.0

          l         Java API for XML Processing (JAXP) 1.4

          l         Java Architecture for XML Binding (JAXB) 2.1

          l         Jsp標準標簽庫(JSTL) 1.1

          經過測試的應用服務器

          l         GlassFish V1

          l         GlassFish V2

          l         Sun Java System Application Server PE 8.2

          l         Tomcat5.5

          l         Tomcat6.0

          l         JBoss4.0.4

          l         Websphere6.0

          l         WebLogic9.2

          l         WebLogic10.

          注意:如果你使用GlassFish應用服務器,推薦你在NetBeans IDE6.0上使用GlassFish V2.:
              更多信息請參見官方發布說明:http://www.netbeans.org/community/releases/60/relnotes.html

          posted @ 2008-01-08 17:24 靈! 閱讀(261) | 評論 (0)編輯 收藏

          僅列出標題
          共6頁: 上一頁 1 2 3 4 5 6 
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          隨筆分類

          隨筆檔案

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 吴忠市| 小金县| 东阳市| 济宁市| 龙井市| 吴江市| 建平县| 桐城市| 确山县| 郓城县| 新昌县| 聊城市| 资兴市| 浠水县| 汪清县| 芜湖市| 视频| 万州区| 徐州市| 富锦市| 江孜县| 枝江市| 科技| 新密市| 黑水县| 乌拉特中旗| 达拉特旗| 政和县| 台南县| 绵竹市| 湟中县| 漯河市| 宣恩县| 阿图什市| 林周县| 双柏县| 东辽县| 安徽省| 上饶市| 德清县| 本溪市|