`
hewei5894
  • 浏览: 9370 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
阅读更多
package fanshe.entity;
/**
 * 测试实体
 * @author hewei
 *
 */
public class Animal {
	
	private String name;
	private int age;
	public int text;
	
	public Animal(){}
	public Animal(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public void speak(){
		System.out.println("my name is "+this.name+"; i am "+this.age+"years old!");
	}
	private String chat(String name){
		return "I chat with"+name;
	}

	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 int getText() {
		return text;
	}

	public void setText(int text) {
		this.text = text;
	}
}
package fanshe;

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

import fanshe.entity.Animal;
/**
 *  java反射机制 reflection
 *  运行时创建类的对象
 *  访问其字段、方法
 *               测试类
 * @author hewei
 *
 */
public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			Class<?> classType = Class.forName("fanshe.entity.Animal");  //获得Class对象
			Method[] ms = classType.getMethods();//获得对象的public方法
			for(Method m : ms){  
				System.out.println("method "+m);
			}
			Field[] field = classType.getFields(); //获得该class所有声明的field(public)  
			for(Field f : field){
				System.out.println("field "+f);
			}
			/**
			 * 创建Animal 对象 
			 */
			Animal animal = (Animal)classType.newInstance();
			animal.setAge(12);
			animal.setName("小熊猫");
			animal.speak();
			/**
			 * 创建 Animal对象 通过带参构造函数
			 */
			Constructor<?> c = classType.getConstructor(new Class[]{String.class,int.class});
			Animal animal2 = (Animal) c.newInstance(new Object[]{"大熊猫",20});
			animal2.speak();
			/**
			 * 通过反射访问对象的私有方法
			 */
			Method chatMethod = classType.getDeclaredMethod("chat", new Class[]{String.class});//通过getDeclareMethod()取得私有方法
			chatMethod.setAccessible(true);//設置方法可見性為 true
			String returnString =(String) chatMethod.invoke(animal, new Object[]{"小泽玛莉亚"});
			System.out.println(returnString);
			/**
			 * 通过反射访问对象私有属性
			 */
			Field privateF = classType.getDeclaredField("name");//通过getDeclaredField()取得私有字段
			privateF.setAccessible(true);//设置属性的可见性为true
			privateF.set(animal, "苍井空");
			animal.speak();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}



//运行结果:
method public java.lang.String fanshe.entity.Animal.getName()
method public void fanshe.entity.Animal.setName(java.lang.String)
method public void fanshe.entity.Animal.setAge(int)
method public void fanshe.entity.Animal.speak()
method public int fanshe.entity.Animal.getAge()
method public int fanshe.entity.Animal.getText()
method public void fanshe.entity.Animal.setText(int)
method public final void java.lang.Object.wait() throws java.lang.InterruptedException
method public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
method public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
method public native int java.lang.Object.hashCode()
method public final native java.lang.Class java.lang.Object.getClass()
method public boolean java.lang.Object.equals(java.lang.Object)
method public java.lang.String java.lang.Object.toString()
method public final native void java.lang.Object.notify()
method public final native void java.lang.Object.notifyAll()
field public int fanshe.entity.Animal.text
my name is 小熊猫; i am 12years old!
my name is 大熊猫; i am 20years old!
I chat with小泽玛莉亚
my name is 苍井空; i am 12years old!


分享到:
评论

相关推荐

    JAVA反射机制及应用例子

    JAVA反射机制及应用例子.。。Reflection API

    java的反射机制及其实际应用

    Java中,反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接。反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而不是源...

    Java反射机制说明

    Java 的反射机制是使其具有动态特性的非常关键的一种机制,也是在JavaBean 中广泛应用的一种特性。 运用JavaBean 的最常见的问题是:根据指定的类名,类字段名和所对应的数据,得到该类的实例,下面的例子演示了...

    java反射机制的实现与使用

    通过一些例子解释java反射的具体应用

    java反射应用详细介绍

    本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解。 下面开始正文。 【案例1】通过一个对象...

    精通Java:JDK、数据库系统开发Web开发(实例代码)

    第8章 Java反射机制 第9章 数据结构与集合类 第3篇 图形用户界面 第10章 Java Swing(上) 第11章 Java Swing(下) 第12章 Applet网页小程序 第13章 图形编程 第14章 多媒体编程 第4篇 Java高级技术 第15章 字符串...

    java高级特性,涵盖了多种java常用的一些例子

    反射机制 在运行状态中,对于任意一个类能够获取类中的所有属性和方法,对于任意一个对象能够调用对象中的属性和方法,这种动态获取属性和方法的机制:反射。 设计模式1(单例,工厂) 设计模式2(观察者,适配器)...

    java技术文档 常用类和经典应用

    反射机制.pdf 访问路经问题.pdf 基于MVC和RMI的分布.pdf 经典的查询方式.pdf 经典的显示方法.pdf 面向对象的实现.pdf 日期及其格式化.pdf 数字的格式化.pdf 网页之间共享数据.pdf 异常处理.pdf 在Eclipse中使用...

    Java开发详解.zip

    031503_【第15章:Java反射机制】_反射应用——取得类的结构笔记.pdf 031504_【第15章:Java反射机制】_Java反射机制的深入研究笔记.pdf 031505_【第15章:Java反射机制】_动态代理笔记.pdf 031506_【第15章:Java...

    JAVA_API1.6文档(中文)

    javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...

    Java后端+Java后端中级面试题

    请解释Java中的反射机制,以及它的用途和局限性。 什么是Java的序列化和反序列化?为什么它们在分布式系统中很重要? 解释什么是Java的设计模式,并列举几个常用的设计模式及其应用场景。 这些题目涵盖了Java开发中...

    Java大数据开发+Java大厂面试题

    请解释Java中的反射机制,以及它的用途和局限性。 什么是Java的序列化和反序列化?为什么它们在分布式系统中很重要? 解释什么是Java的设计模式,并列举几个常用的设计模式及其应用场景。 这些题目涵盖了Java开发中...

    PHP中的reflection反射机制测试例子

    Java类反射应用得非常广泛几乎是所有框架的最核心部分,PHP程序员似乎从不关心反射。尝试着用java的思想去理解php的反射,跟java基本上基本一致。参考了php手册:http://www.php.net/manual/zh/book.reflection.php...

    Java面试题+Java后端中级面试题

    请解释Java中的反射机制,以及它的用途和局限性。 什么是Java的序列化和反序列化?为什么它们在分布式系统中很重要? 解释什么是Java的设计模式,并列举几个常用的设计模式及其应用场景。 这些题目涵盖了Java开发中...

    Java岗位常规面试题.pdf

    2. 请解释Java中的反射(Reflection)机制以及其在实际项目中的应用。 3. Java中的HashMap和ConcurrentHashMap有什么区别?请比较它们的特点和适用场景。 4. 请解释Java中的线程安全(Thread Safety)是什么,以及...

    Java 1.6 API 中文 New

    java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio ...

    2009年Java认证考试重点指导

    [学习资料] 09年Java认证考试:JAVA反射机制的简单应用 [学习资料] 09年Java认证考试:JFreeChart做题杂谈 [学习资料] 09年Java认证考试:struts2.0的标签库(简介) [考试试题] 09年Java认证考试:5道JAVA题 [考试...

    常用数据结构及其算法的Java实现.zip

    动态性:Java可以通过反射、注解等机制实现在运行时动态加载类和修改行为,增加了程序的灵活性。 综上所述,Java凭借其强大的特性和广泛的适用范围,在企业级应用、互联网服务、移动开发等领域均扮演着举足轻重的...

Global site tag (gtag.js) - Google Analytics