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反射机制及应用例子.。。Reflection API
### Java反射机制应用详解 #### 一、Java反射机制简介 Java反射机制是Java语言提供的一种能在运行时分析类信息并动态操作对象的功能。通过反射,我们可以在程序运行期间获取类的信息(如类名、方法名等),创建...
### Java的反射机制及其实际应用 #### 一、引言 ...总之,Java反射机制是一项强大的工具,它能够在运行时动态地获取和操作类的信息。然而,应该谨慎使用反射,避免滥用造成不必要的性能损失或安全风险。
通过本文,我们将深入探讨Java反射机制的核心概念、基本原理及其应用场景。 #### 二、Java反射机制简介 Java反射机制允许程序在运行时获取类的信息,这使得Java具有了一定程度上的动态性。具体来说,Java反射机制...
### Java反射机制详解 #### 一、反射的基本概念与历史背景 反射的概念最早由Smith在1982年提出,其核心思想是程序有能力访问、检测甚至...对于初学者而言,了解并掌握Java反射机制的基本原理和应用场景是非常有益的。
Java反射机制是Java编程语言中的一个重要特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类集中...在实践中学习,你会更好地理解Java反射机制的威力和应用场景。
Java反射机制还涉及到注解处理,可以使用`Annotation`接口及其子类来获取和处理类、方法、字段上的注解信息。这对于实现元编程、AOP(面向切面编程)和自定义注解处理器非常有用。 总的来说,Java反射机制为程序员...
### 反射实例—JAVA反射机制 #### 一、反射概念及原理 ...总结而言,Java反射机制是构建灵活、可扩展应用程序的强大工具。然而,在使用反射时,开发者应当权衡其带来的好处和潜在的风险,确保合理有效地利用这一特性。
这篇博文"Java反射机制学习(二)"可能深入探讨了如何利用反射进行动态类型处理、访问私有成员以及创建对象等核心概念。在这里,我们将详细讨论Java反射的基本用法及其在实际开发中的应用。 1. **什么是反射**: ...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部结构。通过反射,开发者可以动态地获取类的信息并调用其方法,创建对象,访问私有成员,甚至改变类的行为。在深入...
下面是一个简单的Java反射机制的实现例子: ```java import java.lang.reflect.Field; public class ReflectionExample { private String privateField = "默认值"; public static void main(String[] args) ...
通过这个例子,新手可以学习到如何使用Java反射机制来增强代码的动态性,以及如何设计可扩展的系统。反射在很多场景下都很有用,例如在插件系统、序列化、动态代理等领域都有广泛应用。然而,需要注意的是,反射也...
### Java反射机制详解 #### 一、反射机制是什么 反射机制是Java编程语言的一个核心特性,它允许程序在运行时动态地获取类的信息,并且能够动态地创建对象和调用对象的方法。简单来说,反射机制使得Java程序可以...
下面我们将深入探讨这个小例子以及Java反射机制的相关知识点。 首先,`Class.forName()`方法在例子中被用来动态加载类。`Class.forName(String className)`接收一个类的全名(包括包名),然后返回对应的`Class`...
Java反射机制是一项强大而灵活的功能,它使得Java程序能够在运行时动态地检查和操作类及其成员。在实际开发中,反射机制在框架设计、动态代理、插件化开发、单元测试和配置与注解处理等方面有着广泛的应用。然而,...
Java反射机制允许运行中的程序检查自身,并能直接操作程序的内部属性。这是其他许多编程语言(如Pascal、C或C++)不具备的能力。 **1.1 Reflection的工作机制** 为了展示反射如何工作,我们来看一个简单的例子: ...
Java 反射机制详解 Java 反射机制是 Java 语言提供的一种强大的工具,它允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并进行操作。这种能力使得 Java 应用程序更加灵活,能够在运行时发现和修改自身...
### Java反射机制深入理解 #### 一、反射机制概述 Java反射机制是一种强大的工具,它允许程序在运行时检查和操作任何类、方法、构造函数和字段等元素。这种能力对于构建灵活的应用程序和框架非常有用,特别是那些...
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作。通过反射,开发者可以在程序执行时发现并访问类的字段(fields)、方法(methods)以及构造器(constructors),...