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

Java开发知识之JAVA的反射

时间:2018-10-23 20:43:14      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:技术   自带   system   静态   get   操作   java开发   cti   getname   

目录

Java中的反射机制

一丶什么是反射机制

  • 反射就是指Java在运行期间,可以获得类的一些信息.比如构造方法(私有共有...)以及属性

二丶Class类,自描述类.获取类名的三种方法

1.使用静态属性Class获取

代码:

    Class cls = Person.class; //获取自描述类
    String strClassName = cls.getName();获取类的包名 + 类名
    输出(strClassName);

首先我们的Class类是自描述类.可以返回这个类的描述信息.
有很多方法.比如获取类名字,方法.构造等等.

2.使用Class方法 forName()获取自描述Class

public static void main(String[] args) throws Exception {
        // TODO 自动生成的方法存根
        Class cls = Class.forName("com.ibinary_01.Person");//传入完整类名获取Class
        String clsName = cls.getName();
        System.out.println(clsName);
}

可以看到,我们使用forName必须传入完整的类名.

3.使用Object自带的getClass返回自描述Class

  • 因为我们的类,继承了Object,所以需要实例,进行调用getClass方法.
    代码如下
public static void main(String[] args) throws Exception {
        // TODO 自动生成的方法存根
        Class cls = new Person().getClass();
        String clsName = cls.getName();
        System.out.println(clsName);
    }

三个的输出结果都一样,演示一下
技术分享图片

三丶了解一下自描述类Class方法.

1.Class针对包,类,父类.接口的方法

技术分享图片
通过以上图片可以看到. 我们可以获得包的路径. 我们上面使用的getName(); 那么我们还可以使用getSuperclss();
获得父类自描述类(Class),然后继续调用getName();获取父类的名称.
代码例子如下:

    public static void main(String[] args) throws Exception {
        // TODO 自动生成的方法存根
        Class cls = new Person().getClass();
        Class supercls = cls.getSuperclass();
        System.out.println(supercls.getName());
    }

当然,我使用的是getClass();首先获得自己的Class,然后在获取父类的Class,最后调用父类的Class的getName();获得类名.
我们也可以使用上面所说的三种方法.

2.Class对构造方法提供的方法

技术分享图片
可以看到,以上是我们Class为构造方法提供的方法获取.

3.Class对方法提供的方法.

上面标题有点绕,反正就是对我们的类的方法.提供方法去操作.或者获取.
技术分享图片

4.Class对成员变量提供的方法

一样的,对我们的成员变量也提供了方法操作.
技术分享图片

5.对内部类提供的方法

技术分享图片

总结

  1. 针对我们的类,方法.构造.以及成员方法都提供了方法支持.首先要熟悉类的操作.
  2. 在通过getFilds()和getMethods()方法一次获得权限为public的成员变量和方法的时候.将包含从父类中继承到的成员变量和方法.也就是说会获得父类的公共方法和成员变量
  3. getDeclaredFields()和GETdeclaredMethods();只是获得奔雷中定义的所有成员变量和方法.

四丶反射访问构造方法

  • 方面我们讲了,Class中提供了对构造方法的支持.返回Constructior这个类.
  • 这个类也提供了对构造方法的操作.

    1.构造方法类提供的方法.

    构造方法
    技术分享图片
    请注意 newInstance.我们可以利用指定参数.创建一个该类对象.在以后的安卓逆向中.可能会需要.

Java开发知识之JAVA的反射

标签:技术   自带   system   静态   get   操作   java开发   cti   getname   

原文地址:https://www.cnblogs.com/iBinary/p/9838420.html

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