反射能够在代码运行时,动静的获取对象、调用办法、设置属性。动静操作,升高代码偶合性,进步灵便度。其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
请帮忙点赞、转发!