Java 反射实例操作

反射可以在代码运行时,动态的获取对象、调用方法、设置属性。动态操作,降低代码偶合性,提高灵活度。其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();

获取属性 【Java 反射实例操作】获取全部
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)); //32 field.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
请帮忙点赞、转发!

    推荐阅读