反射


package com.dwt1220;

import java.util.Date;

public class User {
	private int id;
	private String name;
	private Date birther;
	private float money;
	
	public User(){
	}
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Date getBirther() {
		return birther;
	}
	public void setBirther(Date birther) {
		this.birther = birther;
	}
	public float getMoney() {
		return money;
	}
	public void setMoney(float money) {
		this.money = money;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", birther=" + birther
				+ ", money=" + money + "]";
	}
	
	
}





package com.dwt1220;

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

public class ReflectTest {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		Class clazz=User.class;
		Object obj=create(clazz);
		System.out.println("构造obj方法-------------------------");
		System.out.println(obj);
		invoke1(obj,"showName");
		field(clazz);
	}

	/******new 类(构造类)******/
	static Object create(Class clazz) throws Exception{		
		/******方法1、****************************/
		clazz.newInstance();//类必须有无参的构造方法	
		/******方法2、****************************/
		Constructor con=clazz.getConstructor(String.class);//获得带String类型的构造函数
		Object obj=con.newInstance("test name");//通过构造函数构造类
		return obj;
	}
	
	/********反射类的方法************/
	static void invoke1(Object obj,String methodName) throws Exception{
		/******方法1、****************************/
		Method[] ms=obj.getClass().getDeclaredMethods();//反射类中的方法名,包括私有方法(不包括从父类继承的方法)
		/******方法2、****************************/
		ms=obj.getClass().getMethods();//反射类中的方法名,包括从父类继承的方法(不包括私有方法)
		System.out.println("obj类的方法----------------------------------");
		for(Method m:ms){
			System.out.println(m.getName());
		}
		/***********方法1、***************************/
		System.out.println("obj类方法的调用方法1、----------------------------------");
		for(Method m:ms){
			if(methodName.equals(m.getName())){
				m.invoke(obj, null);//调用obj类中的方法(不适合有重载的方法)
			}
		}
		
		/***********方法1、***************************/
		System.out.println("obj类方法的调用方法2、----------------------------------");
		Method m=obj.getClass().getMethod(methodName, null);
		m.invoke(obj, null);

	}
	
	/********反射类的属性**************/
	static void field(Class clazz){
		Field[] fs=clazz.getDeclaredFields();//反射类中的属性名,包括私有属性(不包括从父类继承的属性)
//		fs=clazz.getFields();//反射类中的属性名,包括从父类继承的属性(不包括私有属性)
		System.out.println("obj类的属性----------------------------------");
		for(Field f:fs){
			System.out.println(f.getName());
		}
		
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dwt1220

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值