面试专题_JavaSE

本文详细探讨了Java SE中的面试热点,包括字符串创建的区别、常量池的概念、字符串拼接的最佳实践、StringBuilder与StringBuffer的异同、重写父类抛出异常的方法的要求、final、finally与finalize的区别、List与Set集合的特性、泛型的作用、常用List集合的特点、队列与栈的原理、HashMap的底层数据结构以及HashMap、HashTable与ConcurrentHashMap的区别。同时讲解了sleep、wait和notify的线程操作以及Java中的六种线程池类型。
摘要由CSDN通过智能技术生成

1.通过字面量创建字符串和new一个字符串对象有什么区别?

内存分配的方式不不一样
通过字面量创建字符串对象会分配到常量池中 若再次使用该字面量创建新字符串时候,不在创建新对象,而是从常量池中获取
通过new一个字符串对象会分配到堆内存中

2.什么是常量池?

常量池在Java用于保存在编译器已确定的,已编译的class文件中的一份数据.它包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s = “Java” 这种声明方式; 当然也可扩充,执行器产生的常量也会放入常量池,故认为常量池是JVM的一块特殊的内存空间

3.做字符串拼接的时候可以使用String吗?

不建议直接使用String做拼接,最好使用StringBuilder或者StringBuffer来做拼接

4.StringBuilder和StringBuffer有什么区别呢?

共同之处:
1.都继承了AbstractStringBuilder这个抽象类,实现了CherSequence接口
2.其append方法都是super.append(str),调用了父类AbstractStringBuilder的append(String str)方法
3.初始容量都是16,扩容机制都是"旧容量*2+2"
4.底层都是char[]字符数组实现,且字符数组都是可变的,这点不同于String
不同之处
1.StringBuffer从JDK1.0就有了,StringBuilder是JDK5.0才出现
2.StringBuilder是非线程安全的,效率更高。StringBuffer是线程安全的,效率低一些,但安全。
3.只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。
4.在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全而StringBuffer则每次都需要判断锁,效率相对更低。

5.子类重写父类含有抛出异常的方法时候,有哪些要求?

不再抛出任何异常;
仅抛出部分异常;
抛出子类异常;
不可以抛出额外异常;
不可以抛出父类异常;

6.final. finally. finalize有什么区别?

final 用于修饰类,变量,方法,修饰类表示该类不可以被继承,修饰方法表示该方法不可以被重写,修饰变量表示不可以重新赋值
finally一般作用在try-catch捕获异常代码块中,不论代码是否发生异常,finally中的代码一定会被执行,通常用来关闭一些资源时候使用
finalize 属于Object类中的一个方法,当对象被收回的时候,会调用此方法

7.List集合和Set集合有什么区别?

相同部分:
List 与 Set 具有相似性,他们都是单列元素的集合,所以他们有一个功能共同的父接口,叫Collection

区别:
Set里边不允许有重复的元素,所谓重复,即不能有两个相等的对象.
假设Set集合中有了一个A对象,现在我要向Set集合中再存入一个B对象,但是B对象与A对象equals相等,则B对象存储不进去,所以,Set集合的add方法有一个boolean的返回值,当集合中没有某个元素,此时add方法可成功加入该元素,则返回true,当集合含有与某个元素equals相等的元素时,此时add方法无法加入该元素,则返回值结果为false.
Set取元素时候,没法说取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素.

List表示有先后顺序的集合, 注意, 不是那种按照年龄,按大小, 按价格之类的排序
当我们多次调用当我们多次调用 add(Obj e)方法时,每次加入的对象就像火车站买票有排队顺序一样,按先来后到的顺序排序。有时候,也可以插队,即调用 add(int index,Obj e)方法,就可以指定当前对象在集合中的存放位置.一个对象可以被反复存入List中,每调用一次add方法,这个对象就被插入进集合中一次,其实并不是把这个对象本身存储到集合中,而是在集合中用一个索引变量指向这个对象,当这个对象被add多次时候,即相当于集合中有多个索引指向了这个对象.
List除了可以以Iterator接口取得所有的元素,再逐一遍历各个元素之外,还可以调用get(index i)来明确的说明取第几个元素

总结:
List以特定次序来持有元素,可以有重复元素, Set无法拥有重复元素,内部排序
另外,再Set集合中, hashset集合比较两个对象是否相等,首先看Hashcode方法是否相等,然后看equals方法是否相等. new两个Student插入到HashSet中,看HashSet的size,实现hashcode和equals方法后再看size

8.集合中的泛型有什么用?

泛型,在C++中被称为模板,就是一种抽象的编程方式,当我们定义类和方法的时候,可以用一种通用的方式进行定义,而不必写出具体的类,这些未知的东西会在真正使用的时候再确定
对于集合类来说,他们可以存放格中类型的元素,如果在存放之前,就能确定元素的类

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值