您的位置:首页 > 编程语言 > Java开发

叶存菜鸟笔记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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: