java基础面试题,附答案

1.JDK 和 JRE 有什么区别?

jdk是java开发工具包,jre是java运行环境,jdk包含jre

2.== 和 equals 的区别是什么?
1)对于==,比较的是值是否相等

        如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;

如果作用于引用类型的变量,则比较的是所指向的对象的地址

2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是是否是同一个对象
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
不是,hashCode相同的情况下equals也不一定相同,因为哈希码会出现哈希碰撞,值不是唯一的

4.final 在 java 中有什么作用?
修饰符,被修饰的对象不能被修改

5.java 中的 Math.round(-1.5) 等于多少?
四舍五入算法,为1

6.String 属于基础的数据类型吗?
不属于,属于引用类型, 8大基本类型byte、short、char、int、long、float、double、boolean。

7.java 中操作字符串都有哪些类?它们之间有什么区别?
String、StringBuffer、StringBuilder
string是被final修饰的,是常量不可被修改
StringBuffer 是变的字符串类型,并且是安全的
StringBuilder 是变的字符串类型,是不安全的

8.String str="i"与 String str=new String(“i”)一样吗?
不相对, 他们在java内存中的地址不相同

9.如何将字符串反转?
使用StringBuffer 或者StringBuilder 中的reversal()方法

10.String 类的常用方法都有那些?
length():获取字符串长度
getByte()将字符串转换成字节数值
split(String):指定符号进行分割
equals():比较属性大小
toUpperCase() 全部转为大写
toLowerCase() 全部转为小写

11.抽象类必须要有抽象方法吗?
不需要,但有抽象方法的必须是抽象类

12.普通类和抽象类有哪些区别?
是不是有抽象方法, 可不可以被实例化

13.抽象类能使用 final 修饰吗?
不可以,被 final修饰的类不能被继承, 抽象类就是为了被继承,逻辑上过不去

14.接口和抽象类有什么区别?
都不可以被实例化, 抽象类可以有构造方法,接口不行
抽象类可以有普通方法,接口在java8后可以有被默认修饰的方法
关键字不同, 抽象方法只能单继承,但接口可以多实现
接口中只能由常量,抽象方法不用
接口强调特定功能的实现,而抽象类强调所属关系。

15.java 中 IO 流分为几种?
按功能分 : 输入流,输出流
按类型分:字节流, 字符流

16.BIO、NIO、AIO 有什么区别?

17.Files的常用方法都有哪些?
exists()判断文件路径是否存在
createFile()创建文件
createDirectory() 创建文件夹
delete()删除文件
size() 查看文件个数
read() 读取文件
write()写入文件

二、容器

18.java 容器都有哪些?

19.Collection 和 Collections 有什么区别?
Collection是集合的顶级父类,包含了集合体系的共性
Collections 是一个工具类,方法都是用于操作Collection

20.List、Set、Map 之间的区别是什么?
list是列表以线性方式存储,允许数据重复
set是集合,没有存储规则,不允许数据重复
map是键值对的存储方式,

21.HashMap 和 Hashtable 有什么区别?
父类不用
hashtable不允许null,hashMap允许null
hashtable是线程安全的,hashmap是线程不安全的
hashtable初始容量是11,hashmap是16

22.如何决定使用 HashMap 还是 TreeMap?
更新数据多使用hashmap ,只读多 使用TreeMap

23.说一下 HashMap 的实现原理?
其使用数组加链表,在jkd1.8之后添加了红黑树,当put存储数据时,会更具K的计算hash值,
放在对应的位置上,如果这个位置有数据,就在这个位置生成链表进行存储

24.说一下 HashSet 的实现原理?
底层基于hashmap实现,将存入的值当初hash的key存入,value统一为present。present空对象

25.ArrayList 和 LinkedList 的区别是什么?
一个是数组,一个是链表
arrayList在查询上效率高, LinkedList在数据更新上效率更高

26.如何实现数组和 List 之间的转换?
List转数组:toArray(arraylist.size()方法

数组转List:Arrays的asList(a)方法

27.ArrayList 和 Vector 的区别是什么?
Vector 是线程安全的,.ArrayList 线程不安全
Vector还可以设置增长的空间大小,而ArrayList没有

28.Array 和 ArrayList 有何区别?
Array数组可以包含基本类型和对象类型,ArrayList却只能存放对象类型

Array数组空间长度是固定的,创建前需要给定长度,ArrayList长度是动态增长

29.在 Queue 中 poll()和 remove()有什么区别?
poll()和remove()都将从队列头部删除一个元素,但是在poll()在队列为空时返回null,
而remove()会抛出NoSuchElementException异常。

30.哪些集合类是线程安全的?

Vector、HashTable、Properties是线程安全的;

ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap是线程不安全的、

但是java也提供了线程安全的ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap封装类
31.迭代器 Iterator 是什么?

迭代器是为容器而生,它本质上就是一种遍历的算法。因为容器的实现千差万别,很多时候不可能知道如何去遍历一个集合对象的元素。Java为我们提供了使用迭代的接口,Java的所有集合类丢失进行迭代的。

简单的说,迭代器就是一个接口Iterator,实现了该接口的类就叫做可迭代类
32.Iterator 怎么使用?有什么特点?
Iterator遍历集合元素的过程中不允许线程对集合元素进行修改,否则会抛出ConcurrentModificationEception的异常。
Iterator遍历集合元素的过程中可以通过remove方法来移除集合中的元素。
Iterator必须依附某个Collection对象而存在,Iterator本身不具有装载数据对象的功能。
Iterator.remove方法删除的是上一次Iterator.next()方法返回的对象。
强调以下next()方法,该方法通过游标指向的形式返回Iterator下一个元素。

33.Iterator 和 ListIterator 有什么区别?
ListIterator 继承 Iterator
ListIterator 比 Iterator多方法
使用范围不同,Iterator可以迭代所有集合;ListIterator 只能用于List及其子类

34.怎么确保一个集合不能被修改?
通过Arrays.asList创建的集合或
可以使用 Collections. unmodifiableCollection(Collection c) 方法来创建一个只读集合,
这样改变集合的任何操作都会抛出 Java. lang. UnsupportedOperationException 异常。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值