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 灵! 阅读(239) | 评论 (0)编辑 收藏

备忘——DES加密解密类

     摘要:        做项目时用到的DES加密解密类,代码如下: import java.security.*; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFac...  阅读全文

posted @ 2008-01-08 17:25 灵! 阅读(345) | 评论 (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 灵! 阅读(241) | 评论 (0)编辑 收藏

仅列出标题
共6页: 上一页 1 2 3 4 5 6 
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

随笔分类

随笔档案

最新评论

阅读排行榜

评论排行榜