关于反射的学习

程序入口:

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

public class Test {

public static void main(String[] args) throws Exception {
	Class c = Test1.class;
	Test1 obj1 = (Test1)c.getConstructor().newInstance();//实例化该类
	Method[] m = c.getDeclaredMethods();//找到方法并实例化
	for (Method method : m) {
		System.out.println(method);
	}//打印全部的公有方法
	Constructor[] con = c.getDeclaredConstructors();
	//Object obj = c.newInstance();
	for (Constructor co : con) {
		System.out.println(co);
	}//打印全部的构造方法
	System.out.println("------------------------------------");
	
	Field[] f = c.getDeclaredFields();
	for (Field field : f) {
		System.out.println(field);
	}//打印全部属性
	System.out.println("------------------------------------");	
	
	Field ff = c.getDeclaredField("name");
	ff.setAccessible(true);
	ff.set(obj1,"战三");//给name赋值
	System.out.println(obj1.getName());//获取name
	System.out.println("------------------------------------");
	
	
	Method mm = c.getDeclaredMethod("add", String.class);//找到该方法并实例化该方法
	mm.setAccessible(true);//暴力反射
	mm.invoke(obj1,"小李");//传入参数
	System.out.println("------------------------------------");
	
	Method mmm = c.getMethod("find", String.class);
	mmm.invoke(obj1,"小明");
	System.out.println("------------------------------------");
	
	Constructor mmmm = c.getDeclaredConstructor(String.class,int.class);
	mmmm.setAccessible(true);//暴力反射
	System.out.println(mmmm.newInstance("小李",20));//传入参数
}
}

其他类: Test1

public class Test1 {
private String name;//姓名
public int age;//年龄
protected String sex;//性别
int salary;//工资
private void add(String s){
	System.out.println(s+"说这是私有增加方法");
}
public void find(String s){
	System.out.println(s+"说这是公有查询方法");
}
protected void remove() {
	System.out.println("这是受保护的删除方法");

}
void show(){
	System.out.println("这是默认的显示方法");
}	

@Override
public String toString() {
	return "姓名:" + name + ", 年龄:" + age + ", 性别:" + sex + ", 工资:" + salary ;
}
public Test1() {
	super();
}
public Test1(String name, int age, String sex, int salary) {
	super();
	this.name = name;
	this.age = age;
	this.sex = sex;
	this.salary = salary;
}
private Test1(String name, int age) {
	super();
	this.name = name;
	this.age = age;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}
public String getSex() {
	return sex;
}
public void setSex(String sex) {
	this.sex = sex;
}
public int getSalary() {
	return salary;
}
public void setSalary(int salary) {
	this.salary = salary;
}	
}

其他类:Dog

public class Dog {
public String name;//姓名
public int age;//年龄
@Override
public String toString() {
	return "Dog [name=" + name + ", age=" + age + "]";
}
public Dog() {
	super();
}
public Dog(String name, int age) {
	super();
	this.name = name;
	this.age = age;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}
}

其他类:Cat

public class Cat {
public String name;//姓名
public int age;//年龄
@Override
public String toString() {
	return "Cat [name=" + name + ", age=" + age + "]";
}
public Cat() {
	super();
}
public Cat(String name, int age) {
	super();
	this.name = name;
	this.age = age;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}	
}

输出结果:

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值