Java基礎之反射應用(如何獲取物件的構造方法、屬性以及、基本方法)
阿新 • • 發佈:2018-11-21
反射實戰:新建Student類,利用反射原理輸出Student的構造方法,屬性,普通方法,引數列表等等資訊。
反射資料:查詢java_API之:java.lang.reflect包下。
Student類:
package com.briup.ch24; public class Student { private String name; private int age; public Student(){ } public Student(String name,int age){ this.name=name; this.age=age; } public void setName(String name){ this.name=name; } public String getName(){ return name; } public void setAge(int age){ this.age=age; } public int getAge(){ return age; } public static void test(){ System.out.println("hello test"); } }
ReflectTest類:
package com.briup.ch24; import java.lang.reflect.*; public class ReflectTest { public static void main(String... args) throws Exception{ //1.獲取類映象 Class clz=Class.forName("com.briup.ch24.Student"); //2.獲取該類中所有的屬性 Field[] f=clz.getDeclaredFields(); for(Field temp:f){ //獲取屬性的資料型別 Class c=temp.getType(); //獲取屬性的名字 String name=temp.getName(); //獲取屬性修飾符 int m=temp.getModifiers(); System.out.println("屬性:"+c+" 名字:"+name+" 修飾符:"+m); } //3.獲取該類中方法 Method[] method=clz.getDeclaredMethods(); for(Method temp:method){ //獲取方法名 String name=temp.getName(); //獲取返回值型別 Class r=temp.getReturnType(); //獲取方法的修飾符 int m=temp.getModifiers(); //獲取引數列表型別 Class[] c=temp.getParameterTypes(); String str=""; for(Class t:c){ str = str + " " + t; } System.out.println("方法名:"+name+" 返回型別:"+r+" 修飾符:"+m+" 引數列表:"+str); } //4.獲取所有構造器 Constructor[] cst= clz.getDeclaredConstructors(); for(Constructor cstt:cst){ //獲取構造器名字 String name=cstt.getName(); //獲取構造器的修飾符 int m=cstt.getModifiers(); //獲取構造器的引數列表 Class[] c=cstt.getParameterTypes(); String str=""; for(Class t:c){ str = str + " " + t; } System.out.println("構造器名字:"+name+" 構造器修飾符:"+ m +" 引數列表:"+str); } } }
執行結果: