`
zhouchaofei2010
  • 浏览: 1104095 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java泛型总结2-2 面试题总结

阅读更多

(改编自网络)

1. Java中的泛型是什么 ? 使用泛型的好处是什么?

 

泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

好处:

 

1、类型安全,提供编译期间的类型检测

2、前后兼容

3、泛化代码,代码可以更多的重复利用

4、性能较高,用GJ(泛型JAVA)编写的代码可以为java编译器和虚拟机带来更多的类型信息,这些信息对java程序做进一步优化提供条件。


 

2. Java的泛型是如何工作的 ? 什么是类型擦除 ?

如何工作:

 

1、类型检查:在生成字节码之前提供类型检查
2、类型擦除:所有类型参数都用他们的限定类型替换,包括类、变量和方法(类型擦除)
3、如果类型擦除和多态性发生了冲突时,则在子类中生成桥方法解决
4、如果调用泛型方法的返回类型被擦除,则在调用该方法时插入强制类型转换

类型擦除:

所有类型参数都用他们的限定类型替换,比如T->Object   ? extends  BaseClass->BaseClass

 

这是一道更好的泛型面试题。泛型是通过类型擦除来实现的,编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息。例如 List<String>在运行时仅用一个List来表示。这样做的目的,是确保能和Java 5之前的版本开发二进制类库进行兼容。你无法在运行时访问到类型参数,因为编译器已经把泛型类型转换成了原始类型。根据你对这个泛型问题的回答情况,你会 得到一些后续提问,比如为什么泛型是由类型擦除来实现的或者给你展示一些会导致编译器出错的错误泛型代码。请阅读我的Java中泛型是如何工作的来了解更 多信息。

3. 什么是泛型中的限定通配符和非限定通配符 ?

有两种限定通配符,一种是<? extends T>它通过确保类型必须是T的子类来设定类型的上界,另一种是<? super T>它通过确保类型必须是T的父类来设定类型的下界。泛型类型必须用限定内的类型来进行初始化,否则会导致编译错误。另一方面<?>表 示了非限定通配符,因为<?>可以用任意类型来替代

4. List<? extends T>和List <? super T>之间有什么区别 ?

 

协变:<? extends T>  协变,协变后不能插入数据
逆变:<? super class>  协变的相反过程,可以插入数据,但不能协变

 

 

5. 如何编写一个泛型方法,让它能接受泛型参数并返回泛型类型?

编写泛型方法并不困难,你需要用泛型类型来替代原始类型,比如使用T, E or K,V等被广泛认可的类型占位符。泛型方法的例子请参阅Java集合类框架。最简单的情况下,一个泛型方法可能会像这样:

public V put(K key, V value) {

return cache.put(key, value);

}

6. Java中如何使用泛型编写带有参数的类?

这是上一道面试题的延伸。面试官可能会要求你用泛型编写一个类型安全的类,而不是编写一个泛型方法。关键仍然是使用泛型类型来代替原始类型,而且要使用JDK中采用的标准占位符。

7. 编写一段泛型程序来实现LRU缓存?

对于喜欢Java编程的人来说这相当于是一次练习。给你个提示,LinkedHashMap可以用来实现固定大小的LRU缓存,当LRU缓存已经满 了的时候,它会把最老的键值对移出缓存。LinkedHashMap提供了一个称为removeEldestEntry()的方法,该方法会被put() 和putAll()调用来删除最老的键值对。当然,如果你已经编写了一个可运行的JUnit测试,你也可以随意编写你自己的实现代码。

8. 你可以把List<String>传递给一个接受List<Object>参数的方法吗?

List<Object> objectList;

List<String> stringList;

objectList = stringList; //compilation error incompatible types

 

9. Array中可以用泛型吗?

 

不可以

 

这可能是Java泛型面试题中最简单的一个了,当然前提是你要知道Array事实上并不支持泛型,这也是为什么Joshua Bloch在Effective Java一书中建议使用List来代替Array,因为List可以提供编译期的类型安全保证,而Array却不能。

10. 如何阻止Java中的类型未检查的警告?

如果你把泛型和原始类型混合起来使用,例如下列代码,Java 5的javac编译器会产生类型未检查的警告,例如

List<String> rawList = new ArrayList()

注意:使用了未检查或称为不安全的操作;

这种警告可以使用@SuppressWarnings(“unchecked”)注解来屏蔽。

 

 

11.Java中List<?>和List<Object>之间的区别是什么?

这道题跟上一道题看起来很像,实质上却完全不同。List<?> 是一个未知类型的List,而List<Object> 其实是任意类型的List。你可以把List<String>, List<Integer>赋值给List<?>,却不能把List<String>赋值给 List<Object>。 

 

 

6
0
分享到:
评论

相关推荐

    Java泛型编程最全总结

    Java泛型是Java编程语言中的一个关键特性,它在2004年随着JDK 5.0的发布被引入,极大地增强了代码的类型安全性和重用性。泛型允许我们在编写类、接口和方法时指定参数化类型,使得代码在编译时期就能捕获类型错误,...

    Java17道面试题及答案

    Java 面试题及答案 Java 是一种广泛使用的编程语言,Java 面试中常见的问题有很多,今天我们来讨论 JDK 和 JRE 的区别、==和 equals 的区别等问题。 JDK 和 JRE 的区别 JDK(Java Development Kit)是 Java 开发...

    10万字总结java面试题和答案(八股文之一)Java面试题指南

    Java集合/泛型面试题 Java异常面试题 Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 Spring面试题 ...

    最新各大公司企业真实面试题-Java面试题

    最后,"Core Javaceshiti.doc"很可能包含了关于Java核心概念的总结,可能涵盖Java SE的主要部分,例如字符串处理、日期时间API、泛型、枚举、Lambda表达式等。 总的来说,这个压缩包为Java开发者提供了一个全面的...

    2020最新Java企业面试题汇总-1000多份.txt

    根据给定文件的信息,我们可以总结出以下相关的Java知识点和面试准备要点: ### 一、Java基础知识 #### 1. Java语言特点 - **面向对象**:封装、继承、多态。 - **平台无关性**:通过JVM实现跨平台运行。 - **自动...

    泛型&通配符常见面试题总结

    本文将深入探讨这两个主题,并提供一些常见的面试题,帮助开发者理解和掌握这些知识点。 首先,我们来理解泛型。泛型是Java 5引入的一项特性,它允许在类、接口和方法中使用类型参数,以实现更强大的类型检查和编译...

    华为java面试题总结

    【华为Java面试题总结】 在Java开发者的眼中,华为无疑是中国IT行业的巨头,其面试流程严谨,技术要求高。这份“华为Java面试题总结”旨在为准备进入华为的Java工程师提供一些关键知识点的梳理和复习指导。以下是对...

    BTA 面试-Java常见面试题及答案.pdf

    本文总结了Java常见面试题及答案,涵盖了Java的基本数据类型、引用类型、运算符、控制结构、异常处理、多线程、集合框架、IO流、反射、泛型、XML解析、设计模式、Java7、8、9、10的新特性等方面的知识点。...

    java后端开发面试题总结

    面试题是评估开发者技能水平的重要工具,以下将根据"java后端开发面试题总结"这一主题,深入探讨相关知识点。 1. **Java基础知识** - **Java语法**:包括类、对象、封装、继承、多态等面向对象编程的基本概念,...

    Java 3本高质量文档--初中高级面试题 .zip

    这3本高质量的文档——"v3.0面试突击版.pdf"、"JAVA核心知识点整理.pdf"以及"10万字总结.pdf"——将为面试者提供全面而深入的学习资源。 首先,"v3.0面试突击版.pdf"可能包含了最新的Java面试趋势和热门问题。这份...

    「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识 准备 Java 面试,首选.zip

    Java 基础常见知识点&面试题总结(上) Java 基础常见知识点&面试题总结(中) Java 基础常见知识点&面试题总结(下) 重要知识点详解 : 为什么 Java 中只有值传递? Java 序列化详解 泛型&通配符详解 Java 反射机制详解...

    八股文知识点汇总——Java面试题指南

    【Java OOP面试题】 Java面向对象编程(OOP)是Java的核心概念,它将现实世界中的事物抽象为类,然后通过实例化类来创建对象。类是对象的模板,包含了属性(成员变量)和行为(方法)。对象是类的具体表现,是类的...

    【大厂面试题总结】JavaSE面试题总结详细教程

    【大厂面试题总结】JavaSE面试题总结详细教程: 目录: 递归算法之输出某个目录下所有文件和子目录列表 泛型中extends和super的区别 内部类的理解 深入理解Java的反射机制 深入理解Java异常体系 谈谈NIO的理解 谈一...

    Java面试题总结实用知识库分享

    【Java面试题总结实用知识库分享】 在Java面试中,面试官通常会考察候选人的基础知识、面向对象编程的理解、JVM工作原理、异常处理、集合框架、IO/NIO、多线程、数据库交互以及框架应用等多个方面。以下是对这些...

    「Java学习+面试指南」部分内容大部分是Java程序员所需要掌握的核心知识

    Java序列化详解泛型&通配符详解Java 引用机制详解Java代理模式详解BigDecimal 详细解Java 魔法类 Unsafe 详细解Java SPI 机制详解Java语法糖详解集合知识点/面试题总结:Java集合常见知识点&面试题总结(上)(必看...

    笔试面试题国内知名公司

    - `java面试题[基础类].txt` 和 `java面试题总结_基础篇.txt` 这两个文件可能包含了Java语言的基础概念,如: - 基本数据类型、变量、常量 - 运算符和表达式 - 流程控制(if、switch、for、while) - 函数...

    免费开源-【Java学习+面试指南】部分内容大部分是Java程序员所需要掌握的核心知识

    Java序列化详解泛型&通配符详解Java 引用机制详解Java代理模式详解BigDecimal 详细解Java 魔法类 Unsafe 详细解Java SPI 机制详解Java语法糖详解集合知识点/面试题总结:Java集合常见知识点&面试题总结(上)(必看...

    java面试题总结

    ### Java面试题总结知识点 #### 1. J2EE是什么? - **定义**:J2EE(Java 2 Platform, Enterprise Edition)是一个基于Java SE平台的企业级应用开发平台标准,由Sun Microsystems制定。 - **组成**:J2EE平台包含...

    「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识

    Java 基础常见知识点&面试题总结(上) Java 基础常见知识点&面试题总结(中) Java 基础常见知识点&面试题总结(下) 重要知识点详解: 为什么 Java 中只有值传递? Java 序列化详解 泛型&通配符详解 Java 反射机制详解 ...

    java试题 java笔试题 java面试题

    本资源摘要信息中,我们将对 Java 相关试题、笔试题和面试题进行总结和分析,涵盖了 XML 解析技术、Struts 框架、ArrayList 和 Vector 的区别、HashMap 和 Hashtable 的区别、JDK 1.5 和 1.6 新特性、Hibernate 工作...

Global site tag (gtag.js) - Google Analytics