反射_通过反射获取成员变量、构造方法、成员方法的使用

package cn.itcast_01;

public class Person {
	private String name;
	int age;
	public String address;

	public Person() {

	}

	private Person(String name) {
		this.name = name;
	}

	Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public Person(String name, int age, String address) {
		this.name = name;
		this.age = age;
		this.address = address;
	}

	public void show() {
		System.out.println("show");
	}

	public void method(String s) {
		System.out.println("method:" + s);
	}

	public String getString(String name, int age) {
		return name + "----" + age;
	}

	private void function() {
		System.out.println("function");
	}

	@Override
	public String toString() {
		return "Person [" + "name=" + name + ", " + "age=" + age + ", "
				+ "address=" + address + "]";
	}
}



package cn.itcast_04;

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

/*
 * 需求:通过反射对Person进行操作使用
 * 
 * private String name;
 * int age;
 * public String address;
 * 	
 * public Person()
 * private Person(String name)
 * Person(String name, int age) 
 * public Person(String name, int age, String address) 
 * 
 * public void show()
 * public void method(String s) 
 * public String getString(String name, int age)
 * private void function() 
 */
public class ReflectDemo2 {
	public static void main(String[] args) throws Exception {
		// 获取字节码文件对象
		Class c = Class.forName("cn.itcast_01.Person");

		// 获取无参构造方法对象
		Constructor con = c.getConstructor();
		// 通过无参构造方法对象创建对象
		Object obj = con.newInstance();
		System.out.println(obj);

		// 通过反射给所有成员变量赋值
		System.out.println("****通过反射给所有成员变量赋值****");
		// private String name;
		Field nameField = c.getDeclaredField("name");
		nameField.setAccessible(true);
		nameField.set(obj, "风清杨");
		System.out.println(obj);
		// int age;
		Field ageField = c.getDeclaredField("age");
		ageField.setAccessible(true);
		ageField.set(obj, 27);
		System.out.println(obj);
		// public String address;
		Field addressField = c.getField("address");
		addressField.set(obj, "上海");
		System.out.println(obj);

		// 通过反射给所有构造方法赋值
		System.out.println("****通过反射给所有构造方法赋值****");
		// public Person()
		// private Person(String name)
		Constructor con2 = c.getDeclaredConstructor(String.class);
		con2.setAccessible(true);
		Object obj2 = con2.newInstance("王小明");
		System.out.println(obj2);
		// Person(String name, int age)
		Constructor con3 = c.getDeclaredConstructor(String.class, int.class);
		con3.setAccessible(true);
		Object obj3 = con3.newInstance("林子聪", 35);
		System.out.println(obj3);
		// public Person(String name, int age, String address)
		Constructor con4 = c.getConstructor(String.class, int.class,
				String.class);
		Object obj4 = con4.newInstance("江小斐", 56, "山东");
		System.out.println(obj4);

		// 通过反射调用所有成员方法
		System.out.println("****通过反射调用所有成员方法****");
		// public void show()
		Method m1 = c.getMethod("show");
		m1.invoke(obj);
		// public void method(String s)
		Method m2 = c.getMethod("method", String.class);
		m2.invoke(obj, "hello");
		// public String getString(String name, int age)
		Method m3 = c.getMethod("getString", String.class, int.class);
		Object objString = m3.invoke(obj, "world", 100);
		System.out.println(objString);
		// private void function()
		Method m4 = c.getDeclaredMethod("function");
		m4.setAccessible(true);
		m4.invoke(obj);
	}
}



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取Student类的所有构造方法成员方法成员变量,可以使用Java的反射机制。下面是示例代码: ```java import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class Main { public static void main(String[] args) { Class<Student> studentClass = Student.class; // 获取所有构造方法 Constructor<?>[] constructors = studentClass.getConstructors(); System.out.println("Constructors:"); for (Constructor<?> constructor : constructors) { System.out.println(constructor); } // 获取所有成员方法 Method[] methods = studentClass.getMethods(); System.out.println("\nMethods:"); for (Method method : methods) { System.out.println(method); } // 获取所有成员变量 Field[] fields = studentClass.getDeclaredFields(); System.out.println("\nFields:"); for (Field field : fields) { System.out.println(field); } } } class Student { private String name; private int age; private int classId; private String sex; private int score; public Student(String name, int age, int classId, String sex, int score) { this.name = name; this.age = age; this.classId = classId; this.sex = sex; this.score = score; } public String getName() { return name; } public int getAge() { return age; } public int getClassId() { return classId; } public String getSex() { return sex; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } } ``` 输出结果: ``` Constructors: public Student(java.lang.String,int,int,java.lang.String,int) Methods: public int Student.getAge() public void Student.setScore(int) public int Student.getClassId() public int Student.getScore() public java.lang.String Student.getSex() public java.lang.String Student.getName() public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException ... Fields: private java.lang.String Student.name private int Student.age private int Student.classId private java.lang.String Student.sex private int Student.score ``` 注意:这里的示例代码使用了`Student`类来表示学生,你可以根据实际情况进行调整。`getConstructors()`方法获取的是所有公共构造方法,`getMethods()`方法获取的是所有公共成员方法,`getDeclaredFields()`方法获取的是所有成员变量(包括私有成员变量)。如果需要获取非公共的构造方法、方法或变量,可以使用相应的方法,如`getDeclaredConstructors()`、`getDeclaredMethods()`和`getDeclaredFields()`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值