面试军火库-花琪尧.pdf
Java基础知识点总结 本文总结了 Java 基础知识点,包括 final 关键字的作用、ArrayList、Vector、LinkedList 的存储性能和特性、内存泄漏和内存溢出解决方案等。 1. final 关键字的作用 final 关键字是 Java 语言中的一个保留字,它有多种用途。被 final 修饰的类、方法、成员变量分别具有不同的特性。 * 被 final 修饰的类为最终类,该类不会被继承。 * 被 final 修饰的方法为最终方法,该方法虽然可以被继承,但是不能被重写。 * 被 final 修饰的成员变量必须要赋初值,赋初值的方式有两种:第一种在定义成员变量的时候赋初值,第二种,给与该成员变量相应的构造方法。 * 被 final 修饰的成员变量有且只能赋值一次。 * 被 final 修饰的引用类型的变量,其在栈中的引用不可改变,但是其在堆中的内容可以改变,因为其堆中的内容并未用 final 修饰。 * 被 final 修饰的常量在编译阶段会存入常量池中。 2.ArrayList、Vector、LinkedList 的存储性能和特性 ArrayList、Vector、LinkedList 是 Java 语言中三种常用的集合类,它们的存储性能和特性如下: * ArrayList 底层为 Object 数组,默认大小为 10,当容量不足会进行扩容,扩容的过程为先扩容到原来大小的 1.5 倍,然后和目前所需的容量相比较,如果够就扩容为原来的 1.5 倍,不够就按照所需要的容量进行扩容。ArrayList 具有随机索引的特点,其查找效率非常快,但是同样因为其为数组,所以其对元素的增加删除操作效率很低。 * Vector 和 ArrayList 基本一样,区别是 Vector 使用了 synchronized 方法,可以说其实线程安全的 ArrayList,所以其特点和 ArrayList 相同,但是其效率和 ArrayList 相比较低。 * LinkedList 底层数据结构为带头双向链表,所以其特点为增删快,其增加删除元素只需要修改其指针的指向即可,不需要涉及到数据元素的移动,就是因为其这样的特点,数据存储的不连续,导致其对数据的索引效率很低,需要从头节点进行遍历查找。 3. 内存泄漏和内存溢出解决方案 内存泄漏和内存溢出是 Java 开发中常见的问题,它们的解决方案如下: * 内存泄漏:是指应用程序在申请到内存空间使用完毕后没有及时的释放内存,一次两次的内存泄露没有什么太大的问题,但是如果内存泄漏太多,例如在递归或者死循环中出现了内存泄漏,就会导致内存溢出。 * 内存溢出:是指应用程序申请的内存空间大于实际的内存空间,计算机没有足够的内存空间够其使用,程序无法执行。 * 解决方案:检查程序代码,检查是否有无限循环创建实例的代码;检查代码上是否存在某些对象的生命周期过长、持有状态时间过长、存储结构设计不合理等等;增加 Java 虚拟机 -Xms 和 -Xmx 值。 4. int 和 Integer 的区别 int 是基本数据类型,Integer 是 int 的包装类型,在拆箱和装箱过程中,二者自动转换。int 可以直接存储数据,Integer 需要 new 创建对象,int 在内存中是存储在栈中,Integer 在内存中是存储在堆中,在栈中还有其指向堆的引用。 5. String、StringBuilder、StringBuffer 的区别 String、StringBuilder、StringBuffer 是 Java 语言中三种常用的字符串处理类,它们的特点如下: * String:String 为字符串常量,其值不可变,所以在使用 String 类型的字符串在进行字符串拼接的时候会调用 toString 方法,例如:字符串 str1 和 字符串 str2 进行拼接,会额外 new 一个 String 来存 str1+str2,所以如果进行大量的拼接,会导致内存大量的浪费,产生内存泄漏危害,严重的话可能会导致内存溢出,不推荐直接使用 String 进行字符串拼接。 * StringBuilder:StringBuilder 的底层为字符数组,其进行字符串拼接的是先将字符串转换为数组,然后直接在原来的数组中添加元素,所以其特点是可变,效率相较于 String 高,其是线程不安全的。 * StringBuffer:StringBuffer 是线程安全的 StringBuilder。 6. Hashtable 和 HashMap 的区别 Hashtable 和 HashMap 都是 Java 语言中的集合类,它们的特点如下: * Hashtable:Hashtable 是一个古老的集合类,它的 key 和 value 都不能为空,但是它是线程安全的。 * HashMap:HashMap 是一个常用的集合类,它的 key 和 value 都可以为空,但是它不是线程安全的。 7. 常见异常 Java 语言中有很多种异常,它们的解决方案不同,例如: * NullPointException:空指针异常,解决方案是检查代码中是否有空指针的可能性。 * ClassNotFoundException:找不到类异常,解决方案是检查类路径是否正确。 * IOException:输入输出异常,解决方案是检查输入输出流是否正确。 本文总结了 Java 基础知识点,包括 final 关键字的作用、ArrayList、Vector、LinkedList 的存储性能和特性、内存泄漏和内存溢出解决方案等,旨在帮助开发者更好地理解 Java 语言。