反射能够在代码运行时,动静的获取对象、调用办法、设置属性。动静操作,升高代码偶合性,进步灵便度。其JDBC库就是通过反射加载。

实例操作

以操作User对象为例:

/* * File:User.java * User:iChochy * URL:https://ichochy.com * Copyright (c) 2020 * Date:2020/08/31 10:18:31 */package com.ichochy.example;public class User {    private String name = ”iChochy“;    private int age = 32;    private String url = ”https://ichochy.com“;    public void display(){        System.out.println(”Name:“+name);        System.out.println(”Age:“+age);        System.out.println(”URL:“+url);    }}

失常调用

User user = new User();user.display();

获取对象

类动静获取

//获取类Class<?> clazz = User.class;//获取对象Object obj = clazz.newInstance();

类门路获取

//获取类Class<?> clazz = Class.forName(”com.ichochy.example.User“);//获取对象Object obj = clazz.newInstance();

获取属性

获取全副

Field[] fields = clazz.getDeclaredFields();for (Field field: fields) {    System.out.println(field.getName());//name、age、url}

属性名获取

Field field = clazz.getDeclaredField(”age“);System.out.println(field.getName());//age

设置属性

Object obj = clazz.newInstance();Field field= clazz.getDeclaredField(”age“);//获取私用属性field.setAccessible(true);//设置反射拜访权限查看System.out.println(field.get(obj)); //32field.set(obj,18);//设置属性System.out.println(field.get(obj));//18

获取办法

获取全副

Method[] methods = clazz.getMethods();for(Method method:methods){    System.out.println(method.getName()); //display}

办法名获取

Method method = clazz.getMethod(”display“);System.out.println(method.getName()); //display

调用办法

Object obj = clazz.newInstance();Method[] methods = clazz.getMethods();for(Method method:methods){    //调用 display 办法    if(”display“.equals(method.getName())){        method.invoke(obj);    }}

办法名调用

Object obj = clazz.newInstance();Method method = clazz.getMethod(”display“);method.invoke(obj);

相干文章

  • Java 中的重写(Override)与重载(Overload) 2020/08/20

  • 收费申请 JetBrains 开源开发许可证,蕴含 IDEA 2020/08/19

  • Java 开发环境的搭建,开启你的编程之旅2020/08/15

源文:https://ichochy.com/posts/20200823.html


请帮忙点、转发!