zoukankan      html  css  js  c++  java
  • [006]

    第一期:Java面试 - 100题,梳理各大网站优秀面试题。大家可以跟着我一起来刷刷Java理论知识

    [006] - JavaSE面试题(六):泛型

    第1问:什么是泛型?

    Java泛型( generics)是JDK 5中引⼊的⼀个新特性, 允许在定义类和接口的时候使⽤类型参数( type parameter) 。

    声明的类型参数在使⽤时⽤具体的类型来替换。泛型最主要的应⽤是在JDK 5中的新集合类框架中。

    泛型最⼤的好处是可以提⾼代码的复⽤性。以List接口为例,我们可以将String、 Integer等类型放⼊List中, 如不⽤泛型, 存放String类型要写⼀个List接口, 存放Integer要写另外⼀个List接口, 泛型可以很好的解决这个问题。

    第2问:什么是类型擦除?

    通过类型参数合并,将泛型类型实例关联到同一份字节码上。

    编译器只为泛型类型生成一份字节码,并将其实例关联到这份字节码上。

    泛型是通过类型擦除来实现的,编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息。例如 List在运行时仅用一个List来表示。这样做的目的,是确保能和Java 5之前的版本开发二进制类库进行兼容。你无法在运行时访问到类型参数,因为编译器已经把泛型类型转换成了原始类型。

    类型擦除的主要过程如下:

    • 将所有的泛型参数用其最左边界(最顶级的父类型)类型替换。
    • 移除所有的类型参数。

    第3问:List<?> 和List<Object>的区别?

    List 是一个未知类型的List,而List 其实是任意类型的List。

    可以把List, List赋值给List,却不能把List赋值给 List。

    第4问:什么是泛型中的限定通配符和非限定通配符 ?

    限定通配符:

    对类型进行了限制。有两种限定通配符:

    • 一种是 它通过确保类型必须是T的子类来设定类型的上界
    • 另一种是它通过确保类型必须是T的父类来设定类型的下界。泛型类型必须用限定内的类型来进行初始化,否则会导致编译错误。

    非限定通配符:

    表示了非限定通配符,因为可以用任意类型来替代。

    第5问:泛型中K T V E ?object等的含义 ?

    E - Element (在集合中使用,因为集合中存放的是元素)

    T - Type(Java 类)

    K - Key(键)

    V - Value(值)

    N - Number(数值类型)

    ?- 表示不确定的java类型(无限制通配符类型)

    Object - 是所有类的根类,任何类的对象都可以设置给该Object引用变量,使用的时候可能需要类型强制转换,但是用使用了泛型T、E等这些标识符后,在实际用之前类型就已经确定了,不需要再进行类型强制转换。

  • 相关阅读:
    zookeeper
    消息中间件介绍
    Java实现动态代理的两种方式
    深入理解Java内存模型
    消息中间件(一)MQ详解及四大MQ比较
    synchronized关键字详解及分析锁升级过程
    JDK1.6的Synchronized底层优化(偏向锁、轻量级锁)
    分布式通信-tcp/ip socket
    技术点
    大众点评 cat
  • 原文地址:https://www.cnblogs.com/liuyangjava/p/13692044.html
Copyright © 2011-2022 走看看