码迷,mamicode.com
首页 > 其他好文 > 详细

反射技术基本知识总结

时间:2015-06-19 10:32:11      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:java   反射   

//JAVA反射的精妙总结:反射就是将JAVA类中的各个成分映射成相应的JAVA

package Three11;

 

import java.beans.BeanInfo;

import java.beans.Introspector;

import java.beans.PropertyDescriptor;

import java.io.*;

 

import java.lang.reflect.Constructor;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.net.*;

import java.util.*;

 

class banana{

    private int x;

    private int y;

    public void banana(int x,int y)

    {

      

       this.x=x;

       this.y=y;

    }

}

class apple {

              

    /**

     * @param args

     */

    public static void main(String[] args)throws Exception{

       // TODO Auto-generatedmethod stub

       String str="123456";

       /*知识点一:获取Class对象方法*/

       Class a1=String.class;//通过所有数据类型都有静态属性.class来获取

       Class a2=str.getClass();//通过对象getClass()方法获取

       // Class.forName(包名.类名);

       Class a3=Class.forName("java.lang.String");//通过Class类的静态方法forName()和获得Class对象的类名来获取

       System.out.println((a1==a2));

       System.out.println((a1==a3));

       System.out.println((a2==a3));

      

       /*

        * JAVA中九个预定义的实例对象

        * 基本数据类型(bytebooleanshortintlongdoublefloatchar)字节码对象以及void.class

        * 另外:具有相同的数据类型和维度的数组在java中映射成同一个Class对象

        *判断是否为数组类型,用Class.isArray()方法

        

        * */

       /*知识点二:Constructor类。。。。。构造方法的反射、Constructor的实例对象代表类的一个构造方法

        * constructor类创建实例对象(反射创建)

        * 注意:1.创建newInstance方法中的参数列表必须与Constructor类中的getConstructor()方法中的参数列表一致;

        *       2.每调用一次newInstance方法,即构造一个对象

        *       3.可以指定构造函数

        * */

       //获取一个类中所有的构造方法

       //Constructor[]b1=Class.forName("java.lang.String").getConstructors();

        //获取一个类中的某一个构造方法

       Class b2=Class.forName("java.lang.String");

        Constructor b22=b2.getConstructor(StringBuffer.class);

        //String s1="456";//一般实例化对象

       //Stringb3=(String)constructor.newInstance(new StringBuffer("456"));//通过反射实例化对象

     

       /*

        * Field类。。。。。。(成员变量的反射)

        * 常用的方法:

        *            1.Field getFieldString s);//只能获取该类公有和父类中公有

        *            2.Field getDeclaredFieldString s);//获取该类中任意成员变量,包括私有

        *            3.setAcessible(true);如果是私有字段,要先将私有字段进行取消权限检查的能力。也称暴力访问

        *            4.setObject objObject value)将指定对象变量上此Field对象表示的字段设置为指定的新值

        *            5.Object getObject obj);返回指定对象上Field表示的字段的值

        * */

      

       /*

        * 知识点三:Method类。。。。。。(成员方法的反射):代表某个类中的一个成员方法

        * 常用方法:

        *1.Method[]getMethods();只获取公共和父类中的所有方法

        *2.Method[]getDeclaredMethods();获取本类中方法包含私有方法

        * 3.Medthod[]getMethod("方法名",参数.class(空参可以写null));

        * 4.Object invokeObject obj,参数);调用方法:如果方法是静态的,invoke中的参数可写为null

        *

        * 通过反射来调用main函数,invoke()方法传递一个字符串数组参数的方法

        * 1.me.invoke(null,newobject[](new String[]{“11”“22”“33”}));

        * 2.me.invoke(null,(Object)newString[]{“11”“22”“33”});

        * */

        String str1="abcd";//实例化str1对象

        //通过反射获取方法

        Method mchar=Class.forName("java.lang.String").getMethod("charAt",int.class);

        //通过invoke方法获取执行charAt里面的功能,当invoke第一个参数为null时,代表调用main函数

        System.out.println(mchar.invoke(str1, 1));

       

         //不清楚类名调用方法,体现了反射功能的强大

        //Methodme=Class.forName("fansge.Test12").getMethod("main",String[].class);

        //me.invoke(null, (Object)new String[]{"aa","bb","cc"});

      

         /*

          * 知识点四:

          *         1.具有相同类型和维数的数组属于同一类型,即有相同的Class实例对象

          *         2.数组的字节码文件名是:数组类型的第一个大写字母;例:intI

          *         3.数组对象的Class的实例对象的getSuperclass()返回的是父类Object类的Class对象

          *         4.基本类型的一维数组可以当做Object类型使用,不能当做Object[]类型使用;非基本类型

          *           的一维数组,既可以当做Object类型使用,又可以当做Object[]类型使用。

          *         5.Arrays.asList()方法处理int[]String[]时的差异:1.41.5新特性差别。1.4无法处理int数组,

          *           返回给1,5处理,1.5int数组作为一个参数处理

          *         6.数组的反射:Array工具类用于完成数组反射的操作。

                      Array.getLength(Object obj);//获取数组长度

                      Array.get(Object obj,intx);// 获取数组中的元素

                    7.获得某个数组中的某个元素的类型

                                                       例:

                         Object[] obj=new Object[]{"ABC",1}                              

          * */

        Object[] obj=new Object[]{"123",1};

        System.out.println("obj=:"+obj);

}

}

反射技术基本知识总结

标签:java   反射   

原文地址:http://blog.csdn.net/liuchuangjin/article/details/46558015

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!