动态调用方法
public class Ref {
/**
* @param message
*/
public Ref(String message){
System.out.println("Hello :" + message);
}
public void sayHello(String message){
System.out.println("Say Hello!" + message);
}
public static String show(){
return "static show()";
}
public static void main(String[] args)
throws SecurityException, NoSuchMethodException,
ClassNotFoundException, IllegalArgumentException,
InstantiationException, IllegalAccessException,
InvocationTargetException{
//得到Ref类c(元数据)
Class c = Class.forName("test.Ref");
//通过指定参数类型获取相应构造函数(对象)
Constructor constructor = c.getConstructor(String.class);
//通过构造函数实例化Ref类对象test
Ref test =(Ref)constructor.newInstance("Test Instructor");
//通过指定的方法名称取得对应方法对象
//*****************
//语法: 类名.getMethod("方法名称",形参类型列表)
//*****************
Method method = c.getMethod("sayHello", String.class);
//动态调用方法(非静态方法)
//*****************
//语法: method.invoke(对象实例, 实参列表);
//*****************
method.invoke(test, "Test method");
//动态调用方法(静态方法)
Method show = c.getMethod("show");
String str = (String)show.invoke(test); //静态方法调用方式1
//String str = (String)show.invoke(null);//静态方法调用方式2
System.out.println (str);
}
}
接口应用子对象
interface XY{
public void show();
}
class X implements XY{
public void show(){
System.out.println ("X Class");
}
}
class Y implements XY{
public void show(){
System.out.println ("Y Class");
}
}
public class Reflect{
static public void main(String[] args){
try{
Class c = Class.forName("Y");//X
XY t = (XY)c.newInstance(); //反射相应的一个子类对象
t.show(); //动态运行不同类的方法
X x = new X(); //X Class
Class xc = Class.forName("X");
System.out.println (xc.isInstance(x));//true
System.out.println (t instanceof XY); //true
System.out.println (t instanceof X); //true
System.out.println (t instanceof Y);//false
}catch(Exception e){}
}
}
反射类成员
import java.lang.reflect.*;
public class ReflectDemo{
public static void main(String[] args){
try{
/*得到该类的所有数据字段*/
String className = "Student";
Class c = Class.forName(className);
showFields(c); //显示该类所有属性信息
showConstructors(c); //显示所有构造方法
showMethods(c);//显示该类所有方法信息
}catch(Exception e){
e.printStackTrace();
}
}
/*得到该类的所有数据字段*/
public static void showFields(Class c){
Field fields[] = c.getDeclaredFields();
for(Field f : fields){
//1./*数据字段修饰符*/
String m =Modifier.toString(f.getModifiers());
//2./*字段数据类型名*/
Class type=f.getType(); String t =type.getName();
//3./*类的属性名称*/
String n = f.getName();
System.out.println (m+" "+t+" "+n);
}
}
/*得到构造器*/
public static void showConstructors(Class c){
Constructor[] cons=c.getDeclaredConstructors();
for(Constructor con : cons){
String m = Modifier.toString(con.getModifiers());
String n = con.getName();
System.out.print (m+" "+n+"(");
Class[] params = con.getParameterTypes();
for(int j=0;j<params.length; j++){
if(j==params.length-1){
System.out.print (params[j].getSimpleName());
}else
System.out.print (params[j].getSimpleName()+",");
}
System.out.println (")");
}
}
/*得到类里所有方法*/
public static void showMethods(Class c){
Method[] m=c.getMethods();
for(int i=0; i<m.length; i++){
/*方法修饰符*/
String modify = Modifier.toString(m[i].getModifiers());
System.out.print(modify + " ");
/*方法返回类型*/
Class returntype=m[i].getReturnType();
System.out.print(returntype.getName()+" ");
/*方法名称*/
String name = m[i].getName();
System.out.print(name + "(");
/*方法参数*/
Class[] params = m[i].getParameterTypes();
for(int j=0;j<params.length; j++){
if(j==params.length-1){
System.out.print (params[j].getSimpleName());
}else
System.out.print (params[j].getSimpleName()+",");
}
System.out.println (")");
}
}
}
student.java
public class Student{
public String name = "";
public int age = 0;
public Student(){}
public Student(String name, int age){
this.name = name;
this.age = age;
}
public void show(){
System.out.println ("反射测试."+this.name);
}
}
分享到:
相关推荐
java反射 java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射
JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用
java反射
java反射,获取所有属性、方法以及List集合类
java反射java反射java反射java反射java反射
Java反射
代码为JAVA反射的一个DEMO,适合初学者临摹学习,还附有properties的创建方法,比较基础。
1.通过Java反射机制获取JavaBean对象。 2.通过JavaBean全路径字符串获取JavaBean对象。 3.获取JavaBean注解信息
Java反射经典实例 Java反射经典实例 Java反射经典实例 Java反射经典实例
这是一本关于Java反射机制论文集合的书。其中包含基本的理论及各种实例。... 关键字有:Java Java反射机制 Java反射 Java反射理论 Java反射实例 Java反射例子 反射原理 反射 网络论文 集合 汇总 总结 Class。
在向学生讲解Class.forName()方法的使用时,有时需要扩展讲解为什么这样书写的原理,于是,扩展讲解Java反射技术可以查看被监视类的方法(构造方法和普通方法)、公有属性的功能,以达到封闭功能的效果。该例子使用...
反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc...
java 反射 调用私有方法(有参数私有方法)获取私有属性值
java反射机制java反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制...
java 反射demo
java反射获取所有属性,获取所有get方法,包括子类父类,以及包括List集合类
java 反射中操作数组 java 反射中操作数组 java 反射中操作数组
Java 反射机制、Java 的类反射机制、Java 反射机制的学习、Java 反射Reflection--运行时生成实例 java反射机制的手册文档
java反射理论及实现
java反射机制原理和反射机制总结!!! java反射机制原理和反射机制总结!!!