JAVA—反射

      学习Java中关于反射的知识,以理解框架

目录

1.认识反射

2.获取类

3.获取构造器

4.获取成员变量​编辑

5.获取成员方法

6.作用 应用场景


1.认识反射

反射 

加载类 并允许以编程的方式解刨类中的各种成分(成员变量 方法 构造器)

学习反射就是学习获取类的信息 操作他们 


2.获取类

加载类 获取类的字节码对象 Class对象

获取Class类名的三种方式

Class c1 = 类名.class

调用Class提供的方法:public static Class forName(String package)

Object提供的方法:public Class getClass() //需要先获取一个对象才能使用 

package High_reflect;

public class TextClass {
    public static void main(String[] args) throws Exception {
        Class c1 = Student.class;
        System.out.println(c1.getName()); //全类名
        System.out.println(c1.getSimpleName()); //简名:Student

        Class c2 = Class.forName("class High_reflect.Student");

        System.out.println(c1 == c2);
        
        Student s3 = new Student();
        Class c3 = s3.getClass();
    }
}

3.获取构造器

方法说明
Constructor<?>[ ] getConstructors()获取全部构造器(只能获得public修饰的)
Constructor<?>[ ] getDeclaredConstructors()获取全部构造器
Constructor<T>[ ] getConstructor(Class<?>... parametertypes)获取某个构造器
Constructor<Y>[ ] getDeclaredConstructor(Class<?>... parameterTypes)获取全部构造器
package High_reflect;

import java.lang.reflect.Constructor;

public class TextClass {
    public static void main(String[] args) throws Exception {
        Class c1 = Student.class;
        System.out.println(c1.getName()); //全类名
        System.out.println(c1.getSimpleName()); //简名:Student

        // 2.获取类的全部构造器(只可以拿到public修饰的构造器)
        Constructor[] constructor = c1.getConstructors();

        //3.遍历数组中的每一个构造器对象
        for (Constructor constructor1 : constructor) {
            System.out.println(constructor1.getName()+"------->"+constructor1.getParameterCount());
        }

        Constructor[] constructor1 = c1.getDeclaredConstructors();

        for (Constructor constructor2 : constructor1) {
            System.out.println(constructor2.getName()+"------->"+constructor2.getParameterCount());
        }
    }
}

4.获取成员变量

package High_reflect;

import org.junit.Test;

import java.lang.reflect.Field;

public class TextClass1 {
        @Test
        public void testGetFields() throws Exception {
         Class c = Student.class;
         //获取全部成员变量
            Field[] declaredFields = c.getDeclaredFields();

            for (Field declaredField : declaredFields) {
                System.out.println(declaredField.getName() + declaredField.getType());
            }

            //定位某个成员变量
            Field fName = c.getDeclaredField("name");
            System.out.println(fName.getName());
        }
    }

 获取变量的作用依然是进行赋值和取值


5.获取成员方法


6.作用 应用场景

  • 基本作用:得到一个类的全部成分然后操作
  • 可以破坏封装性
  • 最重要:适合做java的框架,基本上主流的框架都会基于反射设计功能

                                                                                 学习时间:2024.09.06 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值