1. 程式人生 > >JAVA泛型筆試面試總結

JAVA泛型筆試面試總結

用途

資料結構型別的引數化

產生根源

例如在使用集合框架的時候,Vector裡可以新增各種型別,
v.add(new Person("tom",20))
Person p = (Person)v.elementAt(0)
如此使用,到處都需要強制轉換。如果出現異常只能在執行時才會丟擲。

集合中的泛型

例如Vector<String> v = new Vector<String>(); 
這裡的<String>是實際型別引數,限定了v中新增的都是String.

泛型類

例如:
Person<T>{
private T secret;
}
可以衍生出不同的型別。例如
Person o = Person<Object>();
Person s = Person<String>();
但他們之間並不存在繼承關係。
MAP中常用K V。LIST中用E 代表元素。泛型類中用T

泛型方法

例如為了限定某個方法的兩個引數型別一致,可以用:
public <T> T evaluate(T a,T b)
也可以將T定義在泛型類中。

萬用字元

例如現在寫一個方法,來遍歷一些不同型別的泛型例項,
public overview(Vector<String> v)
如果將實際型別引數加入,則不能通用。
public overview(Vector v)
去掉實際型別引數,是一種方法。這種情況,在方法體里加入 
v.add(new String("aaa"))
v.add(new Integer(5))
都不會出錯,可能在執行時會產生錯誤,這就破壞了型別安全性限制,使泛型的限制

並沒有在編譯時發現錯誤。


引入萬用字元,public overview(Vector<?> v)
與public overview(Vector v)有什麼區別呢?
主要是引入萬用字元後,Vector<?>型別的變數在呼叫的時候是受到限制的,凡是必須

知道具體型別引數才能進行的操作會被禁止。
例如
Vector<String> vs = new Vector<String>();
vs.add("TOM");
Vector<?> v = vs;
v.add("BILL");//非法操作
Object o = v.elementAt(0)//合法

受限型別

例如:Person<T extends Number>
限制更嚴格一點,要求泛型必須繼承Number

同樣萬用字元也可以用於

限制

基本型別不能用於泛型 例如 List<int> a 這種,是會報錯的,Syntax error on token "int", Dimensions expected after this token

習題

1.
QUESTION NO: 70
Given:
11. // insert code here
12. private N min, max;
13. public N getMin() { return min; }
14. public N getMax() { return max; }
15. public void add(N added) {
16. if (min == null || added.doubleValue() < min.doubleValue())
17. min = added;
18. if (max == null || added.doubleValue() > max.doubleValue())
19. max = added;
20. }
21. }
Which two, inserted at line 11, will allow the code to compile? (Choose two.)
A. public class MinMax<?> {
B. public class MinMax<? extends Number> {
C. public class MinMax<N extends Object> {
D. public class MinMax<N extends Number> {
E. public class MinMax<? extends Object> {
F. public class MinMax<N extends Integer> {
解答,看A,B,E顯然不對,因為都用了?,程式碼裡的N就沒有來源了 C,如果受限型別extends Object,那就沒有doubleValue()方法。 答案是 D F 2.
<p align="left"><strong>QUESTION NO: 71</strong></p>Given:
3. import java.util.*;
4. public class G1 {
5. public void takeList(List<? extends String> list) {
6. // insert code here
7. }
8. }
Which three code fragments, inserted independently at line 6, will compile? (Choose three.)
A. list.add("foo");
B. Object o = list;
C. String s = list.get(0);
D. list = new ArrayList<String>();
E. list = new ArrayList<Object>();
用萬用字元後,那些必須知道型別才能進行的操作就被禁止了,比如add,因此A不對
答案是 BCD

相關推薦

JAVA筆試面試總結

用途 資料結構型別的引數化產生根源 例如在使用集合框架的時候,Vector裡可以新增各種型別, v.add(new Person("tom",20)) Person p = (Person)v.elementAt(0) 如此使用,到處都需要強制轉換。如果出現異常只能在執行時

Java總結之一

oid ring 結果 dem resolv poi error lan 類型轉換 1、使用泛型,有利於降低代碼的耦合; 2、泛型可以解決數據類型的安全問題,可以有效避免類型轉換異常(ClassCastException)的發生,使程序操作更加安全; 3、 1 clas

Java 總結

類型 三種 obj java nds java 泛型 代碼 編譯 試圖 泛型總結:   1. 泛型具有參數化類型的能力. 可以定義使用泛型類型的類或方法, 編譯器會用具體類型來替換泛型類型.   2. 泛型的主要優勢是能夠在編譯時而不是運行時檢測錯誤.   3.

Java總結篇系列:Java

ech internal clone 傳遞 sta 是什麽 dom bar 依然 一. 泛型概念的提出(為什麽需要泛型)? 首先,我們看下下面這段簡短的代碼: 1 public class GenericTest { 2 3 public static

java基礎學習總結(九):深入理解Java

一、什麼是泛型         “泛型” 意味著編寫的程式碼可以被不同型別的物件所重用。泛型的提出是為了編寫重用性更好的程式碼。泛型的本質是引數化型別,也就是說所操作的資料型別被指定為一個引數。 比如常見的集合類 LinkedList: publi

java學習總結

1.泛型在集合中的使用(掌握) 2.自定義泛型類、泛型介面、泛型方法(理解 --->使用) 3.泛型與繼承的關係 4.萬用字元 1.在集合中不使用泛型 public void test1(){     List list = new ArrayList()

corajava--簡單總結java的應用

原文以及參考部落格: 泛型的定義 按照百度百科的介紹,泛型是Java SE 1.5的新增特性,泛型的本質是引數化型別,也就是說所操作的資料型別被指定為一個引數。這種引數型別可以用在類、介面和方法的建立中,分別稱為泛型類、泛型介面、泛型方法。泛型是具有佔位符(型別引數)

Java 總結(三):萬用字元的使用

簡介 前兩篇文章介紹了泛型的基本用法、型別擦除以及泛型陣列。在泛型的使用中,還有個重要的東西叫萬用字元,本文介紹萬用字元的使用。 這個系列的另外兩篇文章: Java 泛型總結(一):基本用法與型別擦除 Java 泛型總結(二):泛型與陣列 陣列的協變 在瞭解萬用字

java筆試+面試總結——web篇

1、forward和redirect的區別 1.從位址列顯示來說 forward是伺服器請求資源,伺服器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器.瀏覽器根本不知道伺服器傳送的內容從哪裡來的,所以它的位址列還是原來的

java知識點總結

1.泛型的基本應用泛型可以解決資料型別的安全性問題,其主要原理是在類宣告時通過一個標識表示類中某個屬性的型別或者是某個方法的返回值及引數型別。這樣在類宣告或者例項化時只要指定好需要的型別即可。[訪問許可權] class 類名稱 <泛型型別標識1,泛型型別標識2,...

java筆試+面試總結(大綱)

originale blog:here 一、java基礎 1、給一段java程式寫出程式的輸出結果(考點:類的執行順序,賦值順序,繼承) 2、Java執行過程 3、final/static關鍵字 4、Java synchronized實現機制

三句話總結JAVA萬用字元(PECS)

在JAVA的泛型集合中,預設都可以新增null,除此以外,還有以下三條規則。 1. “?”不能新增元素 以“?”宣告的集合,不能往此集合中新增元素,所以它只能作為生產者(亦即它只能被迭代),如下: List<?> names = Lis

Java相關總結(下)

數組類 urn gpa ply 可變參數 function 這樣的 ava manage 約束與局限性 不能用基本類型實例化類型參數 不能像Pair<double>這樣調用,只能Pair<Double>,原因是類型擦除 運行時類型查詢只使用於原

Java總結

Java併發 程序 程序是程式的一次執行過程,是系統執行程式的基本單位,因此程序是動態的。系統執行一個程式即是一個程序從建立,執行到消亡的過程。 在 Java 中,當我們啟動 main 函式時其實就是啟動了一個 JVM 的程序,而 main 函式所在的執行緒就是這個程序中的一個執行緒,也稱主執行緒。 執行緒

Java筆試面試總結—try、catch、finally語句中有return 的各類情況

### 前言 之前在刷筆試題和麵試的時候經常會遇到或者被問到 **try-catch-finally** 語法塊的執行順序等問題,今天就抽空整理了一下這個知識點,然後記錄下來。 ### 正文 本篇文章主要是通過舉例的方式來闡述各種情況,我這裡根據 try-catch-finally 語法塊分為兩種大情

Java擦除

類型信息 png ive over tool 創建 edit sid 註意點 Java泛型擦除: 什麽是泛型擦除? 首先了解一下什麽是泛型?我個人的理解:因為集合中能夠存儲隨意類型的對象。可是集合中最先存儲的對象類型一旦確定後,就不能在存儲其它類型的

Java

object java 信息 1、泛型的由來  我們先看下面這段代碼:1234567891011121314 List list = new ArrayList();list.add(24); //向集合中添加一個 Integer 類型的數據list.add("Tom");

Java,通配符和C#對照

size list ack ace arr 類型通配符 語法 ++ net c#的泛型沒有類型通配符,原因是.net的泛型是CLR支持的泛型,而Java的JVM並不支持泛型,僅僅是語法糖,在編譯器編譯的時候都轉換成object類型 類型通配符在java中表示的是泛型

Java詳解

對象數組 整形 泛型方法 tty 接受 一個 div -m color 泛型的本質是參數化類型,也就是說所操作的數據類型被指定為一個參數。 假定我們有這樣一個需求:寫一個排序方法,能夠對整形數組、字符串數組甚至其他任何類型的數組進行排序,該如何實現? 答案是可以使用 Ja

JAVA(轉)

強制 off 實例 emp 思想 void 成了 意義 依然 一. 泛型概念的提出(為什麽需要泛型)? 首先,我們看下下面這段簡短的代碼: 1 public class GenericTest { 2 3 public static void