Java 反射 class類

構造函數跟建立對象的同時執行,構造函數能夠重載,若是在建類的同時沒有建立構造函數,系統會自動建立一個沒有參數的構造函數。java

經過反射建立對象函數

package wm_io;



import java.lang.reflect.Constructor;

import java.lang.reflect.InvocationTargetException;



/*/

 *在java中能夠經過如下兩種方式經過反射建立對象

 *1.使用class類的newInstance()

 * 調用某個類的Class對象的newInstance()方法,能夠得到與Class對象對應類的實例

 * 注意:使用Class類的newInstance()方法,要求與之對應的類必須提供無參的構造函數。

 * 

 * 2.使用Constructor類實現

 * javalang.reflect.Constructor類

 * 注意:使用Constror建立對象時,應首先得到類的Class對象,而後經過Class類得到Constructor類的實例

 */

public class test2 {

private String classroom;

public String getClassroom() {

return classroom;

}

public void setClassroom(String classroom) {

this.classroom = classroom;

}



private String nameString;



public String getNameString() {

return nameString;

}

public void setNameString(String nameString) {

this.nameString = nameString;

}

public test2(){

nameString="wm";

classroom="卓越軟件";

}

public test2(String classroom,String nameString){

this.classroom=classroom;

   this.nameString=nameString;

}



public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException{





/*1.使用class類的newInstance()

* 調用某個類的Class對象的newInstance()方法,能夠得到與Class對象對應類的實例

* 注意:使用Class類的newInstance()方法,要求與之對應的類必須提供無參的構造函數。

* //使用構造方法建立類的實例

test2 test2=new test2();

//經過test2得到類的Class對象

Class c = test2.getClass();

//經過調用Class對象調用newInstance()方法,建立對象test22

test2 test22 =(wm_io.test2) c.newInstance();

//經過反射建立對象,得到類的信息

String name=test22.getNameString();

System.out.println(name);*/



/*

* 2.使用Constructor類實現

* javalang.reflect.Constructor類

* 注意:使用Constror建立對象時,應首先得到類的Class對象,而後經過Class類得到Constructor類的實例

* 經過有參數的構造方法建立對象時,使用Constructor

* 經過無參數的構造方法建立對象時,使用class類的newInstance()

*/

//得到類的class對象

 Class c=test2.class;

 //經過Class對象得到構造器對象

 Constructor constructor=c.getConstructor();

 //建立類的實例

 test2 test2=(wm_io.test2) constructor.newInstance();

 System.out.println("姓名和班級分別是:"+test2.getNameString()+test2.getClassroom());

 //下面使用有參的構造方法建立對象

 //得到類的構造器對象

 Constructor constructor2= c.getConstructor(String.class,String.class);

 //建立類的實例

 test2 test22=(wm_io.test2) constructor2.newInstance("wm","卓越軟件1301");

 System.out.println("姓名和班級分別是:"+test22.getNameString()+test22.getClassroom());



/**

  * 經過反射得到類的接口

  

 Class c2= Class.forName("wm_io.test2");

 Class[] inte=c2.getInterfaces();

 for(int i=0;i<inte.length;i++){

 System.out.println(inte[i].getName());

 }*/



 /**

  * 經過反射得到其餘類中的父類

  

  Class c2=Class.forName("wm_io.test2");

  Class su=c2.getSuperclass();

  System.out.println(su.getName());*/



  /**

   * 經過反射調用其它類中的方法

   



   Class c2=Class.forName("wm_io.test2");

   //調用sum方法

   Method method = c2.getMethod("sum");

   method.invoke(c2.newInstance());

  */

}

}

 

Java反射的概念
  反射含義:能夠獲取正在運行的Java對象。
  二、Java反射的功能
  1)能夠判斷運行時對象所屬的類
  2)能夠判斷運行時對象所具備的成員變量和方法
  3)經過反射甚至能夠調用到private的方法
  4)生成動態代理
  三、實現Java反射的類
  1)Class:它表示正在運行的Java應用程序中的類和接口
  2)Field:提供有關類或接口的屬性信息,以及對它的動態訪問權限
  3)Constructor:提供關於類的單個構造方法的信息以及對它的訪問權限
  4)Method:提供關於類或接口中某個方法信息
注意:Class類是Java反射中最重要的一個功能類,全部獲取對象的信息(包括:方法/屬性/構造方法/訪問權限)都須要它來實現
this

相關文章
相關標籤/搜索