Java反射一 类

Java反射一 类

以前也看过反射,但是那时候还是一个小白(现在是一个菜鸟),没有接触过什么框架,根本不知道反射有什么作用。但是接触了不少框架之后,就想了解下反射,所以接着会研究下反射。
在java的官方教程中包括了三个部分。
- 类:多种方式获取一个Class对象并用它来测试类的属性
- 成员变量:用反射api获取类的变量、方法、构造函数
- 数组和枚举类型:介绍两种特殊的类:数组和枚举。

首先先介绍获取Class对象。虚拟机会给每个对象实例化一个Class对象来检测运行时属性,包括了成员和类型信息。Class还可以创建新类和新的对象。最重要的是这是反射api的入口。
获取Class对象有很多途径:

1 对象.getClass(),调用一个对象的getClass()方法可以获取到Class对象。

        /*
         * 获取Class对象方法一:对象.getClass()
         */
        // 返回String的class
        Class c = "foo".getClass();
        System.out.println(c);
        //
        Class c1 = System.out.getClass();
        System.out.println(c1);

        Class c2 = E.A.getClass();
        System.out.println(c2);

        byte[] bytes = new byte[1024];
        Class c3 = bytes.getClass();
        System.out.println(c3);

2 类.class就可以获取该类的Class对象。

        /*
         * 获取Class对象方法二:类.class
         */
        Class c4 = boolean.class; // correct
        System.out.println(c4);
        Class c5 = java.io.PrintStream.class;
        System.out.println(c5);
        Class c6 = int[][][].class;
        System.out.println(c6);

3 Class.forName(String xx)。xx一定要是完全限定名,而且原生变量不能使用这种语法。

        /*
         * 获取Class对象方法二:class.forName
         */
      Class c7 = Class.forName("[[Ljava.lang.String;");
        System.out.println(c7);

4 原生类型的包装类可以使用 .Type来获取对应的原生类型


        /*
         * 原生类型的包装类 :类.Type
         */

        Class c8 = Double.TYPE;
        System.out.println(c8);
        Class c9 = Void.TYPE;
        System.out.println(c9);

5 还有几个方法获取Class对象

        // 返回父类
        Class c10 = javax.swing.JButton.class.getSuperclass();
        System.out.println(c10);
        // 返回公开的成员内部类,接口或者是枚举
        Class<?>[] c11 = Character.class.getClasses();
        for (Class<?> class1 : c11) {
            System.out.println("-----" + class1);
        }
        // 返回申明的成员内部类,接口或者是枚举
        Class<?>[] c12 = Character.class.getDeclaredClasses();
        for (Class<?> class1 : c12) {
            System.out.println("-----" + class1);
        }

        //获取申明该变量的类
        Field f = System.class.getField("out");
        Class c13 = f.getDeclaringClass();
        System.out.println( c13);
        //返回包裹该类的类
        Class c14 = Thread.State.class.getEnclosingClass();
        System.out.println( c14);

获取Class对象的方法基本就这些。
由于jekyll的环境非常难维护,所以转转阵营了,blog换为Hexo的了,而且换了主题。博客的地址是http://www.lushunming.com.cn ,我的博客中的排版更为美观,欢迎大家去看我的博客,也可以用邮箱订阅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

machineShunMing

谢谢老板

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值