Java高频面试题

Java基础

1、JDK和JRE有什么区别?

JDK是java的开发工具包,有JDK8,9甚至到14的差别,安装以后,不仅包含了java 的开发环境,比如java.exe,还包含了运行环境(jre)相关包。

2、说下你对==和equals的认识,它们有什么差别?(高频)

对于==号:

1、比较基本类型,比如int等,==比较的是值是否相同;

2、引用类型,比如自定义对象:比较地址是否相同;

对于equals方法

equals方法只能用来比较引用数据类型,在Object类中所定义的equals方法底层也是通过==号比较对象的地址值。但是如果一个类重写了equals方法此时

就可以比较内容了。

3、如果两个对象的 hashCode值一样,则它们用equals()比较也是为 true,是不是?(高频)

不是。

Object里,hashCode和equals是两个不同的方法,默认hashCode是返回对象地址,equals方法也是对比地址;

两者不是一回事,可以通过重写对象的hashCode方法,让不同值的对象有相同的hashCode,但它们的equals方法未必相同。

4、综合说下final的作用?

修饰在类上,该类不能被继承。

修饰在方法上,该方法不能被重写。

修饰在变量上,叫常量,该常量必须初始化,初始化之后值就不能被修改,而常量一般全都是用大写来命名。

5、Math.round(-2.5) 等于多少?

结果是-2

6、String 是基本数据类型吗?

String 不是基本数据类型,基础类型有8种:byte、boolean、char、short、int、float、long、double。String属于引用数据类型!

7、对字符串操作都有哪些类并详细的介绍一下它们之间的区别?(高频)

具体有String、StringBuffer 和 StringBuilder 这三个类。

String是不可变类,每次操作都会生成新的String对象,并将结果指针指向新的对象,由此会产生内存碎片。

如果要频繁对字符串修改,建议采用StringBuffer 和 StringBuilder。

StringBuffer 和 StringBuilder的差别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,由于无需维护线程安全的操作,所以

StringBuilder 的性能要高于 StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。由于大多数环境下是

单线程,所以大多是用 StringBuilder。

8、String str="abc"与 String str=new String("abc")的定义方法一样吗?

不一样

String str = "abc" ; 是在常量池中创建一个字符串对象abc

String str = new String("abc"); 创建了两个对象,"abc"字符串对象在常量池中,new String("")在堆内存中又创建了一个新的对象。

9、String 类的常用方法都有那些?(高频)

indexOf():返回指定字符的索引。

length():返回字符串长度。

equals():字符串比较。

replace():字符串替换。

trim():去除字符串两端空白。

split():分割字符串,返回一个分割后的字符串数组。

toLowerCase():将字符串转成小写字母。

toUpperCase():将字符串转成大写字符。

substring():截取字符串。

reverse(): 对字符串进行反转

10、抽象类必须要有抽象方法吗?

不需要的,抽象类中可以没有抽象方法。但是存在抽象方法的类必须是抽象类!抽象类常见的应用场景是模板设计模式,通过具体的方法定义代码执行的骨

架,将变化的内容定义成抽象方法,交由子类进行实现。

11、一般的类和抽象类有哪些区别?

一般的类不能包含没有方法体的抽象方法,而抽象类可以包含抽象方法。抽象类不能直接用new来实例化,普通类可以直接实例化。

12、抽象类能使用 final 修饰吗?

不能

定义抽象类的本意是被其他的类进行继承,如果定义为 final 该类就不能被继承,这样就会有矛盾,所以 final 不能修饰抽象类。

13、接口和抽象类有什么区别?(高频)

抽象类的子类要用 extends 来继承;而实现接口要用 implements 。

抽象类可以定义构造函数,而接口不能。

抽象类里可以定义 main 方法,但接口不能有 main 方法。

实现数量:类可以实现很多个接口;但是只能继承一个抽象类。

访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。

14、java 中 IO 流分为几种?

按功能来分可以分输入流(input)和输出流(output)。

从类型来分可以是字节流和字符流。

15、BIO、NIO、AIO 有什么区别?(高频)

BIO的英语全称是Block IO, 同步阻塞式 IO,就是平常经常使用的传统 IO,特点是简单方便,但并发处理能力低。

NIO,叫New IO, 同步非阻塞 IO,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用(由一个线程管理多个通道默认管理的通道数量为

1024个)。

AIO,Asynchronous IO, 是 NIO 的升级,实现了异步非堵塞 IO ,它是基于事件和回调机制。

16、Files的常用方法都有哪些?

Files.exists():检测路径是否存在。

Files.createFile():创建文件。

Files.createDirectory():创建文件夹。

Files.delete():删除文件或文件夹。

Files.copy():复制文件。

Files.move():移动文件,即复制后删除。

Files.size():查看文件的个数。

Files.read():读取文件。

Files.write():写入文件。

Java集合

17、java 的集合容器都有哪些?(高频)

18、Collection和Collections有什么区别?

Collection 是一个单列集合的顶层接口。

Collections是集合类的一个工具类,包含了对集合元素进行排序和线程安全等各种操作方法。

19、List、Set、Map 之间的区别是什么?(高频)

List集合

1、属于单列集合,存储的都是一个一个元素

2、List和存在重复元素

3、每一个元素都有对应的索引,可以通过索引获取元素

4、元素的存取顺序一致

Set集合

1、属于单列集合,存储的都是一个一个元素

2、元素唯一

3、元素没有索引,不能通过索引获取元素

4、不能保证元素的存取顺序一致

Map集合:

1、属于双列集合,存储的是一对一对的元素

20、HashMap 和 Hashtable 有什么区别?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不写散文诗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值