码迷,mamicode.com
首页 > 编程语言 > 详细

Java 反射(待更新)

时间:2016-01-13 21:51:16      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:

  在学习反射之前,让我们先了解“类(Class)”。“方法”、“属性”、“类”都是名词,那么相应的在Java中会有这样一些特殊的类:“方法类(Method类)”、“属性类(Field类)”、“构造器类(Constructor类)”、“类类(Class类)”。

技术分享

  如上所示,任何Java的类或接口都是Class类的一个实例。

  反射就是Java自我管理这些(类,对象)的机制。

  1) 反射的作用

    • 可以通过反射机制发现对象的类型,发现类型的方法/属性/构造器
    • 可以创建对象并访问任意对象方法和属性等

  2) Class加载

    类加载到内存:Java将磁盘类文件加载到内存中吗,为一个对象(实例),这个对象是Class的实例。

  3) Class实例代表Java中类型

    • 获得基本类型实例
      • int.class
      • long.class
      • ...
    • 获得类类型(Class)实例:
Class cls = String.class;
Class cls = Class.forName("java.lang.String");
Class cls = "abc".getClass();

 

1.通过放射获得队形的类/属性/方法/构造器

反射演示_“发现”对象的类/属性/方法/构造器

 

package reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;


/**
 * 反射演示
 */
public class ReflectDemo {
    public static void main(String[] args) throws ClassNotFoundException {
        reflect("s");    //java.lang.String
        reflect(1);        //java.lang.Integer
    }
    
    /**
     * 反射方法,用于发现
     *         obj 的类型是什么
     *         obj 有哪些属性
     *         obj 有哪些方法
     *         obj 有哪些构造器
     * @param obj 表示被“反射”的对象,被用于“发现”的对象
     */
    public static void reflect(Object obj) {
        //1. getClass()
        //      返回对象的类型,是Object类的方法
        Class<?> cls = obj.getClass();
        System.out.println("类:" + cls.getName());
        //2. getDeclaredFields();
        //   返回在类上获得声明的所有属性(字段)
        Field[] fields = cls.getDeclaredFields();
        System.out.println("属性:");
        for(Field field : fields) {
            System.out.println(
                    field.getType()+" :" + //属性类型
                    field.getName());        //属性名称
        }
        //3. getDeclaredMethods
        //   返回在类上获得声明的所有方法
        Method[] methods = cls.getDeclaredMethods();
        System.out.println("方法:");
        for(Method method : methods) {
            System.out.print(method.getReturnType()+" ");
            System.out.print(method.getName()+" ");
            System.out.println(
                    Arrays.toString(method.getParameterTypes()));
        }
        //4. getDeclaredConstructors
        //   返回在类上获得声明的所有构造器
        Constructor[] constructors = cls.getDeclaredConstructors();
        System.out.println("构造器:");
        for(Constructor c : constructors) {
            System.out.print(c.getName() + " ");
            System.out.println(
                    Arrays.toString(c.getParameterTypes()));
        }
    }

}

 

Java 反射(待更新)

标签:

原文地址:http://www.cnblogs.com/chaizp/p/5128297.html

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