Java基础之反射
- 反射基本介绍
- 反射的使用
- 通过反射调用属性和方法
- 通过反射获取配置文件
反射基本介绍
- Java反射机制是在运行状态中,对任意一个类,都能够知道这个类所有的属性和方法;等于任意一个对象,能调用它的方法和属性;这种动态获取信息以及动态调用对象的方法的功能称为Java语言的反射机制.
- 反射就是把Java类中的映射成一个个Java对象,通过该对象调用其方法和属性.
反射的使用
通过反射调用属性和方法
- 具体代码
- 编写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()
通过反射获取配置文件
- 具体代码
- 配置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
网友评论