关于java:Java-反射实例操作

44次阅读

共计 1701 个字符,预计需要花费 5 分钟才能阅读完成。

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


请帮忙点 、转发!


正文完
 0