栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础面试题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础面试题

常考的10道Java基础面试题

1.JDK与JRE的区别?
JRE是Java Runtime Environment的缩写,即Java运行时环境,包含了Java虚拟机,Java基础类库。是使用Java语言编写的程序运行所需要的软件环境,是提供给想运行Java程序的用户使用的。

JDK是Java Development Kit的缩写,即Java开发工具包,是程序员使用Java语言编写Java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译Java源码的编译Javac,以及其他工具。

2.== 和 equals 的区别?
“==”对于基本类型来说是值的比较,对于引用类型来说是内存地址的比较。
“equals” 是Object 类的方法,也是内存地址的比较,只是常用的引用类型如:String 重写了该方法,将其变为内容的比较。

3. final、finalize() 和 finally 的区别?
final 可以修饰类、变量、 方法,修饰类该类不能被继承、修饰方法表示该方法不能被重写、修饰变量表示该变量是一个常量不能被重新赋值。

finalize 是一个方法,属于Object类的一个方法,而Object 类是所有类的父类,Java 中允许使用finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。

finally 一般作用在try-catch 代码块中,在处理异常的时候,通常我们将一定要执行的代码方法finally代码块中,表示不管是否出现异常,该代码块都会被执行,一般用来存放一些关闭资源的代码。

4. abstract 和 interface 的区别?
默认方法实现: 抽象类可以用默认方法实现;接口不能有默认方法实现。

实现:抽象类的子类使用extends 来继承;接口必须使用 implements 来实现接口。

main 方法:抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法。

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

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

5. s = “hello” 和 s = new String(“hello”) 的区别?
内存的分配方式不一样。String str = "hello"的方式,Java 虚拟机会将其分配到常量池中,而String str = new String(“hello”) 则会被分到推内存中。

6. List 和 Set 的区别?
List、Set都是继承自Collection接口;

List特点:元素有放入顺序,元素可重复,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(元素虽然无放入顺序,但是元素在Set 的位置是该元素的 HashCode 决定的,其位置是固定的。加入 Set 的 Object 必须定义 equals() 方法,另外 List 支持 for 循环,也就是通过下标来遍历,也可以用迭代器,但是 Set 只能用迭代器,因为它无序,无法用下标来取得想要的值。)

Set 和 List 对比:
Set: 检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置的改变。
List: 和数组类似,List 可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置的改变。

7. Collection 和 Collections 的区别?
Collection 是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法,所有集合都是他的子类,比如List、Set 等。

Collections 是一个包装类,包含了很多静态方法,不能被实例化,就像一个工具类。

8. HashMap 和 HashTable 的区别?
存储: HashMap 运行 key 和 value 为 null, 而 HashTable 不允许。
线程安全:HashTable 是线程安全的,而HashMap 是非线程安全的。
推荐使用:在HashTable 的类注释可以看到,HashTable 是保留类不建议使用,推荐在单线程环境下使用HashMap 替代, 如果需要使用多线程使用则用 ConcorrentMap 替代。

9. String、 StringBuffer 和 StringBuilder 的区别?
String、StringBuffer 和 StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象,而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。

StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而StringBuilder 是非线程安全的,但 StringBuilder的性能却高于 StringBuffer,所以在单线程环境下推荐使用StringBuilder,多线程环境下推荐使用StringBuffer。

10. Thread 和 Runnable 的区别?
共同点:继承 Thread 和 实现 Runnable 接口都可以实现多线程。

联系:Thread 实现了 Runnable 接口。

区别:
继承 Runnable 接口更具有健壮性,可以避免Java 中的单继承的限制,一个类可以继承多个接口。
Runnable 更容易实现资源共享,多个线程同时处理一个资源。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/270732.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号