Java基础之反射

2020-07-27  本文已影响0人  felixfeijs

Java基础之反射

反射基本介绍

反射的使用

通过反射调用属性和方法
  1. 具体代码
    • 编写User对象
    package com.example.demo.test;
    
    public class User {
    
        public User(){
            System.out.println("这是个构造方法");
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        private String name;
    
    }
    
    • 编写测试代码
        public static void main(String[] args) throws ClassNotFoundException {
        /**
         * 获取class对象 方式1
         * User user1 = new User();
         * Class<? extends User> aClass = user1.getClass();
         */
    
        /**
         * 获取class对象 方式2
         * Class<User> userClass = User.class;
         */
    
        // 1.获取class对象 方式3
        Class<?> user = Class.forName("com.example.demo.test.User");
        // 2. 获取构造方法
        Constructor<?>[] constructors = user.getConstructors();
        for (Constructor conArray:constructors) {
            System.out.println(conArray);
        }
        // 3.获取所有属性
        Field[] fields = user.getFields();
        for (Field item:fields) {
            System.out.println(item);
        }
        // 4. 获取所有方法
        Method[] methods = user.getMethods();
        for (Method item:methods) {
            System.out.println(item);
        }
    }
    
    • 控制台结果
    public com.example.demo.test.User()
    public java.lang.String com.example.demo.test.User.getName()
    public void com.example.demo.test.User.setName(java.lang.String)
    public final void java.lang.Object.wait() throws java.lang.InterruptedException
    public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
    public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
    public boolean java.lang.Object.equals(java.lang.Object)
    public java.lang.String java.lang.Object.toString()
    public native int java.lang.Object.hashCode()
    public final native java.lang.Class java.lang.Object.getClass()
    public final native void java.lang.Object.notify()
    public final native void java.lang.Object.notifyAll()
    
通过反射获取配置文件
  1. 具体代码
    • 配置text.txt文件内容
    name=fpf
    
    • 测试代码
        public static void main(String[] args) throws IOException {
        String value = getValue("name");
        System.out.println(value);
    }
    
    //此方法接收一个key,在配置文件中获取相应的value
    public static String getValue(String key) throws IOException {
        String c2 = ClassLoader.getSystemClassLoader().getResource("test.txt").getPath();
        Properties pro = new Properties();//获取配置文件的对象
        FileReader in = new FileReader(c2);//获取输入流
        pro.load(in);//将流加载到配置文件对象中
        in.close();
        return pro.getProperty(key);//返回根据key获取的value值
    }
    
    • 控制台结果
    fpf
    
上一篇 下一篇

猜你喜欢

热点阅读