java中的反射

package com.xintouyun.reflect;

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

public class ReflectTest {
	public static void main(String[] args) throws Exception {
		//1.获取类名三种方法
		//1.1
		Class<?> clazz=Class.forName("com.xintouyun.reflect.entity.Student");//获取class的方法一
		//clazz.getName();
		System.out.println(clazz.getSimpleName());
		/*//1.2
			Class<?> clazz1 = Student.class;
			System.out.println(clazz1.getName());*/
		//1.3
			/*Student student = new Student();
			Class<?> clazz2 = student.getClass();
			System.out.println(clazz2.getName());*/
		//2.获取属性(声明的所有的属性,所有的公共的属性,获取一个声明的属性,获取一个生命的公共的属性)
		//2.1获取一个声明的所有的属性
			Field field1=clazz.getDeclaredField("num");
			field1.getModifiers();
			System.out.println("获取一个声明的所有的属性"+Modifier.toString(field1.getModifiers()));
		//2.2获取一个声明的所有的公共的属性	
			/*Field field=clazz.getField("id");//获取id的属性
			field.getModifiers();//获取id的修饰符
			System.out.println("获取一个声明的所有的公共的属性"+Modifier.toString(field.getModifiers()));*/
		//2.3获取声明的所有的属性
			/*Field[] fields2=clazz.getDeclaredFields();
			for (Field field : fields2) {
				int modifiers = field.getModifiers();
				Class<?> type = field.getType();
				String name = field.getName();
				System.out.println("获取声明的所有的属性"+Modifier.toString(modifiers)+" "+type+" "+name);
			}*/
		//2.4获取所有的公共的属性
			/*Field[] fields3=clazz.getFields();
			for (Field field : fields3) {
				System.out.println("获取所有的公共的属性"+Modifier.toString(field.getModifiers()));
			}*/
		//2.4.1创建对象
			Object obj= clazz.newInstance();
			//设置可以获取私有属性
			field1.setAccessible(true);
			//给属性赋值
			field1.set(obj, 1);
			//获取属性值
			int fv = (int)field1.get(obj);
			System.out.println("num设置的值为"+fv);
		//3获取方法
	//3.1获取所有的声明的方法
			Method[] methods=clazz.getDeclaredMethods();
			System.out.println("获取所有的声明的方法");
			for (Method method : methods) {
				int modifiers=method.getModifiers();
				System.out.print(Modifier.toString(modifiers)+" ");
				Class<?> returnType=method.getReturnType();
				System.out.print(returnType.getSimpleName()+" ");
				String name = method.getName();
				System.out.print(name);
				System.out.print("(");
				Class<?>[] parameters = method.getParameterTypes();
				for (Class<?> parameter : parameters) {
					System.out.print(parameter.getSimpleName() +",");
				}
				System.out.println(")");
			}
		//使用反射来调用一个方法
			Method setmethod=clazz.getDeclaredMethod("setNum", int.class);
			setmethod.invoke(obj, 22);
			Method getmethod=clazz.getDeclaredMethod("getNum");
			int i=(int)getmethod.invoke(obj);
			System.out.println("反射调用get/set方法来设置num值:"+i);
	}
	
	
}
package com.xintouyun.reflect.entity;

public class Student {
	private int num;
	private String name;
	public int id;
	String banji;
	protected int grade;
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getBanji() {
		return banji;
	}
	public void setBanji(String banji) {
		this.banji = banji;
	}
	public int getGrade() {
		return grade;
	}
	public void setGrade(int grade) {
		this.grade = grade;
	} 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值