首页 > 编程语言 >[Java基础]反射

[Java基础]反射

时间:2024-07-09 19:30:17浏览次数:21  
标签:反射 Java String 对象 age 基础 class public name

反射

获取任意对象的数据

对对象一无所知的情况下

public class Student {
    
    private String name;
    private Integer age;

    public Student(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

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



import java.lang.reflect.Field;

public class Main {
    public static void main(String[] args) throws IllegalAccessException {
        
        Student student = new Student("段昌峰", 25);

        // 在未知对象情况的条件下,读出对象的所有数据
        // 获取class类对象,这个对象中存储了关于student对象的所有信息
        Class<? extends Student> aClass = student.getClass();
        // 获取class对象中的所有成员变量
        Field[] fields = aClass.getDeclaredFields();
        // 遍历成员变量,首先把成员变量的可访问性改为true
        // 然后,通过getname和get方法获取成员变量的名称和值
        for (Field field : fields) {
            field.setAccessible(true);
            System.out.println(field.getName()+"="+field.get(student));
        }
    }
}

通过配置文件,创建对象并且调用方法

首先编写配置文件

className=Teacher
methodName=teach

其次编写bean类

public class Teacher {
    public Teacher() {
    }

    public void teach(){
        System.out.println("老师正在教学");
    }
}

最后编写main函数中的方法

//读取配置文件
Properties p = new Properties();
FileInputStream fi = new FileInputStream("./pros.properties");
p.load(fi);
String className = (String) p.get("className");
String methodName = (String) p.get("methodName");

//首先根据全类名获得class对象
Class<?> aClass = Class.forName(className);
//获得构造方法
//并使用构造方法newinstance生成对象
Constructor<?> constructor = aClass.getDeclaredConstructor();
Object o = constructor.newInstance();
//获得对象的对应方法
Method declaredMethod = aClass.getDeclaredMethod(methodName);
//通过invoke执行对应的方法
//invoke方法的参数列表分别是调用这个方法的对象和传入的参数
declaredMethod.invoke(o);

以上代码可以实现根据配置文件中的两个字符串,我们就可以生成这个对象,并且执行对象中的某个方法,以后我们就可以通过简单的更改配置文件来生成另一个对象,执行另一个方法。

标签:反射,Java,String,对象,age,基础,class,public,name
From: https://www.cnblogs.com/DCFV/p/18292609

相关文章

  • [Java并发]Lock
    锁锁的分类公平锁/非公平锁可重入锁独享锁/共享锁互斥锁/读写锁乐观锁/悲观锁分段锁偏向锁/轻量级锁/重量级锁自旋锁公平锁/非公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先......
  • [Java并发]IO多路复用
    IOIO多路复用BIONIOselectpollepoll水平触发和边沿触发水平触发只关心文件描述符中是否还有没完成处理的数据,如果有,不管怎样epoll_wait,总是会被返回。简单说——水平触发代表了一种“状态”。边沿触发只关心文件描述符是否有新的事件产生,如果有,则返回;如果返回过一次,......
  • [Java面试]经典手撕
    多线程循环打印ABC方法一:packageorg.example;importjava.util.TreeMap;importjava.util.concurrent.locks.Condition;importjava.util.concurrent.locks.ReentrantLock;publicclassPrintABC{ReentrantLocklock=newReentrantLock();Conditiona=lo......
  • [Java基础]HashMap
    HashMapHashMap的数据结构HashMap是:数组+链表/红黑树(JDK1.8增加了红黑树部分)数据底层具体存储的是什么?Node<k,v>这样的存储方式有什么优点呢?数据结构//默认初始容量(数组默认大小):16,2的整数次方staticfinalintDEFAULT_INITIAL_CAPACITY=1<<4;//最大......
  • java day1
    简单了解了java,他最大的特点就是,稳定,安全,可以解决高并发的访问,最大的优势.java分es,ee,me.java的强势之处在于javaee,我是从javase开始学的.2.安装JDk,我装的是JDK17,据说当前市场大多数用的都是JDK8,17在未来可能会占据更大市场.17也是长期支持版.安装步骤(1)访问甲骨文......
  • [Java并发]Synchronized
    publicclassAtomicTest01{publicstaticinti=0;publicstaticvoidmain(String[]args){Runnabletask=newRunnable(){@Overridepublicvoidrun(){synchronized(this){tr......
  • Gradle基础:从入门到掌握
    人不走空                                          ......
  • Java爬虫翻页
    编写一个Java爬虫以进行翻页通常涉及到使用HTTP客户端(如ApacheHttpClient或OkHttp)来发送请求,解析HTML页面(如使用Jsoup库),以及处理分页逻辑(如通过URL参数或页面内的链接进行翻页)。1.使用Jsoup和ApacheHttpClient的Java爬虫示例以下是一个使用Jsoup和ApacheHttpClient的Java爬......
  • 对零基础想转行网络安全同学的一点建议
    最近有同学在后台留言,0基础怎么学网络安全?0基础可以转行做网络安全吗?以前也碰到过类似的问题,想了想,今天简单写一下。我的回答是先了解,再入行。具体怎么做呢?首先,你要确定学习方向。网络安全是一个很大的概念,包含的东西也很多,比如web安全,系统安全,二进制安全,无线安全、数......
  • 网络安全工程师需要学什么?零基础怎么从入门到精通,看这一篇就够了
    前言我发现关于网络安全的学习路线网上有非常多看似高大上却无任何参考意义的回答。大多数的路线都是给了一个大概的框架,告诉你那些东西要考,以及建议了一个学习顺序。但是这对于小白来说是远远不够的,有的可能还会有误导性!比如说很多的学习路线会说要从语言开始学起,于是很......