Java連載119-反編譯類的某個方法已經構造方法

来源:https://www.cnblogs.com/ruigege0000/archive/2020/06/01/13022608.html
-Advertisement-
Play Games

一、獲取某個特定的方法,通過​反射機制。 package com.bjpowernode.java_learning; import java.lang.reflect.*; ​ public class D119_1_ReflectMethodOfSpecialClass { public sta ...


一、獲取某個特定的方法,通過​反射機制。

package com.bjpowernode.java_learning;

import java.lang.reflect.*;

​

public class D119_1_ReflectMethodOfSpecialClass {

  public static void main(String[] args) throws Exception{

    /**

     * D118_CustomerService cs = new D118_CustomerService();

     * boolean isSucess = cs.login("admin","123");

     *

     *  接下來通過反射的方法,來獲取某一個類的某個函數

     * 

     */

    //1.獲取類

    Class c = Class.forName("com.bjpowernode.java_learning.D118_CustomerService");

    //2.獲取某個特定的方法

    //通過:方法名+形參列表

    Method m = c.getDeclaredMethod("login",String.class,String.class);

    //login是D118_CustomerSercice中存在的類

   

    //通過反射機制執行login方法

    Object o = c.newInstance();

   

    //調用o對象的m方法,傳遞"admin","123"參數,方法的執行結果是retValue

    Object retValue = m.invoke(o,"admin","123");

    //列印出來

    System.out.println(retValue);

​

  }

​

}

 

​通過放射機制,我們模糊的執行了某個類的方法,相比之前的直接創建一個​對象更加靈活。

二、反編譯某個類的所有構造方法

我們先分別演示單個函數的修複符、構造方法名,然後通過StringBuffer來寫出​所有的構造方法。​

 

package com.bjpowernode.java_learning;

​

import java.lang.reflect.*;

​

public class D119_2_DecompilationOfAllConstructer {

  public static void main(String[] args) throws Exception{

    //1.獲取一個類

    Class c = Class.forName("java.lang.String");

    //2.獲取所有的構造方法

    Constructor[] cs = c.getDeclaredConstructors();

   

    for(Constructor con:cs) {

      //獲取修飾符

      System.out.println(Modifier.toString(con.getModifiers()));

     

      //獲取構造方法名

      System.out.println(c.getName());

     

      //構造方法的形式參數列表

      Class[] parameterTypes = con.getParameterTypes();

      for(Class parameterType:parameterTypes) {

        System.out.println(parameterType.getSimpleName());

      }

      System.out.println("=================");

    }

   

   

    //反編譯

    StringBuffer sb = new StringBuffer();

    sb.append(Modifier.toString(c.getModifiers())+" class"+c.getSimpleName() + "{\n");

    //構造方法

    for(Constructor con:cs) {

      sb.append("\t");

      sb.append(Modifier.toString(con.getModifiers()) + " ");

      sb.append(c.getSimpleName()+"(");

      Class[] parameterTypes = con.getParameterTypes();

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

        Class parameterType = parameterTypes[i];

        if(i==parameterTypes.length-1) {

          sb.append(parameterType.getSimpleName());

        }else {

          sb.append(parameterType.getSimpleName()+",");

        }

       

      }

      sb.append("){}\n");

    }

    sb.append("}");

    System.out.println(sb);

   

  }

​

}

 

三、源碼:

D119_1_ReflectMethodOfSpecialClass.java

D119_2_DecompilationOfAllConstructer.java

https://github.com/ruigege66/Java/blob/master/D119_1_ReflectMethodOfSpecialClass.java

https://github.com/ruigege66/Java/blob/master/D119_2_DecompilationOfAllConstructer.java

2.CSDN:https://blog.csdn.net/weixin_44630050

3.博客園:https://www.cnblogs.com/ruigege0000/

4.歡迎關註微信公眾號:傅里葉變換,個人公眾號,僅用於學習交流,後臺回覆”禮包“,獲取大數據學習資料

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、當用戶在瀏覽器地址欄中輸入網址,到看到頁面,經歷的步驟 tips:hexo自己搭一個博客 1.解析輸入的URL地址 傳輸協議(把信息在客戶端和伺服器端進行傳遞,類似於快遞小哥) http 超文本傳輸協議(傳輸的內容除了文本,還有可能是其它類型:二進位編碼、BASE64碼、文件流等等) https ...
  • 不管你是做哪個語言的,只要是個程式員都懂: 哈哈啥哈哈哈 來跟我一起學習java吧,做個牛b的程式員。我們一起來敲bug吧 “大清亡於閉關鎖國,學習技術需要交流和資料”。 在這裡我給大家準備了很多的學習資料免費獲取,包括但不限於技術乾貨、大廠面試題系列、技術動向、職業生涯等一切有關程式員的分享. w ...
  • # 5.Utilities:工具 - 1. 邊框 中文網站邊框部分:http://bs4.vx.link/index.html?tmpui_page=/pages/utilities - 2. 清除浮動 - 3. 關閉圖標 - 4. 顏色 - 5. 顯示 3.x版本顯示只有三種:block, inl ...
  • 一、 1、打開方式 打開Chrome瀏覽器,按下F12或者右擊空白處然後點擊檢查 最左邊是顯示效果,中間是html代碼,右邊是html樣式。 2、樣式的修改 點擊中間代碼框,左上角的小箭頭,然後點擊css樣式,可以直接修改屬性的值。也可以點擊鍵盤上的上下箭頭,對屬性的值進行修改 需要註意的是,調試工 ...
  • 平時常用的一些功能性函數 關於原生JS 文件大小單位轉換 /** * @desc bytesToSize 位元組單位換算 * @param bytes 傳入以bit為單位的數據 */ const bytesToSize = function (bytes) { const k = 1024; if ( ...
  • Command模式屬於行為模式,作為大名鼎鼎的23個設計模式之一,Command模式理解起來不如工廠模式,單例模式等那麼簡單直白。究其原因,行為模式著重於使用,如果沒有編程實踐,確實不如創造模式那麼直白。我們先看看UML類圖。 估計很多同學看著圖就暈了,那麼多東西,Command和Concrete ...
  • J2SE(Java 2 Platform Standard Edition) J2ME(Java 2 Platform Micro Edtion) J2EE(Java 2 Platform Enterprise Edition) Java語言特點:開源 跨平臺(JVM) 面向對象等 JRE與JDK ...
  • Java生鮮電商平臺-生鮮系統代碼審查以及優化方案(小程式/APP) 說明:Java生鮮電商平臺-生鮮系統代碼審查以及優化方案(小程式/APP) 代碼審查也就是我們常說的:CodeReview,常見的生鮮電商小程式或者APP中CodeReview有以下的規範與目標: 1. 目標和原則 提高代碼質量, ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...