反射技术。。。。

2022/1/29 23:05:10

本文主要是介绍反射技术。。。。,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.1 反射的概念:

当我们想要使用别人的东西或者查看某些资源的时候,可以使用反射技术 再比如,开发的时候,有时并不能直接看到源代码,也可以通过反射获取

1.2 反射的前提:获取字节码对象

字节码对象获取的3种方式:

  1. 类名.class

  2. Class.forName(“目标类的全路径”)

  3. 目标类对象.getClass() 注意: 字节码对象是获取目标对象所有信息的入口

1.3 反射的常用方法

获取包对象:clazz.getPackage() 先获取包对象,再获取包对象的名字:clazz.getPackage().getName() 获取类名: clazz.getName()–打印的是全路径名 clazz.getSimpleName()–打印的只有目标类的类名

package cn.tedu.reflection;

import org.junit.Test;

import java.util.Arrays;

/*本类用于测试反射技术*/
public class TestReflection {
    /*单元测试方法
     * public + void + 没有参数 + @Test*
     注一单元测试工具:Add Junit4 to classPath
     * 如果成功,会出现导包语句:import org.junit.Test;*/
    @Test
    public void getClazz() throws ClassNotFoundException {
        //1.练习获取字节码对象的3种方式
        Class<?> clazz1 = Class.forName("cn.tedu.reflection.Student");
        Class<Student> clazz2 = Student.class;
        Class<?> aClass = new Student().getClass();
        //打印的是Student类对应的字节码对象
        System.out.println(clazz1);//class cn.tedu.reflection.Student
        //获取当前字节码对象的名字
        System.out.println(clazz1.getName());//cn.tedu.reflection.Student
        //通过字节码对象,获取Student类的类名
        System.out.println(clazz1.getSimpleName());//Student
        //通过字节码对象,获取Student类对应的包对象
        System.out.println(clazz1.getPackage());//package cn.tedu.reflection
        //通过字节码对象,先获取Student类对应的包对象,再获取这个包对象的名字
        System.out.println(clazz1.getPackage().getName());//cn.tedu.reflection
    }

    @Test
    public void getStu() {
        //1.创建学生类对象
        Student s1 = new Student("张三", 3);
        Student s2 = new Student("李四", 4);
        Student s3 = new Student("王五", 5);
        //2.准备数组将刚刚创建好的学生对象存入
        Student[] s = {s1, s2, s3};
        //3.直接打印
        System.out.println(Arrays.toString(s));//[Student{name='张三', age=3}, Student{name='李四', age=4}, Student{name='王五', age=5}]
        //4.遍历学生数组,拿到每一个学生对象
        /*中午吃3碗大米饭
玩代码
Student{name='李四', age=4}
中午吃3碗大米饭
玩代码
Student{name='王五', age=5}
中午吃3碗大米饭
玩代码*/
        for (Student student :
                s) {
            System.out.println(student);
            student.eat(3);
            student.play();

        }
    }

}
package cn.tedu.reflection;
/*本类用作测试反射的物料类,假装这个类是别人写的*/
public class Student {
    //成员变量
    String name;
    int age;
//2全参构造和无参构造
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public Student() {
    }
    public void play(){
        System.out.println("玩代码");
    }
    public void eat(int n){
        System.out.println("中午吃"+n+"碗大米饭");
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

 



这篇关于反射技术。。。。的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程