亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java編程反射機制用法入門與實例總結

2024-07-13 10:15:18
字體:
來源:轉載
供稿:網友

本文實例講述了Java編程反射機制用法。分享給大家供大家參考,具體如下:

前言:反射:動態獲取類 (字節碼文件 如本篇中的Person.class),并對其成員進行運行。反射在Android應用層的開發中可能遇到會稍微少一點,但對于想打通底層的小伙伴來說,必須要熟練掌握運用。

實體類

Person.java

package com.sunwenou.reflect;// 包名public class Person {  private String name;  private int age;  public Person() {// 無參  }  public Person(String name, int age) {// 帶參    super();    this.name = name;    this.age = age;  }  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }  public int getAge() {    return age;  }  public void setAge(int age) {    this.age = age;  }  @Override  public String toString() {    return name+","+age;  }  public void show() { // 空參    System.out.println("show");  }  public void fun(String ss) { // 帶參    System.out.println(ss);  }  public static void function() { // 靜態    System.out.println("static");  }}

動態獲取字節碼文件的方法

本篇中為使博文看起來簡潔,一概拋出Exception,并省略import,下同。

package com.sunwenou.reflect;public class Demo1 {  /**   * 動態獲取字節碼文件的方法   * 1:使用Object類提供的 Class getClass()方法   *  這種方法需要對象   * 2:每種數據類型都有一個靜態的class屬性,這個屬性返回的這種數據類型所屬字節碼文件對象   *  int.class  Person.class   * 3:使用 Class提供的 forName()方法   *  只需要提供一個字符串,這個字符串由 包名+類名 構成   */  public static void main(String[] args) throws Exception {    //getClaz();    //getCalz2();    getClaz3();  }  //使用 Class提供的 forName()方法  public static void getClaz3() throws Exception {    Class<?> claz = Class.forName("com.sunwenou.reflect.Person");    Class<?> claz2 = Class.forName("com.sunwenou.reflect.Person");    System.out.println(claz==claz2);  }  //每種數據類型都有一個靜態的class屬性  public static void getCalz2() {    Class<Person> p1 = Person.class;    Class<Person> p2 = Person.class;    System.out.println(p1==p2);  }  //使用Object類提供的 Class getClass()方法  public static void getClaz() {    Person person1 = new Person();    Class<? extends Person> claz = person1.getClass();//Person.class    Person person2 = new Person();    Class<? extends Person> claz2 = person2.getClass();//Person.class    System.out.println(claz==claz2);  }}

動態獲取類,并創建對象

package com.sunwenou.reflect;public class Demo2 {  public static void main(String[] args) throws Exception {    //createObj();    createObj2();  }  public static void createObj2() throws Exception {    //Person person = new Person("lisi",23);    //得到字節碼文件對象    Class<?> claz = Class.forName("com.sunwenou.reflect.Person");//Person.class    //得到帶參數的構造方法所屬的Constructor類型的對象    Constructor constructor = claz.getConstructor(String.class,int.class);    //使用Constructor類提供的創建對象的方法創建對象    Person person = (Person)constructor.newInstance("lisi",23);    System.out.println(person);  }  public static void createObj() throws Exception {    //Person person = new Person();    //得到字節碼文件對象    Class<?> claz = Class.forName("com.sunwenou.reflect.Person");    Object obj = claz.newInstance();//默認使用空參的構造方法創建對象    System.out.println(obj);  }}

動態獲取類并為成員變量賦值

package com.sunwenou.reflect;public class Demo3 {  public static void main(String[] args) throws Exception {    //Person p = new Person();    //p.name = "lisi";    //得到字節碼文件對象    Class<?> claz = Class.forName("com.sunwenou.reflect.Person");    //得到成員變量所屬的Field類型的對象    //Field field = claz.getField("name");//得到的是public權限的成員    Field field = claz.getDeclaredField("name");//得到所有聲明的字段    System.out.println(field);    //非靜態成員變量是依賴于對象的    Object obj = claz.newInstance();    field.setAccessible(true);//暴力破解, 設置為可訪問的    field.set(obj, "張三");    System.out.println(obj);  }}

動態獲取類,并執行方法

package com.sunwenou.reflect;public class Demo4 {  public static void main(String[] args) throws Exception {    //method1();    method2();    method3();  }  public static void method3() throws Exception {    //得到字節碼文件對象    Class<?> claz = Class.forName("com.sunwenou.reflect.Person");    Method m = claz.getMethod("function", null);    m.invoke(null, null);  }  ////執行帶參數的方法  public static void method2() throws Exception {    //得到字節碼文件對象    Class<?> claz = Class.forName("com.sunwenou.reflect.Person");    Method m = claz.getMethod("fun", String.class);    Object obj = claz.newInstance();    m.invoke(obj, "hello");  }  //執行無參的方法  public static void method1() throws Exception {    //Person person = new Person(); person.show();    //得到字節碼文件對象    Class<?> claz = Class.forName("com.sunwenou.reflect.Person");    //得到被執行的方法所屬的字節碼文件對象    Method m = claz.getMethod("show", null);    //非靜態方法是依賴于對象的    Object obj = claz.newInstance();    //執行方法    m.invoke(obj, null);  }}

這就是反射的基本用法,我們就可以在不能通過正常創建對象的時候通過對象的字節碼文件來創建對象,并執行其中的方法,你學會了嗎??

希望本文所述對大家java程序設計有所幫助。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情a∨在线视频播放| 亚洲xxx大片| 国产精品视频专区| 久久免费成人精品视频| 国产一区二区三区网站| 日韩美女中文字幕| 久久影院资源站| 欧美日韩精品在线观看| 久久成人亚洲精品| 都市激情亚洲色图| 国产精品一区二区女厕厕| 亚洲片国产一区一级在线观看| 欧美性在线视频| 久久韩剧网电视剧| 久操成人在线视频| 国产成人av在线播放| 国产精品美女主播在线观看纯欲| 欧美性xxxxxxx| 午夜精品www| 久久久免费电影| 91亚洲国产成人久久精品网站| 国产成人av网| 国产精品 欧美在线| 97成人超碰免| 少妇高潮久久久久久潘金莲| 日韩精品福利在线| 久热精品视频在线| 91沈先生作品| 亚洲伊人久久大香线蕉av| 麻豆成人在线看| 久久视频在线观看免费| 日韩国产在线看| 欧美成人国产va精品日本一级| 国产精品美女久久久久av超清| 成人免费网站在线| 国产亚洲人成网站在线观看| 疯狂做受xxxx欧美肥白少妇| 日韩欧美亚洲一二三区| 亚洲欧洲日产国码av系列天堂| 日韩精品一二三四区| 国产成人综合久久| 深夜精品寂寞黄网站在线观看| 亚洲一区二区三区成人在线视频精品| 亚洲精品日韩av| 久久久999国产精品| 欧美肥老太性生活视频| 一夜七次郎国产精品亚洲| 插插插亚洲综合网| 日韩成人激情视频| 福利视频第一区| 亚洲人成网站免费播放| 91精品国产91久久久久久最新| 国产精品一区=区| 久久精品精品电影网| 精品毛片三在线观看| 久久国产精品首页| 国产精品444| 136fldh精品导航福利| 亚洲国产精品99久久| 日韩在线精品视频| 国产精品视频网| 国产精品电影一区| 国产日韩精品在线播放| 免费av在线一区| 中文字幕精品一区二区精品| 日本久久久久久久久| 国产免费一区二区三区在线能观看| 国产日产久久高清欧美一区| 欧美老女人bb| 欧美日韩福利电影| 欧美区二区三区| 中文字幕日韩视频| 欧美午夜性色大片在线观看| 欧美日韩国内自拍| 狠狠久久五月精品中文字幕| 欧美一区二粉嫩精品国产一线天| 亚洲福利视频网站| 91色p视频在线| 久久成人精品一区二区三区| 欧美日韩国内自拍| 亚洲国产欧美一区二区丝袜黑人| 性金发美女69hd大尺寸| 亚洲欧美三级伦理| 欧美猛交免费看| 欧美第一黄色网| 亚洲精品在线视频| 亚洲最大的网站| 成人福利在线观看| 国产日韩欧美成人| 免费不卡欧美自拍视频| 啪一啪鲁一鲁2019在线视频| 日韩欧美高清视频| 亚洲精品美女免费| 欧美性色xo影院| 精品少妇一区二区30p| 欧美韩日一区二区| 国产亚洲美女久久| 日韩一区二区在线视频| 欧美亚洲视频在线观看| 911国产网站尤物在线观看| 国产成人在线一区二区| 久久久精品久久久久| 久青草国产97香蕉在线视频| 欧美日韩裸体免费视频| 在线免费观看羞羞视频一区二区| 中文字幕日韩综合av| 综合激情国产一区| 欧美性感美女h网站在线观看免费| 国产免费一区视频观看免费| 亚洲xxxx妇黄裸体| 国产婷婷成人久久av免费高清| 欧美亚洲国产视频小说| 欧美成人激情图片网| 亚洲第一二三四五区| 91精品视频大全| 久久久免费观看| 国产精品一区二区电影| 日韩欧美在线视频| 亚洲jizzjizz日本少妇| 欧美大全免费观看电视剧大泉洋| www.久久草.com| 亚洲第一av在线| 日韩在线播放视频| 91精品国产高清自在线| 欧美成人亚洲成人| 久久亚洲电影天堂| 国产一区二区三区免费视频| 欧美日韩国产成人高清视频| 欧美性受xxxx白人性爽| 欧美日韩免费区域视频在线观看| 亚洲影视中文字幕| 国产成人免费91av在线| 亚洲free性xxxx护士白浆| 一区二区日韩精品| 欧美日本国产在线| 久久天天躁狠狠躁夜夜爽蜜月| 8x海外华人永久免费日韩内陆视频| 欧美激情在线视频二区| 日韩精品在线看| 日av在线播放中文不卡| 亚洲最大中文字幕| 欧美老女人在线视频| 成人福利视频网| 91免费欧美精品| 日韩av在线网页| 久久综合亚洲社区| 91高潮精品免费porn| 7777免费精品视频| 欧美一级bbbbb性bbbb喷潮片| 欧美最顶级丰满的aⅴ艳星| 日韩高清有码在线| 久久久久久国产精品久久| 97精品国产97久久久久久春色| 欧美巨猛xxxx猛交黑人97人| 91精品国产乱码久久久久久久久| 中文字幕免费国产精品| 美女撒尿一区二区三区| 理论片在线不卡免费观看| 国产日产久久高清欧美一区| 欧美老少配视频| 亚洲一区二区三区四区在线播放| 日韩精品在线观看视频| 亚洲色图狂野欧美| 中文字幕亚洲欧美日韩高清|