java反射--笔记(更新中)

反射机制

    反射机制如果只是针对于普通开发者而言,意义不大,一般都是作为一些系统的架构设计去使用的,包括开源框架,几乎都反射机制。

认识反射

    反射之中包含了一个“反”的概念,所以要想解释反射就必须先从“正”开始解释,一般而言,当用户使用一个类的时候,应该先知道这个类,而后通过这个类产生实例化对象,但是“反”指的是通过对象找到类。

package com.neuedu.csdnTest;

class Person{

}
public class Test {
    public static void main(String[] args) {
        Person person = new Person();//正着操作
        System.out.println(person.getClass().getName());//反着来
    }
}

    以上的代码使用了一个getClass()方法,而后就可以得到 对象所在的“包类”名称,这就属于“反”了,但是在这个“反”的操作之中有一个getClass()就作为发起一切反射操作的开端。

    Person的父类是Object类,而上面所使用的getClass()方法就是Object类之中所定义的方法

                取得Class对象:public final Class<?> getClass(),反射之中所有的泛型都定义为,返回值都是Object

      而这个getClass()方法返回的对象是Class类的对象,所以这个Class就是所有反射操作的源头。既然Class是所有反射操作的源头,那么这个类肯定是最为重要的,取得这个类的实例化对象,Java定义了三种方式:

方式一:通过Object类的getClass()方法取得,基本不用

 

方式二:使用“类.class”取得

package com.neuedu.csdnTest;

class Person{
}
public class Test {
    public static void main(String[] args) {
        Class<?> cls = Person.class;//取得class对象
        System.out.println(cls.getName());//反着来
    }
}

方式三:使用Class类内部定义的一个static方法,主要使用



1 class对象

Class:表示政治运行的Java应用程序中的类和接口,能够获取类的相关的信息(类的属性、方法、父类、接口..)

是在Java语言中定义一个特定类的实现,用于表示当前运行的Java应用程序中的类和接口,包含成员变量,成员方法,还有这个类实现的接口,以及这个类的父类

2 获取类的Class对象的3方式

    类名.class

    类的实例.getClass()方法

    Class.forName()方法

3  class对象  常用方法

    getAnnotations()    获取类的注解

    getConstructors()    获取构造方法

    getDeclaredFields()    获取所有的属性

    getDeclaredMethod    获取所有的方法

    getField    获取一个属性对象

    getInterfaces()    获取所有的接口

    getName()    获取名字

4    class对象获取方法、通过反射调用方法

        getDeclaredMethods()    获取类本身所有的方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法

        getMethods()    获取类本身及父类及接口所有的公有的方法

     getMethod(String name, Class<?>...parameterTypes)    根据名字获取某个公有的方法对象,name方法的名           字,    parameterTypes参数的类型

        getDeclaredMethod(String name, Class<?>...parameterTypes)    获取到本身类的一个方法

        Method对象的invoke(Object obj, Object... args)方法:

        执行改方法,参数obj表示方法必须在那个实例对象里面执行        参数args表示方法的参数的值

5    class对象获取属性、通过反射设置属性的值

        getFields()    获取所有的public字段(包括继承的)

    getDeclaredFields()    获取本身类所有的属性字段,包括私有的

    getField(String name)  根据名字获取某个public字段对象

    getDeclaredField(String name)根据名字获取本身类的字段(可以获取private

6    class对象创建类的对象、通过反射调用构造方法

     newInstance()    创建一个对象(调用默认的无参数的构造方法)

     getConstructors()    获取所有的构造方法对象




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值