java1234开源博客系统
博客信息

通过反射调用方法和操作属性

0
发布时间:『 2016-11-21 13:20』  博客类别:Java核心基础  阅读(6706) 评论(0)

通过反射调用方法和操作属性


为了演示,我们先改下Student类:

package com.java1234.chap07.sec04;

public class Student {

	private String name;
	private Integer age;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	
	public void say(){
		System.out.println("我的姓名:"+name);
	}
	
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}
	
	
}


1,通过反射调用方法,主要通过invoke方法,我们给下演示代码:

package com.java1234.chap07.sec04;

import java.lang.reflect.Method;

public class Test1 {

	public static void main(String[] args) {
		Class<?> c=null;
		try {
			c=Class.forName("com.java1234.chap07.sec04.Student");
			System.out.println(c.getName());
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
		try {
			Object obj=c.newInstance();
			Method m2=obj.getClass().getMethod("setName", String.class);
			m2.invoke(obj, "小锋");
			Method m=obj.getClass().getMethod("getName");
			String name=(String) m.invoke(obj);
			System.out.println("name="+name);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}
}


2,通过反射操作属性,java里反射可以操作私有属性,只需要设置下,我们给下演示代码:

package com.java1234.chap07.sec04;

import java.lang.reflect.Field;

public class Test2 {

	public static void main(String[] args) {
		Class<?> c=null;
		try {
			c=Class.forName("com.java1234.chap07.sec04.Student");
			System.out.println(c.getName());
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
		try {
			Object obj=c.newInstance();
			Field nameField=c.getDeclaredField("name");
			nameField.setAccessible(true);
			nameField.set(obj, "小锋");
			System.out.println("name="+nameField.get(obj));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}
}

运行输出:

com.java1234.chap07.sec04.Student

name=小锋



关键字:   java反射  
关注Java1234微信公众号
博主信息
Java1234_小锋
(知识改变命运,技术改变世界)
Powered by Java1234 V3.0 Copyright © 2012-2016 Java知识分享网 版权所有