【Android面试八股文】你能说说什么是泛型以及泛型擦除吗?

本文详细探讨了Java中的泛型及其用途,强调了泛型在保证类型安全、提升代码可读性方面的优势。同时,解释了泛型擦除的概念,包括类型擦除后只会保留原始类型,以及擦除带来的各种问题,如类型检查异常、自动类型转换问题等。文章还讨论了泛型使用中的一些限制,如不能创建泛型类型数组、不能实例化泛型类型等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

你能说说什么是泛型以及泛型擦除吗?

一.什么是泛型

泛型(Generics)是Java SE 5中引入的一个新特性,可以使Java中的类和方法具有更广泛的类型范围

通俗的说,它使得我们可以在定义类和方法时指定一个或多个类型参数,从而可以在不考虑具体类型的情况下,代码中直接使用这些类型参数。泛型可以增强代码的安全性、可读性和可重用性

例如,可以使用泛型实现容器类(如ArrayList、HashMap)等。在使用泛型时,需要在编写代码时指定泛型类型,这样可以在编译期间检查代码的类型安全性。

二.Java中为什么要使用泛型

为什么要使用泛型:

  1. 保证类型安全,进行编译期错误检查,使代码具有更好的安全性和可读性。
  2. 不需要进行类型强制转换。

如下程序,如果不使用泛型前,强转结果很容易出错:

import 
### Java基础知识总结及常见面试问题 #### 1. Java基础概念 Java是一种面向对象的编程语言,支持跨平台运行。其设计目标是简单易学、健壮可靠、高性能以及可移植性强。Java程序通过编译器转换成字节码文件(`.class`),这些字节码可以在任何安装了Java虚拟机(JVM)的设备上执行。 - **基本数据类** Java提供了8种基本数据类,分别是:byte、short、int、long、float、double、char 和 boolean[^2]。 - **面向对象特性** Java完全基于面向对象的思想构建,支持封装、继承和多态三大特性。类是Java中的核心结构单元,用于描述现实世界中的实体及其行为[^3]。 --- #### 2. 常见Java基础知识点 ##### (1) equals() 方法与 hashCode() - `equals()` 是 Object 类的一个方法,默认情况下它比较的是两个对象的内存地址。如果希望按值比较,则需要重写该方法。 - `hashCode()` 返回一个整数作为哈希表中的索引位置。当重写 `equals()` 方法时,也需要同步重写 `hashCode()` 方法以保持一致性[^4]。 ```java @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; MyClass myClass = (MyClass) obj; return value == myClass.value && Objects.equals(name, myClass.name); } @Override public int hashCode() { return Objects.hash(value, name); } ``` ##### (2) (Generics) 允许开发者编写能够处理多种类的通用算法或容器。它的主要优点在于提高了代码的安全性和灵活性。需要注意的是,由于类擦除的存在,在运行时无法保留具体的类信息[^3]。 ```java List<String> list = new ArrayList<>(); list.add("Hello"); String item = list.get(0); // 编译期检查确保类安全 ``` ##### (3) 枚举(Enum) 枚举类用来表示一组固定的常量集合。它可以像普通类一样定义属性和方法,并且还支持实现接口的功能。 ```java enum Status { ACTIVE, INACTIVE; public String getDescription() { switch(this) { case ACTIVE: return "Active"; default: return "Inactive"; } } } ``` ##### (4) 集合框架(Collections Framework) Java 提供了一套丰富的集合类来存储和管理对象组。主要包括 List、Set 和 Map 接口及其具体实现类。 | 接口 | 实现类 | |------------|----------------------------| | List | ArrayList, LinkedList | | Set | HashSet, TreeSet | | Queue | PriorityQueue | | Map | HashMap, TreeMap, LinkedHashMap | --- #### 3. 常见Java面试题 以下是针对初学者的一些典面试题目: 1. **什么是 JVM?** JVM 是 Java 虚拟机的缩写,负责加载并解释 `.class` 文件的内容到操作系统层面的操作指令。它由类加载器、运行时数据区、执行引擎等部分组成[^1]。 2. **谈谈垃圾回收机制(Garbage Collection)。** GC 的作用是从堆内存中自动清理不再使用的对象占用的空间,从而减少手动管理资源的工作负担。常见的收集策略有标记清除法、复制法、分代收集法等。 3. **final 关键字的作用有哪些?** final 可修饰变量、方法或者整个类。对于变量而言意味着一旦初始化就不能再改变;应用于方法时表示子类不可覆盖此方法;而对于类来说则表明此类不允许被继承[^2]。 4. **线程之间如何通信?** 主要方式包括等待/通知模式 (`wait()/notify()`) 或者信号灯锁机制 (`LockSupport.park/unpark`) 来协调多个线程之间的交互过程。 5. **异常处理的基本原则是什么?** 应遵循捕获最接近错误源头的地方的原则,同时区分受检异常(Checked Exception)和非受检异常(Unchecked Exception),合理利用 try-catch-finally 结构保护关键逻辑流程[^2]。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

字节卷动

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值