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

java基礎之反射和泛型以及注解

 更新時間:2017年07月06日 15:14:00   投稿:lqh  
這篇文章主要介紹了 java基礎之反射和泛型以及注解的相關資料,需要的朋友可以參考下

 java基礎之反射和泛型以及注解

泛型擦除

泛型擦除: 泛型只在編譯時期有效,編譯后的字節(jié)碼文件中不存在泛型信息。

聲明泛型集合,集合兩端類型必須一致。類型也可以用包裝類型,泛型的類型必須是引用類型,不能為基本類型。

實現公用的類和方法,對公用的業(yè)務進行抽取。

泛型方法/泛型類/泛型接口

public class GenericTest 
{ 
  /** 
   * 泛型聲明,定義泛型方法 
   * @param <T> 
   * @param <K> 
   * @param t 
   * @param k 
   */ 
  public <T, K> K save(T t, K k) 
  { 
    return null; 
  } 
  @Test 
  public void testMethod() throws Exception 
  { 
    //使用泛型方法: 在使用泛型方法的時候,確定泛型的類型 
    save("hello", 1); 
  } 
} 
泛型類: 
public class GenericTest<T> 
@Test 
  public void testMethod() throws Exception 
  { 
    //使用泛型方法: 在使用泛型方法的時候,確定泛型的類型 
    //save("hello", 1); 
    //泛型類如何使用:在創(chuàng)建泛型類的時候確定 
    GenericTest<String> demo = new GenericTest<String>(); 
    demo.save("hello", 1);  
} 

泛型中的extends 和super的意義:

Extends:定義List<? Extends String>;傳入的參數?必須是String類型的子類,否則會報錯;
Super:定義List<? Super String>;傳入的參數必須是String類型的父類,否則會報錯;

Type : 接口,任何類型默認的接口!

反射

反射可以在運行時期動態(tài)創(chuàng)建對象,獲取對象的屬性,方法

/**  
 * @ClassName: App  
 * @Description: 反射技術  
 * @author lqw  
 * @date 2016-5-13 下午01:33:55  
 *  
 */ 
public class App 
{ 
  @Test 
  public void testInfo() throws Exception 
  { 
    //類全名 
    String sql = "com.hbmy.reflect.demo2.Admin"; 
    //得到類的字節(jié)碼 
    Class<?> clazz = Class.forName(sql); 
    /** 
     * 創(chuàng)建對象1: 通過默認構造函數創(chuàng)建(簡寫) 
     */ 
    Admin admin = (Admin) clazz.newInstance(); 
    /** 
     * 創(chuàng)建對象2: 通過無參構造器創(chuàng)建對象 
     */ 
    Constructor<?> constructors = clazz.getDeclaredConstructor(); 
    constructors.newInstance(); 
    /** 
     * 創(chuàng)建對象3:通過有參構造器創(chuàng)建對象 
     */ 
    Constructor<?> constructor = clazz.getDeclaredConstructor(String.class); 
    Admin admin2 = (Admin) constructor.newInstance("zhangsan"); 
    //   System.out.println(admin); 
  } 
   
  /** 
   * 獲取屬性名稱、值 
   * getDeclaredFields: 獲取所有的包含私有的屬性名稱 
   * getFields:只能訪問public的屬性 
   */ 
  @Test 
  public void testNameAndValue() throws Exception 
  { 
    //類全名 
    String sql = "com.hbmy.reflect.demo2.Admin"; 
    //得到類的字節(jié)碼 
    Class<?> clazz = Class.forName(sql); 
     
    Admin admin = (Admin) clazz.newInstance(); 
//   Method[] methods = clazz.getMethods(); 
//   for (Method method : methods) 
//   { 
//     //設置強制訪問 
//     method.setAccessible(true); 
//     //名稱 
//     String name = method.getName(); 
//     System.out.println(name); 
//      
//   } 
//   Field[] fields = clazz.getFields();//打印出來的結果只有money 
    Field[] fields = clazz.getDeclaredFields(); 
    for (Field field : fields) 
    { 
      //設置強制訪問 
      field.setAccessible(true); 
      //名稱 
      String name = field.getName(); 
      Object value = field.get(admin); 
      System.out.println(name + value); 
    } 
  } 
 
  /** 
   * 反射獲取方法 
   */ 
  @Test 
  public void testGetMethods() throws Exception 
  { 
    //類全名 
    String sql = "com.hbmy.reflect.demo2.Admin"; 
    //得到類的字節(jié)碼 
    Class<?> clazz = Class.forName(sql); 
 
    Admin admin = (Admin) clazz.newInstance(); 
    /* 
     * 獲取方法對象 
     */ 
    Method declaredMethod = clazz.getDeclaredMethod("getId"); 
    /** 
     * 調用方法 
     */ 
    Object return_value = declaredMethod.invoke(admin); 
    System.out.println(return_value); 
    Method[] methods = clazz.getDeclaredMethods(); 
     
    for (Method method : methods) 
    { 
      method.setAccessible(true); 
      String name = method.getName(); 
      System.out.println(name); 
    } 
  } 

注解

注解的作用

1、 告訴編譯器如何去運行

2、 簡化(取代)配置文件

public class App 
{ 
  @Override 
  public String toString() 
  { 
    return super.toString(); 
  } 
  @SuppressWarnings({"unused","unchecked"}) 
  public void save() 
  { 
    List list = null; 
  } 
   
  @Deprecated 
  public void save1() 
  { 
 
  } 
} 

自定義注解: 通過自定義注解可以給類,字段,方法加上描述信息。

public @interface Author 
{ 
  /** 
   * 注解屬性 
   * 1.修飾符為默認或者public 
   * 2.不能有主體 
   * 3. 如果注解名稱為value,使用的時候可以省略名稱,直接給值 
   */ 
  String name() default "lqw"; 
  //帶默認值得注解 
  int age() default 23; 
  String remark(); 
} 

元注解

元注解就是注解的注解

指定注解的可用范圍 
@Target({ 
TYPE, 
FIELD,  
METHOD,  
PARAMETER,  
CONSTRUCTOR,  
LOCAL_VARIABLE}) 
注解的生命周期 
/** 
 * 元注解2: 指定注解的生命周期 
 * RetentionPolicy.SOURCE 只在源碼級別有效 
 * RetentionPolicy.CLASS 只在類的字節(jié)碼級別有效 默認值 
 * RetentionPolicy.RUNTIME 只在運行時期有效 
 */ 
@Retention(RetentionPolicy.SOURCE) 

 最后總結一句:注解和反射其實不難,只要不畏懼,注解其實看看源碼也就那么回事。至于反射嘛??梢赃@么說,無反射,則無框架,幾乎所有的框架都是通過反射實現的。說白了,反射也就是通過加載類的字節(jié)碼去獲取類里面的方法和屬性,其實框架也是這么實現的。

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

相關文章

  • 解決org.springframework.context.ApplicationContextException報錯的問題

    解決org.springframework.context.ApplicationContextException報錯的

    這篇文章主要介紹了解決org.springframework.context.ApplicationContextException報錯的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 詳解SpringMVC中的@RequestMapping注解

    詳解SpringMVC中的@RequestMapping注解

    這篇文章主要介紹了SpringMVC中@RequestMapping注解,@RequestMapping注解是一個用來處理請求地址映射的注解,可用于映射一個請求或一個方法,可以用在類或方法上,需要的朋友可以參考下
    2023-07-07
  • Spring裝配Bean之用Java代碼安裝配置bean詳解

    Spring裝配Bean之用Java代碼安裝配置bean詳解

    這篇文章主要給大家介紹了關于Spring裝配Bean之用Java代碼安裝配置bean的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用spring具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧。
    2017-10-10
  • Feign接口方法返回值設置方式

    Feign接口方法返回值設置方式

    這篇文章主要介紹了Feign接口方法返回值設置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 解決IDEA誤刪out目錄下的文件導致404無法訪問的問題

    解決IDEA誤刪out目錄下的文件導致404無法訪問的問題

    這篇文章主要介紹了解決IDEA誤刪out目錄下的文件導致404無法訪問的情況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • SpringBoot配置Clickhouse的示例代碼

    SpringBoot配置Clickhouse的示例代碼

    這篇文章主要介紹了SpringBoot配置Clickhouse的示例代碼,代碼簡單易懂,對大家的學習或工作具有一定的參考價值,需要的朋友可以參考下
    2022-02-02
  • JDK21新特性Record?Patterns記錄模式詳解(最新推薦)

    JDK21新特性Record?Patterns記錄模式詳解(最新推薦)

    這篇文章主要介紹了JDK21新特性Record?Patterns記錄模式詳解,本JEP建立在Pattern?Matching?for?instanceof(JEP?394)的基礎上,該功能已在JDK?16中發(fā)布,它與Pattern?Matching?for?switch(JEP?441)共同演進,需要的朋友可以參考下
    2023-09-09
  • Java for循環(huán)和foreach循環(huán)的性能對比分析

    Java for循環(huán)和foreach循環(huán)的性能對比分析

    這篇文章主要介紹了Java for循環(huán)和foreach循環(huán)的性能對比分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java反射調用方法NoSuchMethodException的解決方案

    java反射調用方法NoSuchMethodException的解決方案

    這篇文章主要介紹了java反射調用方法NoSuchMethodException的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java Swing BoxLayout箱式布局的實現代碼

    Java Swing BoxLayout箱式布局的實現代碼

    這篇文章主要介紹了Java Swing BoxLayout箱式布局的實現代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12

最新評論

三穗县| 泰兴市| 利辛县| 梁河县| 老河口市| 齐河县| 五指山市| 中江县| 思茅市| 肇州县| 晴隆县| 卢氏县| 资源县| 韶山市| 淅川县| 北辰区| 徐州市| 旬阳县| 鄄城县| 科技| 边坝县| 鄂托克前旗| 常德市| 扬州市| 新沂市| 邵阳县| 大同县| 永兴县| 安平县| 黄山市| 古丈县| 富民县| 河曲县| 五台县| 阿城市| 建德市| 永春县| 富顺县| 祁东县| 平舆县| 江陵县|