亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

Java知識(shí)點(diǎn)總結(jié)(Java泛型)

linkin / 3169人閱讀

摘要:知識(shí)點(diǎn)總結(jié)泛型知識(shí)點(diǎn)總結(jié)泛型泛型泛型就是參數(shù)化類(lèi)型適用于多種數(shù)據(jù)類(lèi)型執(zhí)行相同的代碼泛型中的類(lèi)型在使用時(shí)指定泛型歸根到底就是模版優(yōu)點(diǎn)使用泛型時(shí),在實(shí)際使用之前類(lèi)型就已經(jīng)確定了,不需要強(qiáng)制類(lèi)型轉(zhuǎn)換。

Java知識(shí)點(diǎn)總結(jié)(Java泛型)

@(Java知識(shí)點(diǎn)總結(jié))[Java, Java泛型]

[toc]

泛型

泛型就是參數(shù)化類(lèi)型

適用于多種數(shù)據(jù)類(lèi)型執(zhí)行相同的代碼

泛型中的類(lèi)型在使用時(shí)指定

泛型歸根到底就是“模版”

優(yōu)點(diǎn):使用泛型時(shí),在實(shí)際使用之前類(lèi)型就已經(jīng)確定了,不需要強(qiáng)制類(lèi)型轉(zhuǎn)換。

泛型主要使用在集合中

import java.util.ArrayList;
import java.util.List;
 
public class Demo01 {
  
  // 不使用泛型,存取數(shù)據(jù)麻煩
  public static void test1(){
    List  list = new ArrayList();
    list.add(100);
    list.add("zhang");
    /*
     * 從集合中獲取的數(shù)據(jù)是Object類(lèi)型,Object類(lèi)型是所有類(lèi)型的根類(lèi),但是在具體使用的時(shí)候需要
     * 類(lèi)型檢查,類(lèi)型轉(zhuǎn)化,處理類(lèi)型轉(zhuǎn)化異常
     * 使用麻煩
     */
    Object o = list.get(1);
    if (o instanceof String) {
     String s = (String)o;
    }
    System.out.println(o);
  }
  
  // 使用泛型
  public static void test2(){
    List list = new ArrayList();
    //list.add(100); 放數(shù)據(jù)時(shí)安全檢查,100不是String類(lèi)型,不能存放
    list.add("存數(shù)據(jù)安全,取數(shù)據(jù)省心");
    String s = list.get(0); //取出來(lái)的數(shù)據(jù)直接就是泛型規(guī)定的類(lèi)型
    System.out.println(s);
    
  }
  
  public static void main(String[] args) {
    test1();
    test2();
  }
 
}
自定義泛型 泛型字母

形式類(lèi)型參數(shù)(formal type parameters)即泛型字母

命名泛型字母可以隨意指定,盡量使用單個(gè)的大寫(xiě)字母(有時(shí)候多個(gè)泛型類(lèi)型時(shí)會(huì)加上數(shù)字,比如T1,T2)
常見(jiàn)字母(見(jiàn)名知意)

T Type

K V Key Value

E Element

當(dāng)類(lèi)被使用時(shí),會(huì)使用具體的實(shí)際類(lèi)型參數(shù)(actual type argument)代替

泛型類(lèi)

只能用在成員變量上,只能使用引用類(lèi)型

泛型接口

只能用在抽象方法上

泛型方法

返回值前面加上 <T>


/**
 * 自定義泛型類(lèi)
 *
 * 定義"模版"的時(shí)候,泛型用泛型字母:T 代替
 * 在使用的時(shí)候指定實(shí)際類(lèi)型
 *
 * @author Administrator
 * @param 
 */
public class Student {
  
  private T javase;
  
  //private static T javaee;   // 泛型不能使用在靜態(tài)屬性上
 
  public Student() {
  }
 
  public Student(T javase) {
    this();
    this.javase = javase;
  }
 
  public T getJavase() {
    return javase;
  }
 
  public void setJavase(T javase) {
    this.javase = javase;
  }
  
}
/**
 * 自定義泛型的使用
 * 在聲明時(shí)指定具體的類(lèi)型
 * 不能為基本類(lèi)型
 * @author Administrator
 *
 */
class Demo02 {
  public static void main(String[] args) {
    //Student  Student = new Student(); //不能為基本類(lèi)型,編譯時(shí)異常
    
    Student student = new Student();
    student.setJavase(85);
    System.out.println(student.getJavase());  
  }
}


/**
 * 自定義泛型接口
 *
 * 接口中泛型字母只能使用在方法中,不能使用在全局常量中
 *
 * @author Administrator
 * @param 
 */
public interface Comparator {
  
  //public static final T1 MAX_VALUE = 100; //接口中泛型字母不能使用在全局常量中
  //T1 MAX_VALUE;
  public static final int MAX_VALUE = 100;
  
  void compare(T2 t);
  T2 compare();
  public abstract T1 compare2(T2 t);
}


import java.io.Closeable;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.List;
 
 
/**
 * 非泛型類(lèi)中定義泛型方法
 * @author Administrator
 *
 */
public class Method {
 
  // 泛型方法,在返回類(lèi)型前面使用泛型字母
  public static  void test1(T t){
    System.out.println(t);
  }
  
  // T 只能是list 或者list 的子類(lèi)
  public static  void test2(T t){
    t.add("aa");
  }
  
  // T... 可變參數(shù)   --->   T[]
  public static  void test3(T...a) {
    for (T temp : a) {
     try {
       if (null != temp) {
         temp.close();
       }
     } catch (Exception e) {
       e.printStackTrace();
     }
     
    }
  }
  
  public static void main(String[] args) throws FileNotFoundException {
    test1("java 是門(mén)好語(yǔ)言");
    test3(new FileInputStream("a.txt"));
  }
}

泛型的繼承
/**
 * 泛型繼承
 *
 * 保留父類(lèi)泛型 ----》泛型子類(lèi) 
 * 不保留父類(lèi)泛型 -----》子類(lèi)按需實(shí)現(xiàn)
 *
 * 子類(lèi)重寫(xiě)父類(lèi)的方法,泛型類(lèi)型隨父類(lèi)而定 子類(lèi)使用父類(lèi)的屬性,該屬性類(lèi)型隨父類(lèi)定義的泛型
 *
 * @author Administrator
 *
 * @param 
 * @param 
 */
public abstract class Father {
  T1 age;
 
  public abstract void test(T2 name);
}
 
// 保留父類(lèi)泛型 ----》泛型子類(lèi)
// 1)全部保留
class C1 extends Father {
 
  @Override
  public void test(T2 name) {
 
  }
}
 
// 2) 部分保留
class C2 extends Father {
 
  @Override
  public void test(Integer name) {
 
  }
}
 
// 不保留父類(lèi)泛型 -----》子類(lèi)按需實(shí)現(xiàn)
// 1)具體類(lèi)型
class C3 extends Father {
 
  @Override
  public void test(Integer name) {
 
  }
}
 
// 2)沒(méi)有具體類(lèi)型
// 泛型擦除:實(shí)現(xiàn)或繼承父類(lèi)的子類(lèi),沒(méi)有指定類(lèi)型,類(lèi)似于Object
class C4 extends Father {
 
  @Override
  public void test(Object name) {
 
  }
 
}


/**
 * 泛型擦除
 * 類(lèi)似于Object,不等于Object
 * @author Administrator
 *
 */
public class Demo03 {
  
  public static void test(Student student){
    student.setJavase(100);
  }
  
  public static void main(String[] args) {
    // 泛型擦除
    Student student = new Student();
    test(student);
    
    Student student2 = new Student();
    //test(student2);  //編譯異常
  }
 
}
 

通配符

通配符(Wildcards)

T、K、V、E 等泛型字母為有類(lèi)型,類(lèi)型參數(shù)賦予具體的值

?未知類(lèi)型 類(lèi)型參數(shù)賦予不確定值,任意類(lèi)型

只能用在聲明類(lèi)型、方法參數(shù)上,不能用在定義泛型類(lèi)上

/**
 * 泛型的通配符 類(lèi)型不確定,用于聲明變量或者形參上面
 *
 * 不能使用在類(lèi)上 或者  new 創(chuàng)建對(duì)象上
 * @author Administrator
 *
 */
public class Demo04 {
 
  // 用在形參上
  public static void test(List list) {
 
   List list2; // 用在聲明變量上
   list2 = new ArrayList();
   list2 = new ArrayList();
   list2 = new ArrayList();
 
  }
 
  public static void main(String[] args) {
   test(new ArrayList());
   test(new ArrayList());
  }
 
}


extends/super
上限(extends)

指定的類(lèi)必須是繼承某個(gè)類(lèi),或者實(shí)現(xiàn)了某個(gè)接口(不是implements),即<=

? extends List

下限(super)

即父類(lèi)或本身

? super List

import java.util.ArrayList;
import java.util.List;

/**
 * extends:泛型的上限 <= 一般用于限制操作 不能使用在添加數(shù)據(jù)上,一般都是用于數(shù)據(jù)的讀取
 *
 * supper:泛型的上限 >= 即父類(lèi)或自身。一般用于下限操作
 *
 * @author Administrator
 * @param 
 */
 
public class Test {
 
  private static void test01() {
    Test t1 = new Test();
    Test t2 = new Test();
    Test t3 = new Test();
  }
 
  private static void test02(List list) {
 
  }
 
  private static void test03(List list) {
 
  }
 
  public static void main(String[] args) {
 
    // 調(diào)用test02(),測(cè)試 extends  <=
    test02(new ArrayList());
    test02(new ArrayList());
    test02(new ArrayList());
    // test02(new ArrayList()); Object 不是 Fruit 的子類(lèi) ,編譯不通過(guò)
    
    
    // 調(diào)用test03() ,測(cè)試super >=
    test03(new ArrayList());
    test03(new ArrayList());
    //test03(new ArrayList());  ReadApple < apple,所以不能放入
  }
 
}
 
class Fruit {
 
}
 
class Apple extends Fruit {
 
}
 
class Pear extends Fruit {
 
}
 
class ReadApple extends Apple {
 
}
        

泛型嵌套

從外向里取

import java.util.Map.Entry;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
 
/**
 * 泛型嵌套
 * @author Administrator
 *
 */
public class Demo05 {
 
  
  public static void main(String[] args) {
    Student2 student = new Student2();
    student.setScore("優(yōu)秀");
    System.out.println(student.getScore());
    
    //泛型嵌套
    School> school = new School>();
    school.setStu(student);
    
    String s = school.getStu().getScore(); //從外向里取
    System.out.println(s);
    
    // hashmap 使用了泛型的嵌套
    Map map =  new HashMap();
    map.put("a", "張三");
    map.put("b", "李四");
    Set> set = map.entrySet();
    for (Entry entry : set) {
     System.out.println(entry.getKey()+":"+entry.getValue());
    }
    
  }
}


 public class School {
  private T stu;
 
  public T getStu() {
    return stu;
  }
 
  public void setStu(T stu) {
    this.stu = stu;
  }
  
}


 public class Student2 {
  T score;
 
  public T getScore() {
    return score;
  }
 
  public void setScore(T score) {
    this.score = score;
  }
}

其他
 import java.util.ArrayList;
import java.util.List;
 
/**
 * 泛型沒(méi)有多態(tài)
 * 泛型沒(méi)有數(shù)組
 * JDK1.7對(duì)泛型的簡(jiǎn)化
 * @author Administrator
 *
 */
public class Demo06 {
 
  public static void main(String[] args) {
    Fruit fruit = new Apple();  // 多態(tài),父類(lèi)的引用指向子類(lèi)的對(duì)象
    //List list = new ArrayList(); //泛型沒(méi)有多態(tài) 
    List list = new ArrayList();
    
    //泛型沒(méi)有數(shù)組
    //Fruit[] fruits = new Fruit[10];
    
    //ArrayList底層是一個(gè)Object[],它放數(shù)據(jù)的時(shí)候直接放,取數(shù)據(jù)的時(shí)候強(qiáng)制類(lèi)型轉(zhuǎn)化為泛型類(lèi)型
    /*public boolean add(E e) {
          ensureCapacityInternal(size + 1);  // Increments modCount!!
          elementData[size++] = e;
          return true;
      }*/
    
    /*E elementData(int index) {
          return (E) elementData[index];
      }*/
 
    
    //JDK1.7泛型的簡(jiǎn)化,1.6編譯通不過(guò)
    List list2 = new ArrayList<>();
  }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/69360.html

相關(guān)文章

  • Java識(shí)點(diǎn)總結(jié)(反射-反射操作泛型

    摘要:知識(shí)點(diǎn)總結(jié)反射反射操作泛型知識(shí)點(diǎn)總結(jié)反射采用泛型擦除的機(jī)制來(lái)引入泛型。中的泛型僅僅是給編譯器使用的,確保數(shù)據(jù)的安全性和免去強(qiáng)制類(lèi)型轉(zhuǎn)換的麻煩。 Java知識(shí)點(diǎn)總結(jié)(反射-反射操作泛型) @(Java知識(shí)點(diǎn)總結(jié))[Java, 反射] Java采用泛型擦除的機(jī)制來(lái)引入泛型。Java中的泛型僅僅是給編譯器javac使用的, 確保數(shù)據(jù)的安全性和免去強(qiáng)制類(lèi)型轉(zhuǎn)換的麻煩 。但是,__一旦編譯完成,...

    AprilJ 評(píng)論0 收藏0
  • Java開(kāi)發(fā)

    摘要:大多數(shù)待遇豐厚的開(kāi)發(fā)職位都要求開(kāi)發(fā)者精通多線程技術(shù)并且有豐富的程序開(kāi)發(fā)調(diào)試優(yōu)化經(jīng)驗(yàn),所以線程相關(guān)的問(wèn)題在面試中經(jīng)常會(huì)被提到。將對(duì)象編碼為字節(jié)流稱(chēng)之為序列化,反之將字節(jié)流重建成對(duì)象稱(chēng)之為反序列化。 JVM 內(nèi)存溢出實(shí)例 - 實(shí)戰(zhàn) JVM(二) 介紹 JVM 內(nèi)存溢出產(chǎn)生情況分析 Java - 注解詳解 詳細(xì)介紹 Java 注解的使用,有利于學(xué)習(xí)編譯時(shí)注解 Java 程序員快速上手 Kot...

    LuDongWei 評(píng)論0 收藏0
  • java基礎(chǔ)鞏固-泛型基礎(chǔ)知識(shí)整理

    摘要:當(dāng)某個(gè)類(lèi)型變量只在整個(gè)參數(shù)列表的所有參數(shù)和返回值中的一處被應(yīng)用了,那么根據(jù)調(diào)用方法時(shí)該處的實(shí)際應(yīng)用類(lèi)型來(lái)確定。即直接根據(jù)調(diào)用方法時(shí)傳遞的參數(shù)類(lèi)型或返回值來(lái)決定泛型參數(shù)的類(lèi)型。 標(biāo)簽: java [TOC] 本文對(duì)泛型的基本知識(shí)進(jìn)行較為全面的總結(jié),并附上簡(jiǎn)短的代碼實(shí)例,加深記憶。 泛型 將集合中的元素限定為一個(gè)特定的類(lèi)型。 術(shù)語(yǔ) ArrayList -- 泛型類(lèi)型 ArrayLis...

    KoreyLee 評(píng)論0 收藏0
  • Java 集合框架

    摘要:基礎(chǔ)部分集合框架接口接口泛型所有集合類(lèi)都位于包下。集合框架的知識(shí)總結(jié)集合框架總結(jié)接口的使用集合框架總結(jié)類(lèi)的排序問(wèn)題聲明常量的兩種方法遍歷的四種方法泛型當(dāng)我們把一個(gè)對(duì)象放入集合中后,系統(tǒng)會(huì)把所有集合元素都當(dāng)成類(lèi)的實(shí)例進(jìn)行處理。 Java 基礎(chǔ)部分——集合框架 Collection 接口 Map 接口 泛型 所有集合類(lèi)都位于java.util包下。集合中只能保存對(duì)象(保存對(duì)象的...

    Flink_China 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<