江湖开发者 | Java粉
网站地图
首页> Java> java反射reflect常用示例
2016
03-25

java反射reflect常用示例

java反射reflect常用示例


反射,动态代理,框架底层技术。各种高大上,不过实际中没用过几次。

java.lang.Class :代表一个类

java.lang.reflect.Method :类的方法

java.lang.reflect.Field :类的成员变量

java.lang.reflect.Constructor :类的构造方法


下面是一些反射常用的小例子。

public class TestReflect {
	public static void main(String[] args) throws Exception {
		// 1. 根据class得到类的实例对象
		Person p1 = Person.class.newInstance();
		
		Class clazz = Class.forName("com.javajh.test.Person");
		
		Person person = (Person) clazz.newInstance();
		
		// 2. 得到字段并给其赋值
		Field field = clazz.getField("foo");
		field.set(person, "java江湖");
		
		System.out.println(person.foo);  //输出:java江湖
		
		// 3. 得到private字段并给其赋值
		Field field1 = clazz.getDeclaredField("name");
		field1.setAccessible(true);
		field1.set(person, "江湖客栈");
		
		System.out.println(person.getName()); //输出:江湖客栈
		
		// 4 .得到方法并执行
		Method method =clazz.getMethod("print", String.class); //第二个参数是 参数类型的class如果参数是String则是String.class
		method.invoke(person, "www.javajh.com");// 第二个参数是参数值
		
		//运行输出: www.javajh.com
		
		// 4.1 得到私有方法并执行
		Method method1 = clazz.getDeclaredMethod("show");
		method1.setAccessible(true);
		method1.invoke(person);
		
		//运行输出:show() 
		
		// 5. 得到构造函数 并执行
		Constructor constructor = clazz.getDeclaredConstructor(String.class,Integer.TYPE);
		constructor.setAccessible(true);
		Person p = (Person)constructor.newInstance("java江湖",12);
		System.out.println(p.getName() +" - "+p.getAge()); //输出:java江湖 - 12
		
		// 6. int.class和Integer.class
		System.out.println(int.class==Integer.class);  //false
		System.out.println(int.class==Integer.TYPE);   //true
	}
}
package com.javajh.test;
public class Person {
	private String name;
	private int age;
	public String foo;
	
	public Person(){
	}
	
	private Person(String name,int age){
		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 void print(String str){
		System.out.println(str);
	}

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




Java江湖     
全部评论:

表情验证码,看不清楚,换一张

随机文章

云标签

公众号

微信

分享:分享我们的知识;专注:专注个人技术的提升;