【java面试题】Java面试题大全带答案(汇总)

发布时间:2021-10-24 15:10:19
常见的Java问题

1.Java虚拟机是什么?Java为何被称为平台无关编程语言?
Java虚拟机是一个可以执行Java字节码的虚拟机过程。Java源文件被编译成字节码文件,可以由Java虚拟机执行。
Java被设计成允许应用程序在任何平台上运行,而不需要程序员单独重写或重新编译每个平台。Java虚拟机因为知道底层硬件平台的指令长度和其他特性,使其成为可能。

2.JDK和JRE有什么区别?
Java运行时的环境(JRE)是Java虚拟机,将执行Java程序。它还包含了执行applet所需的浏览器插件。Java开发工具包(JDK)是一个完整的Java软件开发包,包括JRE、编译器等工具(如JavaDoc、Java调试器),允许开发者开发、编译和执行Java应用程序。

3.static关键词是什么意思?Private或static的方法可以在Java中覆盖吗?
关键字static表示,一个成员变量或成员方法可以在没有所属类实例变量的情况下访问。
static方法不能在Java中覆盖,因为方法覆盖是基于运行时的动态绑定,而static方法是编译时的静态绑定。static方法与类的任何实例无关,因此概念上不适用。

4.非static变量能否在static环境中访问?
Java中static变量属于类,其值在所有实例中相同。当类被Java虚拟机载入时,static变量将被初始化。如果您的代码尝试访问非static变量而不使用实例,编译器将报告错误,因为这些变量尚未创建,并且与任何实例无关。

5.Java支持哪些数据类型?自动拆装箱是什么?
Java语言支持的8种基本数据类型是:
byte
short
int
long
float
double。
boolean。
char
自动包装是Java编译器在基本数据类型和相应对象包装类型之间的转换。例如:将int转换为Integer,double转换为double等。反之亦然。
6.Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
Java中的方法重载发生在两种或两种以上方法中,方法名称相同,但参数不同。相比之下,方法覆盖是说子类重新定义父类的方法。方法覆盖必须有相同的方法名称、参数列表和返回类型。覆盖方式的访问可能不受限制。

7.Java中的结构函数是什么?构造函数重载是什么?复制构造函数是什么?
创建新对象时,调用构造函数。每一类都有结构函数。Java编译器在程序员不提供构造函数的情况下,会为此类创建默认构造函数。
结构函数重载和方法重载在Java中非常相似。多个构造函数可以为一个类创建。每个构造函数都必须有自己唯一的参数列表。
Java不支持C++中的复制构造函数,因为Java不会创建默认的复制构造函数,如果你不自己写构造函数。

8.Java支持多继承吗?
不支持,Java不支持多继承。每个类只能继承一个类,但可以实现多个接口。

9.接口和抽象类有什么区别?
Java提供和支持创建抽象类和接口。它们的实现有共同点,区别在于:
接口中所有的方法都是抽象的。抽象类可以同时包括抽象和非抽象方法。
类可以实现多个接口,但只能继承抽象类。
要实现接口,类必须实现接口声明的所有方法。但是,类不能实现抽象类声明的所有方法,当然,在这种情况下,类也必须声明为抽象。
抽象类可以在不提供接口方法的情况下实现接口。
Java接口中声明的变量默认为final。抽象类可以包含非final的变量。
Java接口中的成员函数默认为public。抽象类的成员函数可以是private、protected或public。
接口绝对抽象,不能实例化。抽象类不能实例化,但如果包含main方法,可以调用。
也可以参考JDK8中抽象类和接口的区别。

10.什么是价值传递和引用传递?
值传递对象意味着传递对象的副本。因此,即使对象副本发生变化,也不会影响源对象的值。
引用对象传递,意味着传递的不是实际对象,而是对象的引用。因此,引用对象的外部变化将反映在所有对象上。
Java线程。

11.过程和线程有什么区别?
程序是执行的应用程序,线程是程序内部的执行程序。一个过程可以有多个线程。线程又称轻量级过程。

12.创建线程有几种不同的方法?你喜欢哪一种?
为什么?
创建线程的方法有三种:
继承Thread类。
实现Runnable接口。
应用程序可以使用Executor框架来创建线程池。
由于不需要继承Thread类,实现Runnable接口更受欢迎。在应用设计中继承了其他对象的情况下,需要多继承(Java不支持多继承),只能实现接口。同时,线程池也非常高效,易于实现和使用。
40个常见的java面试问题及答案

13.总结解释下线程的几种可用状态。
在执行过程中,线程可以处于以下状态:
就绪(Runnable):线程准备运行,不一定能立即开始执行。
在运行过程中(Running)执行线程代码。
等待中(Waiting):线程处于阻塞状态,等待外部处理结束。
睡眠中(Sleping):线程被强制睡眠。
I/O阻塞(BlockedonI/O):等待I/O操作完成。
同步阻塞(BlockedonSynchronization):等待获得锁。
死亡(Dead):执行线程。

14.同步方法和同步代码块有什么区别?
在Java语言中,每个对象都有一把锁。synchronized关键字可用于获取对象上的锁。synchronized关键字可应用于方法级别(粗粒度锁)或代码块级别(细粒度锁)。

15.如何在监视器(Monitor)内进行线程同步?程序应该做什么级别的同步?
Java虚拟机使用监视器和锁。监控器监控一个同步代码块,以确保一次只有一个线程执行同步代码块。每个监视器都与引用对象有关。在获得锁之前,线程不允许执行同步代码。

16.什么是死锁(deadlock)?
当两个过程都在等待对方执行能继续执行时,死锁就会发生。结果两个过程都陷入了无限的等待。
17.如何确保N个线程可以在不导致死锁的情况下访问N个资源?
使用多线程时,避免死锁的一个非常简单的方法是指定获取锁的顺序,并强制线程按照指定的顺序获取锁。因此,如果所有线程以相同的顺序锁定和释放锁,则不会出现死锁。
Java集合问题?

18.Java集合框架的基本接口是什么?

Java集合类提供了一套设计良好的支持对一组对象进行操作的接口和类。Java集合类里面最基本的接口有:

Collection:代表一组对象,每一个对象都是它的子元素。

Set:不包含重复元素的Collection。

List:有顺序的collection,并且可以包含重复元素。

Map:可以把键(key)映射到值(value)的对象,键不能重复。

上一篇 【java面试题】Java企业面试题及答案资料大全
下一篇 【java面试题】Java多线程面试题及回答,干货!