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

java 反射機(jī)制詳解及實(shí)例代碼

 更新時(shí)間:2016年11月02日 10:45:18   投稿:lqh  
這篇文章主要介紹了java 反射機(jī)制詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下

java 反射機(jī)制:

測試實(shí)體類

以Human為例

/**
 * Project: Day12_for_lxy
 * Created: Lulu
 * Date: 2016/8/10
 */
public class Human<T> {
  private String name;
  private int age;
  private float height;

  private static int legs = 2;
  private Map<String, String> jobs;
  private T t;

  public int say() {
    System.out.println("I'm" + name);
    return 0;
  }
  private void sleep(Human human) {
    System.out.println(name + " sleep with " + human.name);
  }
  public List<Integer> getList() {
    return new ArrayList<>();
  }
  public Human() {
  }
  private Human(String name, int age, float height) {
    this.name = name;
    this.age = age;
    this.height = height;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    if (age > 150 || age < 0) {
      throw new RuntimeException("age > 150 || age < 0");
    }
    this.age = age;
  }
  public float getHeight() {
    return height;
  }
  public void setHeight(float height) {
    this.height = height;
  }
  @Override
  public String toString() {
    return "Human{" +
        "name='" + name + '\'' +
        ", age=" + age +
        ", height=" + height +
        '}';
  }
}

測試獲取構(gòu)造方法

/**
 * Project: Day12_for_lxy
 * Created: Lulu
 * Date: 2016/8/10
 */
/*
獲取構(gòu)造方法
 */
public class TestConstructor {
  public static void main(String[] args) {
    //得到相應(yīng)的類結(jié)構(gòu), 這是用來描述Human這個(gè)類的類
    Class<Human> humanClass = Human.class;
    try {
////      這是在知道構(gòu)造方法結(jié)構(gòu)的前提下
//      //獲取都明確參數(shù)的構(gòu)造方法, 獲取的是公開的(public)
//      Constructor<Human> constructor1 = humanClass.getConstructor(String.class, Integer.TYPE, Float.TYPE);
//
//      Human h1 = constructor1.newInstance("小明", 18, 1.85f);
//      System.out.println(h1.toString());
//
//      //構(gòu)造方法, 修飾符類型
//      int modifiers = constructor1.getModifiers();
//      if (Modifier.isPublic(modifiers)) {
//        System.out.println("是public");
//      }

//      ////獲取都明確參數(shù)的構(gòu)造方法, 獲取的是聲明的
//      Constructor<Human> constructor2 = humanClass.getDeclaredConstructor(String.class, Integer.TYPE, Float.TYPE);
//      //設(shè)置可以全部訪問
//      constructor2.setAccessible(true);
//      //這樣是可以獲取到所有的構(gòu)造方法, 包括私有的
//      Human human2 = constructor2.newInstance("zll", 18, 1.80f);
//      System.out.println(human2.toString());

      //不知道構(gòu)造方法的類結(jié)構(gòu)
      Constructor<?>[] constructors = humanClass.getDeclaredConstructors();

      for (Constructor<?> c : constructors) {
        c.setAccessible(true);
        System.out.println(c.getName());
        System.out.println("===========================");
        //參數(shù)列表
        Class<?>[] types = c.getParameterTypes();
        for (Class<?> type : types) {
          System.out.println(type.getTypeName());
        }

        //修飾符類型
        int modifiers = c.getModifiers();
        if (Modifier.isPublic(modifiers)) {
          System.out.println("是公開的");
        }else if (Modifier.isPrivate(modifiers)){
          System.out.println("是私有的");
        }
      }


    } catch (Exception e) {
      e.printStackTrace();
    }

  }
}

測試獲取字段

/**
 * Project: Day12_for_lxy
 * Created: Lulu
 * Date: 2016/8/10
 */

/*
獲取屬性:
屬性包括:( 屬性名 類型 修飾符 泛型 )
父類的屬性
自身的屬性
 */
public class TestField {
  public static void main(String[] args) {
    Class<Human> humanClass = Human.class;
    Field[] fields = humanClass.getDeclaredFields();
    for (Field f : fields) {

      //屬性名
      System.out.print(" 名字: " + f.getName() + " ");
      System.out.println();
      //類型
      System.out.print("類型 :" + f.getType() + " ");
      System.out.println();
      //修飾符
      int modifiers = f.getModifiers();
      if (Modifier.isPublic(modifiers)) {
        System.out.println("公開的");
      } else if (Modifier.isPrivate(modifiers)) {
        System.out.println("私有的");
      }
    }
    System.out.println("============================泛型==================================");
    try {
      //通過類結(jié)構(gòu)獲取jobs屬性
      Field jobs = humanClass.getDeclaredField("jobs");
      //泛型
      ParameterizedType type = (ParameterizedType) jobs.getAnnotatedType().getType();
      Type[] types = type.getActualTypeArguments();
           for (Type type1 : types) {
        System.out.println(type1);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    System.out.println("===================設(shè)置值, 得到值============================");

    try {
      Human<Object> human = new Human<>();
      //非靜態(tài), 你要知道給誰設(shè)置屬性的值
      Field nameField = humanClass.getDeclaredField("name");
      nameField.setAccessible(true);
      nameField.set(human, "路新藝");
      System.out.println(human.getName());

      //靜態(tài)
      Field legs = humanClass.getDeclaredField("legs");
      int modifiers = legs.getModifiers();
      legs.setAccessible(true);
      if (Modifier.isStatic(modifiers)) {
        System.out.println("是靜態(tài)的");
      }
      legs.set(null, 4);
      System.out.println(legs.get(null));

    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

測試獲取方法

/**
 * Project: Day12_for_lxy
 * Created: Lulu
 * Date: 2016/8/10
 */
/*
獲取方法:
方法名
修飾符
返回值類型
泛型

靜態(tài)和非靜態(tài)

方法的調(diào)用

 */
public class TestMethod {
  public static void main(String[] args) {

    Class<Human> humanClass = Human.class;
    //方法名
    Method[] ms = humanClass.getDeclaredMethods();
    for (Method m : ms) {
      m.setAccessible(true);
      System.out.print("方法名: " + m.getName() + "  " );
      int modifiers = m.getModifiers();

      if (Modifier.isPublic(modifiers)) {
        System.out.println("公開的");
      } else if (Modifier.isPrivate(modifiers)) {
        System.out.println("私有的");
      }
    }
    //在確定方法參數(shù)的情況下  方法名不能唯一的確定, 重載
    try {
      //普通類型
      Method sayM = humanClass.getDeclaredMethod("say");
      Class<?> returnType = sayM.getReturnType();
      System.out.println(returnType.toString());
      //泛型
      Method getListM = humanClass.getDeclaredMethod("getList");
      System.out.println(getListM.getReturnType());

      ParameterizedType type = (ParameterizedType) getListM.getAnnotatedReturnType().getType();
      System.out.println(type);
      Type[] ts = type.getActualTypeArguments();
      for (Type t : ts) {
        System.out.println(t);
      }


    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

測試獲取類信息

public static void main(String[] args) {
  printClassInfo(Student.class);
}

public static void printClassInfo(Class c){
    //Java中唯一的父類的類時(shí)Object
    System.out.println(c.getName());
    System.out.println(c.getSimpleName());
    System.out.println(c.getSuperclass());

    Class[] interfaces = c.getInterfaces();
    for (Class anInterface : interfaces) {
      System.out.println(anInterface);
    }
    //外部類類只有兩種訪問權(quán)限修飾(public 和 default)
    int modifiers = c.getModifiers();
  }

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Java--Socket通信(客戶端服務(wù)端雙向)

    Java--Socket通信(客戶端服務(wù)端雙向)

    這篇文章主要介紹了Java--Socket通信(客戶端服務(wù)端雙向),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • java selenium Selenium IDE介紹及用法

    java selenium Selenium IDE介紹及用法

    本文主要介紹java selenium Selenium IDE,這里整理了相關(guān)資料和介紹如何安裝 Selenium IDE和使用方法,有需要的小伙伴可以參考下
    2016-08-08
  • Java 如何實(shí)現(xiàn)解壓縮文件和文件夾

    Java 如何實(shí)現(xiàn)解壓縮文件和文件夾

    這篇文章主要介紹了Java 如何實(shí)現(xiàn)解壓縮文件和文件夾,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • Java并發(fā)編程之死鎖相關(guān)知識整理

    Java并發(fā)編程之死鎖相關(guān)知識整理

    前篇文章在講解線程安全的時(shí)候,有提到過為了保證每個(gè)線程都能正常執(zhí)行共享資源操作,Java引入了鎖機(jī)制,雖然這樣使多線程改善了系統(tǒng)的處理能力,然而也帶來了新的問題,其中之一:死鎖,需要的朋友可以參考下
    2021-06-06
  • 解決mybatis-generator生成Mapper文件沒有Selective結(jié)尾的問題

    解決mybatis-generator生成Mapper文件沒有Selective結(jié)尾的問題

    這篇文章主要介紹了解決mybatis-generator生成Mapper文件沒有Selective結(jié)尾的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java?8?的異步編程利器?CompletableFuture的實(shí)例詳解

    Java?8?的異步編程利器?CompletableFuture的實(shí)例詳解

    這篇文章主要介紹了Java?8?的異步編程利器?CompletableFuture?詳解,本文通過一個(gè)例子給大家介紹下Java?8??CompletableFuture異步編程的相關(guān)知識,需要的朋友可以參考下
    2022-03-03
  • 基于Java將Excel科學(xué)計(jì)數(shù)法解析成數(shù)字

    基于Java將Excel科學(xué)計(jì)數(shù)法解析成數(shù)字

    這篇文章主要介紹了基于Java將Excel科學(xué)計(jì)數(shù)法解析成數(shù)字,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java中String類startsWith方法詳解

    Java中String類startsWith方法詳解

    這篇文章主要給大家介紹了關(guān)于Java中String類startsWith方法的相關(guān)資料,startsWith() 方法用于檢測字符串是否以指定的前綴開始,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • Spring運(yùn)行環(huán)境Environment的解析

    Spring運(yùn)行環(huán)境Environment的解析

    本文主要介紹了Spring運(yùn)行環(huán)境Environment的解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • Spring?Boot實(shí)現(xiàn)文件上傳的兩種方式總結(jié)

    Spring?Boot實(shí)現(xiàn)文件上傳的兩種方式總結(jié)

    應(yīng)用開發(fā)過程中,文件上傳是一個(gè)基礎(chǔ)的擴(kuò)展功能,它的目的就是讓大家共享我們上傳的文件資源,下面這篇文章主要給大家總結(jié)介紹了關(guān)于Spring?Boot實(shí)現(xiàn)文件上傳的兩種方式,需要的朋友可以參考下
    2023-05-05

最新評論

元谋县| 开封市| 改则县| 南江县| 柯坪县| 维西| 渝中区| 普陀区| 宜春市| 塔城市| 曲麻莱县| 临夏市| 琼中| 东城区| 勐海县| 武宁县| 永新县| 江陵县| 兴和县| 舒城县| 博野县| 汉阴县| 三江| 辰溪县| 怀集县| 邵阳市| 江西省| 通海县| 宁城县| 平南县| 延庆县| 梨树县| 内江市| 许昌县| 闻喜县| 云林县| 金塔县| 阿勒泰市| 桓仁| 井研县| 芦溪县|