反射reflect简述以及获取类和方法等

本文介绍了Java反射机制的基本概念,包括在运行时获取类、方法和对象的能力,并详细阐述了如何通过Class对象获取类信息,如公共方法、构造器、属性等。此外,还提到了动态代理的生成。总结了获取反射的三种主要方式:Class.forName(), 类名.class, 对象.getClass()。" 73409965,5773966,LC-3中断系统与键盘中断服务,"['LC-3', '汇编语言', '中断处理', 'IO中断', '微处理器']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、定义

反射:反射机制实在【运行状态】中:

对于任意一个类,都能够知道这个类的多有属性和方法;

对于任意一个对象,都能够调用他的任意一个方法和属性;

二、反射提供的功能

在运行时判断任意一个对象所属的类;

在运行时构造任意一个类的对象;

在运行时判断任意一个类所具有的成员变量和方法;

在运行时调用任意一个对象的方法

生成动态代理

三、获取反射对象(入口)

1、Class.forName(包名+类名);

Class<?> perClass=Class.forName(reflect.Person);

2、类名.class

Class<?> perClass=Person.class;

3、对象.getClass ()

Person per=new Person();
Class<?> perClass=per.getClass();

三、反射获取方法

1、获取公共方法,用.getMethod()

      公共的意思:1、本类以及父类,接口中的所有方法 2、访问修饰符为public

public static void Demo1(){

    Class<?> perClass=null
try{

    perClass=Class.forName("reflect.People");
    }catch(ClassNotFoundException e){
        e.printStackTrace();
    }

    //获取公共方法
    Method[] methods=perClass.getMethod();
    //遍历数组打印公共方法
    for(Method e:methods){
        System.out.println(e);
    }
}

2、获取当前类的所有方法 .getDeclaredMethods()

public static void Demo2(){

    Class<?> perClass=null
try{

    perClass=Class.forName("reflect.People");
    }catch(ClassNotFoundException e){
        e.printStackTrace();
    }

    //获取当前类的所有方法 包括private修饰的
    Method[] methods1=perClass.getDeclaredMethod();
    //遍历数组打印当前类的所有方法
    for(Method e:methods1){
        System.out.println(e);
    }
}

3.获取所有构造方法 .getConstructors()

public static void Demo3(){

    Class<?> perClass=null
try{

    perClass=Class.forName("reflect.People");
    }catch(ClassNotFoundException e){
        e.printStackTrace();
    }

    //获取所有的构造方法
    Method[] methods2=perClass.getConstructors();
    //遍历数组打印构造方法
    for(Method e:methods2){
        System.out.println(e);
    }
}

4.获取接口 .getInterfaces()

public static void Demo3(){
         Class<?> perClass=null;
        //拿入口推荐Class.forName()
        try {
            perClass=Class.forName("relfect.Person");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        //通过getInterface()方法拿到接口
        Class<?>[] interfaces=perClass.getInterfaces();
        //遍历接口
        for(Class<?> e:interfaces){
            System.out.println(e);
        }
    }

5.获取父类 .getSuperClass()

public static void Demo4(){
        Class<?> perClass=null;
        //拿入口推荐Class.forName()
        try {
            perClass=Class.forName("relfect.Person");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        //获取父类
        Class<?> superclass=perClass.getSuperclass();
        //打印父类
        System.out.println(superclass);
}

6.获取所有公共属性 .getFileds()

public static void Demo6(){
        Class<?> perClass=null;
        //拿入口推荐Class.forName()
        try {
            perClass=Class.forName("relfect.Person");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        //拿属性
        Field[] fields=perClass.getFields();
        //遍历属性
        for(Field e:fields){
            System.out.println(e);
        }
}

7.获取所有属性 .getDeclaredFileds()

        //获取所有属性
        Field[] fields1=perClass.getDeclaredFields();
        for (Field e:fields1){
            System.out.println(e);
        }

8.获取当前反射所属类和接口的对象 .newInstance

Object instance=perClass.newInstance;
 //将实例强转为Person  调用Person中的方法来证明成功
People per=(People)perClass.newInstance;
per.方法();

总结:获取反射的三种方法 Class.forName()  类名.class  对象名.getClass()

        Java是单继承,多实现。所有只能继承一个类,可以实现多个接口!!!!

获取公共方法·getMethods1)
当前类的所用方法 ·get Declared Methods()
获取所有构造方法 ·getConstructors() 
获取公共属性..getFields()
获取所有属性.getDeclaredFields()

获取所有接口 ·getInterfaces( )
获取父类 ·getSupercloss( )
获取当前代表类对象 ·hewInstance()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱穿风衣的土豆

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值