最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解java中反射機制(含數(shù)組參數(shù))

 更新時間:2017年10月11日 16:10:36   作者:棄天笑  
這篇文章主要介紹了詳解java中反射機制(含數(shù)組參數(shù))的相關資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內容,需要的朋友可以參考下

詳解java中反射機制(含數(shù)組參數(shù))

java的反射是我一直非常喜歡的地方,因為有了這個,可以讓程序的靈活性大大的增加,同時通用性也提高了很多。反射原理什么的,我就不想做過大介紹了,網(wǎng)上一搜,就一大把。(下面我是只附錄介紹下)

Reflection 是Java被視為動態(tài)(或準動態(tài))語言的一個關鍵性質。這個機制允許程序在運行時透過Reflection APIs取得任何一個已知名稱的class的內部信息,包括其modifiers(諸如public, static 等等)、superclass(例如Object)、實現(xiàn)之interfaces(例如Cloneable),也包括fields和methods的所有信息,并可于運行時改變fields內容或喚起methods

在這里,我想說的是如果根據(jù)字符串去做我們自己想要的事(包括動態(tài)執(zhí)行對應的方法,生成相應的類),我們在傳送數(shù)據(jù)的時候,大部分都是傳字符串的(HTTP,socket)等,我們接受到這些字符串時,再根據(jù)這些字符串內容而去做相應的事,那是一件非常不錯的事,可以遠程調用方法(客戶端發(fā)送指定的字符串,讓服務器根據(jù)反射去執(zhí)行對應的方法)。。。事實上,我也曾經做過這樣項目,客戶端(不是java語言寫的)利用socket去呼叫服務器(java寫的)方法,同時還可以直接傳遞參數(shù),這些都是根據(jù)java的反射技術實現(xiàn)的。好了,其他的就多說了,我們從最基礎的看起吧,下面是一個最基本方法反射

/**
 * @(#)TestInt.java
 * 
 * @author soda E-mail:sujun10@21cn.com
 * @version 1.0
 * <br>Copyright (C), 2007 soda.C
 * <br>This program is protected by copyright laws.
 * <br>Date:2007.4
 */
import java.lang.reflect.Method;

public class TestInt 
{
  //測試方法
  public String test(String name,int i)
  {
    System.out.println("name:" + name);
    System.out.println(i);
    return "反射成功!";
  }

  public static void main(String[] args)
  {
    try
    {
      //獲取class文件,可以Class.for("Test")獲取,這樣也可以根據(jù)字符串生成類啦
      Class te = TestInt.class;
      Class[] cl = new Class[2];
      //添加參數(shù)類型
      cl[0] = String.class;
      cl[1] = int.class;
      System.out.println("11111111");
      //根據(jù)public的方法,以及參數(shù),參數(shù)是Class[]形式
      Method method = te.getMethod("test", cl);
      System.out.println("222222222222");
      //開始填充參數(shù)
      Object[] params = new Object[2];
      //params[0] = new String("soda");
      params[0] = new String("soda");
      params[1] = new Integer(23);
      System.out.println("22222222222");
      //獲取該class的實例
      Object obj = te.newInstance();
      //進行方法調用
      Object result = method.invoke(obj, params);
      System.out.println("結果:" + result);
    }
    catch (Exception e)
    {
      System.out.println(e);
    }
    
  }
}

編譯執(zhí)行,可以看到想要的結果,想象一下,把那些字符串變成別的地方傳過來的數(shù)據(jù):)

再來一個方法中有數(shù)組的反射,我研究了一下,有一點點的區(qū)別的。大家要仔細看哦


/**
 * @(#)Test.java
 * 
 * @author soda E-mail:sujun10@21cn.com
 * @version 1.0
 * <br>Copyright (C), 2007 soda.C
 * <br>This program is protected by copyright laws.
 * <br>Program Name:FlashSyncServer
 * <br>Date:2007.1
 */
import java.lang.reflect.Method;
//這里我就不做什么解釋了,和前面的幾乎一樣,大家也可以自己去查查api,Class類的api
public class Test 
{
  public void test(double[] dou)
  {
    System.out.println(dou.length);
    System.out.println(dou[0]);
  }
  public static void main(String[] args) throws Exception
  {
    try
    {
      Class[] cl = new Class[1];
      cl[0] = double[].class;
      System.out.println("cl[0]:" + cl[0]);
      Object[] in = new Object[1];
      //注意這里,不是Double[],而是double[]。這里不能用對象數(shù)組
      double[] db = new double[1];
      db[0] = 100.0;
      in[0] = db;
      Class te = Test.class;
      Method method = te.getMethod("test", cl);
      Object obj = te.newInstance();
      Object objs = method.invoke(obj, in);
    }
    catch (Exception e)
    {
      System.out.println(e);
    }
    
  }
}

好了,基本的是這樣了,再復雜的程序也是有基礎演變而來的。我在這里就學會許多:)

如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • Java利用DelayQueue實現(xiàn)延遲任務代碼實例

    Java利用DelayQueue實現(xiàn)延遲任務代碼實例

    這篇文章主要介紹了Java利用DelayQueue實現(xiàn)延遲任務代碼實例,DelayQueue?是一個支持延時獲取元素的阻塞隊列,?內部采用優(yōu)先隊列?PriorityQueue?存儲元素,同時元素必須實現(xiàn)?Delayed?接口,需要的朋友可以參考下
    2023-12-12
  • Maven的幾個常用plugin

    Maven的幾個常用plugin

    本文主要介紹了Maven的幾個常用plugin。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • Java 內置接口 Serializable示例詳解

    Java 內置接口 Serializable示例詳解

    這篇文章主要為大家介紹了Java 內置接口 Serializable示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Java實現(xiàn)map轉換成json的方法詳解

    Java實現(xiàn)map轉換成json的方法詳解

    這篇文章主要為大家詳細介紹了Java語言實現(xiàn)map轉換成json的幾種方法,文中的示例代碼講解詳細,對我們學習Java有一定幫助,需要的可以參考一下
    2022-05-05
  • java開發(fā)之Jdbc分頁源碼詳解

    java開發(fā)之Jdbc分頁源碼詳解

    這篇文章主要介紹了java開發(fā)之Jdb分頁源碼詳解,需要的朋友可以參考下
    2020-02-02
  • Spring?AOP操作的相關術語及環(huán)境準備

    Spring?AOP操作的相關術語及環(huán)境準備

    這篇文章主要為大家介紹了Spring?AOP操作的相關術語及環(huán)境準備學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • SpringBoot整合Web開發(fā)之文件上傳與@ControllerAdvice

    SpringBoot整合Web開發(fā)之文件上傳與@ControllerAdvice

    @ControllerAdvice注解是Spring3.2中新增的注解,學名是Controller增強器,作用是給Controller控制器添加統(tǒng)一的操作或處理。對于@ControllerAdvice,我們比較熟知的用法是結合@ExceptionHandler用于全局異常的處理,但其作用不止于此
    2022-08-08
  • JAVA字符串反轉的三種方法

    JAVA字符串反轉的三種方法

    這篇文章主要介紹了JAVA字符串反轉的三種方法,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-09-09
  • java 虛擬機深入了解

    java 虛擬機深入了解

    這篇文章主要介紹了java 虛擬機深入了解的相關資料,ava虛擬機有自己完善的硬體架構,如處理器、堆棧、寄存器等,還具有相應的指令系統(tǒng),需要的朋友可以參考下
    2017-03-03
  • window?下?win10?jdk8安裝與環(huán)境變量的配置過程

    window?下?win10?jdk8安裝與環(huán)境變量的配置過程

    這篇文章主要介紹了window?下?win10?jdk8安裝與環(huán)境變量的配置,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08

最新評論

松江区| 渭南市| 上林县| 东至县| 永宁县| 合作市| 靖远县| 贺州市| 筠连县| 会泽县| 汕头市| 威远县| 乌拉特中旗| 巴马| 芦山县| 灯塔市| 贵州省| 定南县| 阿图什市| 新宾| 信阳市| 合阳县| 淳化县| 秦皇岛市| 乐都县| 北宁市| 鄂州市| 东乡| 滦南县| 眉山市| 毕节市| 大关县| 通河县| 宝丰县| 疏附县| 科尔| 平乐县| 尚志市| 正蓝旗| 大安市| 宜黄县|