内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

一文帶你了解java中的泛型、反射與注解

一文帶你了解java中的泛型、反射與注解?針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

專業(yè)領(lǐng)域包括成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、成都商城網(wǎng)站開發(fā)、微信營銷、系統(tǒng)平臺開發(fā), 與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開發(fā)公司不同,創(chuàng)新互聯(lián)建站的整合解決方案結(jié)合了幫做網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營銷的理念,并將策略和執(zhí)行緊密結(jié)合,為客戶提供全網(wǎng)互聯(lián)網(wǎng)整合方案。

泛型擦除

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

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

實(shí)現(xiàn)公用的類和方法,對公用的業(yè)務(wù)進(jìn)行抽取。

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

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 
  { 
    //使用泛型方法: 在使用泛型方法的時(shí)候,確定泛型的類型 
    save("hello", 1); 
  } 
} 
泛型類: 
public class GenericTest<T> 
@Test 
  public void testMethod() throws Exception 
  { 
    //使用泛型方法: 在使用泛型方法的時(shí)候,確定泛型的類型 
    //save("hello", 1); 
    //泛型類如何使用:在創(chuàng)建泛型類的時(shí)候確定 
    GenericTest<String> demo = new GenericTest<String>(); 
    demo.save("hello", 1);  
} 

泛型中的extends 和super的意義:

Extends:定義List<&#63; Extends String>;傳入的參數(shù)?必須是String類型的子類,否則會(huì)報(bào)錯(cuò);
Super:定義List<&#63; Super String>;傳入的參數(shù)必須是String類型的父類,否則會(huì)報(bào)錯(cuò);

Type : 接口,任何類型默認(rèn)的接口!

反射

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

/**  
 * @ClassName: App  
 * @Description: 反射技術(shù)  
 * @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<&#63;> clazz = Class.forName(sql); 
    /** 
     * 創(chuàng)建對象1: 通過默認(rèn)構(gòu)造函數(shù)創(chuàng)建(簡寫) 
     */ 
    Admin admin = (Admin) clazz.newInstance(); 
    /** 
     * 創(chuàng)建對象2: 通過無參構(gòu)造器創(chuàng)建對象 
     */ 
    Constructor<&#63;> constructors = clazz.getDeclaredConstructor(); 
    constructors.newInstance(); 
    /** 
     * 創(chuàng)建對象3:通過有參構(gòu)造器創(chuàng)建對象 
     */ 
    Constructor<&#63;> 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<&#63;> clazz = Class.forName(sql); 
     
    Admin admin = (Admin) clazz.newInstance(); 
//   Method[] methods = clazz.getMethods(); 
//   for (Method method : methods) 
//   { 
//     //設(shè)置強(qiáng)制訪問 
//     method.setAccessible(true); 
//     //名稱 
//     String name = method.getName(); 
//     System.out.println(name); 
//      
//   } 
//   Field[] fields = clazz.getFields();//打印出來的結(jié)果只有money 
    Field[] fields = clazz.getDeclaredFields(); 
    for (Field field : fields) 
    { 
      //設(shè)置強(qiáng)制訪問 
      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<&#63;> clazz = Class.forName(sql); 
 
    Admin admin = (Admin) clazz.newInstance(); 
    /* 
     * 獲取方法對象 
     */ 
    Method declaredMethod = clazz.getDeclaredMethod("getId"); 
    /** 
     * 調(diào)用方法 
     */ 
    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、 告訴編譯器如何去運(yùn)行

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.修飾符為默認(rèn)或者public 
   * 2.不能有主體 
   * 3. 如果注解名稱為value,使用的時(shí)候可以省略名稱,直接給值 
   */ 
  String name() default "lqw"; 
  //帶默認(rèn)值得注解 
  int age() default 23; 
  String remark(); 
} 

元注解

元注解就是注解的注解

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

關(guān)于一文帶你了解java中的泛型、反射與注解問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。

網(wǎng)站題目:一文帶你了解java中的泛型、反射與注解
文章地址:http://www.rwnh.cn/article36/pgcgpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、外貿(mào)建站品牌網(wǎng)站制作、關(guān)鍵詞優(yōu)化、軟件開發(fā)、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
马山县| 渭源县| 邢台市| 邵阳市| 酒泉市| 昔阳县| 隆尧县| 婺源县| 明溪县| 梁山县| 玉门市| 信宜市| 兴业县| 毕节市| 昭通市| 科尔| 娱乐| 甘孜县| 潮安县| 天台县| 新昌县| 广东省| 高唐县| 靖远县| 和田市| 木里| 江孜县| 赤峰市| 太原市| 武川县| 喀什市| 师宗县| 六盘水市| 姜堰市| 克拉玛依市| 积石山| 庆云县| 江安县| 太湖县| 牙克石市| 安新县|