Java反射的部分基础使用方法(二)

Java反射的部分基础使用方法,这次是关于反射的数据操作部分。

ps: 更多请参照第一部分:
Java反射的部分基础使用方法(一)


Jinondo.java

package CYT;

public class Jinondo {
	private int age;
	private String nameString;
	
	public Jinondo() {
		this.age = 20;
		this.nameString = "Jinondo";
	}
	
	public Jinondo(int age, String nameString) {
		this.age = age;
		this.nameString = nameString;
	}
	
	public int getAge() {
		return age;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
	
	public String getNameString() {
		return nameString;
	}
	
	public void setNameString(String nameString) {
		this.nameString = nameString;
	}
	
}


Jinondo3.java

package CYT;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Jinondo3 {
	public static void main(String[] args) 
			throws Exception {
		String path = "CYT.Jinondo"; // 路径
		
		try {
			// Class clazz = Class.forName(path);
			Class<Jinondo> clazz = (Class<Jinondo>) Class.forName(path);// 如果这样写创建实例就不用强制强制转化
			
			// java9要用构造器去创建实例了
			Jinondo instance1 = clazz.getDeclaredConstructor(null).newInstance(null); // 这是调用默认构造方法
			System.out.println(instance1);
			
			// 通过反射调用构造方法
			Constructor<Jinondo> constructor = clazz.getDeclaredConstructor(int.class,String.class);
			Jinondo instance2 = constructor.newInstance(1,"ChenYt"); // 调用有参构造方法
			System.out.println(instance2);
			System.out.println(instance2.getNameString()+"-"+instance2.getAge()+"岁");
			
			// 通过反射调用普通方法
			Jinondo instance3 = clazz.getDeclaredConstructor(null).newInstance(null);
			// instance3.setNameString("G-dragon"); 这条代码是直接通过实例去调用
			Method method = clazz.getDeclaredMethod("setNameString", String.class);
			method.invoke(instance3, "G-dragon");  // 激活
			System.out.println(instance3.getNameString());
		
			// 通过反射操作属性
			Jinondo instance4 = clazz.getDeclaredConstructor(null).newInstance();
			Field field = clazz.getDeclaredField("nameString");
			field.setAccessible(true);  // 加此语句则不用检查该属性的权限,不加后面会出错
			field.set(instance4, "KwonJiyong");
			System.out.println(instance4.getNameString()); // 通过实例调用
			System.out.println(field.get(instance4));  // 通过反射调用
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}


运行结果:

CYT.Jinondo@368239c8
ChenYt-1岁
G-dragon
KwonJiyong
KwonJiyong

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44427114/article/details/103434060
今日推荐