zoukankan      html  css  js  c++  java
  • Java反射机制剖析(二)-功能以及举例

    《java反射机制剖析(一)》的API我们看到了许多接口和类,我们能够通过这些接口做些什么呢?

     

    从上篇API中我们能看到它能够完成下面的这些功能:

     

    1)     获得类

    A.     运用getClass()  (每个class都有此函数)

                                        i.    String str = "abc";

                                      ii.    Class c1 = str.getClass();

     

    B.     运用Class.forName() (static method 最常被使用)

                                        i.    Class c1 = Class.forName ("java.lang.String");

                                      ii.    Class c2 = Class.forName ("java.awt.Button");

    C.     运用  .class 语法

                                        i.    Class c1 = String.class;

                                      ii.    Class c2 = java.awt.Button.class;

                                    iii.    Class c4 = int.class;

                                      iv.    Class c5 = int[].class;

    D.     运用 TYPE语法 ( primitive wrapper classes 基本数据类型包装类的 TYPE语法)

                                        i.    Class c1 = Boolean.TYPE;

     

    2)     获得属性(这个功能的实例见Java反射机制剖析(2))

    以下四个方法可以获得属性,主要参见的是Java.lang.class

     

    Public  Field  getField

    (String name)

    返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段

    public Field[] getFields()

    返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段

    Public  Field

    getDeclaredField(String name)

    返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段

    public  Field[]

    getDeclaredFields()

    返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段

     

    3)     获得方法()

    以下四个方法可以获得方法,要参见的是Java.lang.class

     

    public  Method

    getMethod(String name,

    ... )

    返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法

    public Method[] getMethods()

    返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法

    public Method

    getDeclaredMethod(String name,…)

    返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法

    public Method[]

    getDeclaredMethods()

    返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法

     

    4)     获取类的构造器

    以下四个方法可以获得方法,要参见的是Java.lang.class

     

    public  Constructor

    getConstructor(Class<?>... )

    返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法

    public  Constructor<?>[]

    getConstructors()

    返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有公共构造方法

    Public  Constructor<T>

    getDeclaredConstructor(Class<?>...)

    返回一个 Constructor 对象,该对象反映此 Class 对象所表示的类或接口的指定构造方法

    public  Constructor<?>[]

    getDeclaredConstructors()

    返回 Constructor 对象的一个数组,这些对象反映此 Class 对象表示的类声明的所有构造方法。它们是公共、保护、默认(包)访问和私有构造方法

    实例

        import java.lang.reflect.Constructor;  
          
          
        public class TestConstructor {  
            /** 
             * @param args 
             * @throws ClassNotFoundException  
             * @throws SecurityException  
             * @throws NoSuchMethodException  
             */  
            public static void main(String[] args) throws Exception {  
                // TODO Auto-generated method stub  
                Class classType=Class.forName(args[0]);  
                Constructor Constructor= classType.getConstructor();  
                  
                    System.out.println(Constructor.toString());  
                  
            }  
              
              
        }  

    5)     新建类的实例

     

    调用类的Class对象的newInstance方法

    示例:

        import java.lang.reflect.Constructor;  
          
          
        public class TestConstructor {  
            /** 
             * @param args 
             * @throws ClassNotFoundException  
             * @throws SecurityException  
             * @throws NoSuchMethodException  
             */  
            public static void main(String[] args) throws Exception {  
                // TODO Auto-generated method stub  
                Class classType=Class.forName(args[0]);  
                //Constructor Constructor= classType.getConstructor();  
                Object inst=classType.newInstance();  
                System.out.println(inst);     
            }  
        }  


    调用默认Constructor对象的newInstance方法

    示例:

        import java.lang.reflect.Constructor;  
          
          
        public class TestConstructor {  
            /** 
             * @param args 
             * @throws ClassNotFoundException  
             * @throws SecurityException  
             * @throws NoSuchMethodException  
             */  
            public static void main(String[] args) throws Exception {  
                // TODO Auto-generated method stub  
                Class classType=Class.forName(args[0]);  
                Constructor Constructor= classType.getConstructor();  
                Object inst=Constructor.newInstance();  
                System.out.println(inst);     
            }  
        }  

    调用带参数Constructor对象的newInstance方法

    示例:

        Class classType=User.class  
        Constructor constructor2 =  
                classType.getDeclaredConstructor(int.class, String.class);  
          
        Object inst = constructor2.newInstance(1, "123");  
          
        System.out.println(inst);  


     

    转自:http://blog.csdn.net/lfsf802/article/details/7239711

  • 相关阅读:
    审核被拒:包含隐藏功能
    iOS好的个人博客和平台网站
    免费的Git和SVN服务器
    组件化
    三方生产利器
    RSA加密解密和签名验证机制以及其区别和联系
    APP和后台接口设计规范
    树和二叉树2——输出广义表形式(带括号)二叉树
    树和二叉树1——链式二叉树基础
    计算机图形学5——Two-Dimensional Viewing and Clipping(二维线段裁剪算法)
  • 原文地址:https://www.cnblogs.com/crazylqy/p/4253055.html
Copyright © 2011-2022 走看看