叶存菜鸟笔记JAVA反射机制的一般应用
2015-08-26 22:28
525 查看
import java.lang.reflect.*;
/*1、准确掌握获取类的结构
* 2、如何通过反射实例化对象
* 3、获取一个完整的方法 ,(锻炼逻辑思维) 了解即可
* 4、获取全部的属性
*/
public class ClassNoTypeReflection {
public static void main(String args[])throws Exception{
Class<?> a=null;
a=Class.forName("PersonOne"); //class类本身没有定义任何构造方法,去的实例通过Forname()静态方法取得Class实例,
//此操作代替了普通我们类里new关键词的操作方式
System.out.println(a.getName());
Constructor<?> cons[]=a.getConstructors(); //抽象获取PersonOne类的全部构造方法
for(Constructor<?> n:cons){ //Foreach 输出方式
System.out.println(n);
}
PersonOne one=(PersonOne)a.newInstance();//无参构造实例化PersonOne对象
one.setName("杨军"); //调用方法实现功能
one.sayName();
PersonOne two=(PersonOne)cons[1].newInstance("廖鸡毛",30);//有参实例PersonOne对象
//有参实例化对象原理,Constructor类内有newInstance(Object args...);
two.sayName();
two.sayAge();
//获取完整的方法
Method m[]=a.getMethods();
for(int i=0;i<m.length;i++){
int mm=m[i].getModifiers(); //取得方法的修饰符,因为此返回值为整数,整形赋值
Class<?> r=m[i].getReturnType();//获取方法的返回类型
System.out.print(Modifier.toString(mm)+" "+r.getName()+" "+m[i].getName()+" "+"(");
//Modifier.toString(mm) 将整形转为String 如 public r.getName()返回值 void or String
Class<?> types[]=m[i].getParameterTypes();
for(int j=0;j<types.length;j++){
System.out.print(types[j].getName()+" "+"arg"+j);
if(j<types.length-1){
System.out.print(","); //插入参数分隔符 ,循环判断 这种模式日后开发会经常用到
}
}
System.out.print(")"+"\n");
}
System.out.print("\n");
//获取全部完整的属性
Field field[]=a.getFields();
for(int k=0;k<field.length;k++){
int kk=field[k].getModifiers();
Class<?> r=field[k].getType();
System.out.println(Modifier.toString(kk)+" "+r+" "+field[k].getName());
}
}
}
PersonOne
public PersonOne()
public PersonOne(java.lang.String,int)
作者杨军
作者廖鸡毛
年龄:30
public void sayName ()
public void sayAge ()
public void setAge (int arg0)
public java.lang.String getName ()
public void setName (java.lang.String arg0)
public static void main ([Ljava.lang.String; arg0)
public final native java.lang.Class getClass ()
public native int hashCode ()
public boolean equals (java.lang.Object arg0)
public java.lang.String toString ()
public final native void notify ()
public final native void notifyAll ()
public final void wait (long arg0,int arg1)
public final void wait ()
public final native void wait (long arg0)
/*1、准确掌握获取类的结构
* 2、如何通过反射实例化对象
* 3、获取一个完整的方法 ,(锻炼逻辑思维) 了解即可
* 4、获取全部的属性
*/
public class ClassNoTypeReflection {
public static void main(String args[])throws Exception{
Class<?> a=null;
a=Class.forName("PersonOne"); //class类本身没有定义任何构造方法,去的实例通过Forname()静态方法取得Class实例,
//此操作代替了普通我们类里new关键词的操作方式
System.out.println(a.getName());
Constructor<?> cons[]=a.getConstructors(); //抽象获取PersonOne类的全部构造方法
for(Constructor<?> n:cons){ //Foreach 输出方式
System.out.println(n);
}
PersonOne one=(PersonOne)a.newInstance();//无参构造实例化PersonOne对象
one.setName("杨军"); //调用方法实现功能
one.sayName();
PersonOne two=(PersonOne)cons[1].newInstance("廖鸡毛",30);//有参实例PersonOne对象
//有参实例化对象原理,Constructor类内有newInstance(Object args...);
two.sayName();
two.sayAge();
//获取完整的方法
Method m[]=a.getMethods();
for(int i=0;i<m.length;i++){
int mm=m[i].getModifiers(); //取得方法的修饰符,因为此返回值为整数,整形赋值
Class<?> r=m[i].getReturnType();//获取方法的返回类型
System.out.print(Modifier.toString(mm)+" "+r.getName()+" "+m[i].getName()+" "+"(");
//Modifier.toString(mm) 将整形转为String 如 public r.getName()返回值 void or String
Class<?> types[]=m[i].getParameterTypes();
for(int j=0;j<types.length;j++){
System.out.print(types[j].getName()+" "+"arg"+j);
if(j<types.length-1){
System.out.print(","); //插入参数分隔符 ,循环判断 这种模式日后开发会经常用到
}
}
System.out.print(")"+"\n");
}
System.out.print("\n");
//获取全部完整的属性
Field field[]=a.getFields();
for(int k=0;k<field.length;k++){
int kk=field[k].getModifiers();
Class<?> r=field[k].getType();
System.out.println(Modifier.toString(kk)+" "+r+" "+field[k].getName());
}
}
}
PersonOne
public PersonOne()
public PersonOne(java.lang.String,int)
作者杨军
作者廖鸡毛
年龄:30
public void sayName ()
public void sayAge ()
public void setAge (int arg0)
public java.lang.String getName ()
public void setName (java.lang.String arg0)
public static void main ([Ljava.lang.String; arg0)
public final native java.lang.Class getClass ()
public native int hashCode ()
public boolean equals (java.lang.Object arg0)
public java.lang.String toString ()
public final native void notify ()
public final native void notifyAll ()
public final void wait (long arg0,int arg1)
public final void wait ()
public final native void wait (long arg0)
相关文章推荐
- thinkinginjava学习笔记03_基本语法
- 【JavaWeb探究】解析Web运行原理
- Java IO流->处理流->打印流:PrintStream&PrintWriter
- java 大数计算
- Java多线程 -- 有返回值的线程
- 自动提示和手动提示 VS2013与Eclipse中的设置
- java导出word文档
- 【JavaSE】day05_List集合_List排序_队列和栈
- Java IO流->处理流->数据流:DataOutputStream&DataInputStream
- Java学习之方法重载和方法重写(覆盖)比较
- Struts2属性驱动与模型驱动
- 大龄屌丝自学笔记--Java零基础到菜鸟--012
- java ConcurrentHashMap
- Java多线程 -- 线程池
- Spring MVC工作原理
- 在Eclipse的workplace外的工程使用兼容性actionbar提示No resource found that matches the given name的解决方法
- Easyui+Spring+Mybatis完整示例(后台)
- java mysql 数据类型对照
- Ioc的基本概念《Spring揭秘》第2章笔记
- 每日五题(java基础)