Java 程序员需要知道的 60 个 Java 面试问题

当你准备面试 Java 编程工作时,考虑你将被问到的问题很重要。这些面试问题可能会因许多因素而异,包括公司类型、角色级别以及你面试的公司已经经营了多长时间。你如何准备好回答这些需要考虑的问题?

通过考虑展示你的 Java 编程技能和能力的示例来准备 Java 面试。你还可以考虑与你对 Java 编程概念的理解有关的场景和过去的经验。我们建议你集思广益并写下来。如果你保留示例列表,则可以在准备面试时快速参考它们。

Java 程序员需要知道的 60 个 Java 面试问题

另一个有用的面试策略是提前审查潜在的 Java 面试问题。让我们看看一些顶级 Java 面试问题的示例。此外,每个问题都包含一些有助于刷新记忆的信息。 

涵盖的主题包括: 

你对这些主题了解得越多,你就越能更好地回答 Java 面试问题!

文章目录 显示

一般Java面试问题

1. 什么是 Java?

Java 是一种独立于平台的高级编程语言。它与平台无关,因为它的字节码可以在任何系统上运行,而不管其操作系统如何。

2. Java的特点是什么?

  • 面向对象编程 (OOP) 概念
  • 独立于平台
  • 高性能
  • 多线程

3. 什么是 OOP 概念?

  • 继承
  • 封装
  • 多态性
  • 抽象
  • 界面

4. 什么是数据封装,它为什么有用?

封装是面向对象编程中的一个概念,用于将属性和方法组合在一个单元中。封装有助于开发人员遵循模块化方法进行软件开发,因为每个对象都有自己的一组方法和变量,并且独立于其他对象提供其功能。除此之外,封装还用于数据隐藏目的。

5. 什么是多态性?

多态是一种具有许多实现的接口。此特征允许你在不同的上下文中为某些内容分配不同的含义或用法。例如,你可以使用多态性为实体启用多个形式,例如变量、函数或对象。

6. 多态性有哪些类型,它们有何不同?

多态性有两种类型:

  • 编译时多态是方法重载。
  • 运行时多态性使用继承和接口。

7. Java中的接口指的是什么?

  • 与 Java 相关的接口是类的蓝图或抽象方法和静态常量的集合。 
  • 每个方法都是公共的和抽象的,但它不包含任何构造函数。 

8. Java中的构造函数是什么?

在 Java 中,构造函数是指用于初始化对象的代码块。此外:

  • 构造函数必须与类同名。 
  • 构造函数没有返回类型。 
  • 创建对象会自动调用构造函数。

9. 命名并解释 Java 中构造函数的类型。

Java 中的两种构造函数是Default ConstructorParameterized Constructor

  • 默认构造函数 
    • 不接受任何输入
    • 主要目的是用默认值初始化实例变量 
    • 广泛用于对象创建
  •  参数化 构造函数
    • 能够使用提供的值初始化实例变量。 
    • 这些构造函数接受参数。

10. 什么是 JDK?

  • JDK代表Java开发工具包。
  • 它可以编译、记录和打包 Java 程序。
  • 它包含 JRE 和开发工具。

11. 什么是JVM?

  • JVM代表Java虚拟机。
  • 它是一个提供运行时环境的抽象机器,允许程序员执行 Java 字节码。
  • JVM 遵循规范、实现和运行时实例表示法。

12. 什么是 JRE?

  • JRE 代表 Java 运行时环境。
  • JRE 是指允许程序员执行 Java 字节码的运行时环境。
  • JRE 是 JVM 的物理实现。

13. 在Java中,堆内存和栈内存有什么区别?

记忆

  • 堆栈内存仅由一个执行线程使用。
  • 应用程序的所有部分都使用堆内存。

使用权

  •  其他线程无法访问堆栈内存。
  •  存储在堆中的对象是全局可访问的。

内存管理

  • Stack 遵循 LIFO 方式释放内存。
  • 堆的内存管理源于与每个对象关联的代。

寿命

  • 堆栈一直存在到线程执行结束。
  • 堆内存从开始到应用程序执行结束都存在。

用法

  • 堆栈内存仅包含堆空间中对象的本地原始变量和引用变量。
  •  每当你创建一个对象时,它总是存储在堆空间中。 

14. 什么是 JIT 编译器?

JIT 编译器在程序执行后运行,并将代码编译成更快的形式,托管 CPU 的本机指令集。 

15. JIT 编译器与标准编译器有何不同?

JIT 可以访问动态运行时信息,而标准编译器则不能。因此,JIT 可以更好地优化常用的内联函数。

16. 什么是内部类?

内部类是嵌套在另一个类中的类。内部类对嵌套它的类具有访问权限,并且它可以访问外部类中定义的所有变量和方法。

17. 什么是子类?

子类是从另一个称为超类的类继承的类。子类可以访问其超类的所有公共和受保护的方法和字段。

18. Java中的包是什么?

在 Java 中,包是捆绑在一起的相关类和接口的集合。 

19. 开发人员如何在 Java 中使用包?

Java 中的包允许开发人员将代码模块化并轻松优化其重用。此外,开发人员可以使用其他类来导入和重用包中的代码。 

20. Java中包的优点是什么?

  • 包可帮助开发人员避免名称冲突。
  • 包提供更容易的访问控制。 
  • 包还可以包含对外部类不可见且仅在包内使用的隐藏类。
  • 包创建了一个标准化的层次结构,从而更容易找到相关的类。

Java 类、变量、对象和参数问题

21. Java 中的类是什么?

所有 Java 代码都在一个类中定义。它有变量和方法。

22. Java中的变量是什么?

变量是定义类状态的属性。

23. 如何在 Java 中使用方法?

方法是必须完成确切业务逻辑的地方。方法包含一组满足特定要求的语句或指令。 

 24. 什么是 Java 对象?

对象是类的一个实例。对象具有状态和行为。

25. 什么是单例类,如何使用它?

Java 中的单例类只能有一个实例。因此,它的所有方法和变量都属于这个实例。当开发人员需要限制一个类的对象数量时,单例类的概念很有用。

26. Java中的构造函数是什么?

在 Java 中使用构造函数的唯一目的是创建一个类的实例。创建一个类的对象将调用它们。Java 构造函数的一些关键特性包括:

  • 构造函数可以是公共的、私有的或受保护的。
  • 如果一个类已经定义了一个带参数的构造函数,你就不能再使用默认的无参数构造函数——你必须编写一个。
  • 实例化一个类只会调用它们一次。
  • 它们必须与类本身同名。
  • 它们不返回值,你不必指定关键字 void。
  • 如果你不为该类创建构造函数,Java 会通过使用所谓的默认无参数构造函数来帮助你。

27. 术语构造函数重载是什么意思?

构造函数重载表示传递不同数量和类型的变量作为参数,这些都是类的私有变量。

28. Java中如何使用非原始变量?

非原始变量总是指 Java 中的对象。

29. 在Java中,什么是静态变量?

静态变量与一个类相关联,而不是与该类的对象相关联。

30. 什么是 Java 数据类型,它们是如何分组的?

在 Java 中,变量必须是指定的数据类型,例如整数、浮点数、字符布尔值或字符串。这两组数据类型是:

  • 原始数据类型,包括 byte、short、int、long、float、double、boolean 和 char
  • 非原始数据类型,包括字符串、数组和类

31. 你如何定义原始数据类型并按大小和描述来描述每种数据类型?

  • 字节大小为 1 个字节。它存储从 -128 到 127 的整数
  • short的大小为 2 个字节。它存储从 -32,768 到 32,767 的整数
  • int大小为 4 个字节。它存储从 -2,147,483,648 到 2,147,483,647 的整数
  • long大小为 8 个字节。它存储从 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 的整数
  • float大小为 4 个字节。它存储小数,足以存储 6 到 7 个十进制数字。
  • double的大小为 8 个字节。它存储小数,足以存储 15 个十进制数字。
  • 布尔值大小为 1 位。它存储真值或假值。
  • char大小为 2 个字节。它存储单个字符/字母或 ASCII 值。

32. 术语自动装箱和拆箱在 Java 中是什么意思?

  • Autoboxing表示 Java 编译器,它自动将原始数据类型转换为对象等价物或包装器类型以简化编译。
  • 拆箱是将包装类型自动转换为其原始等价物。

33. Java 中的包装类是什么?

  • 每个原始数据类型都有一个专用的类,称为包装类。
  • 我们称它们为包装类,因为它们将原始数据类型“包装”到该类的对象中。
  • 包装类将 Java 原语转换为引用类型(对象)。 

34. 在Java中,方法和构造函数有什么区别?

方法构造函数
用于表示对象的行为。用于初始化对象的状态。
必须有返回类型。没有返回类型。
需要显式调用。隐式调用。
编译器不提供默认方法。如果类没有,编译器会提供一个默认构造函数。
方法名可能与类名相同,也可能不同。构造函数名称必须始终与类名称相同。

35. 你可以覆盖 Java 中的私有方法或静态方法吗?

你不能覆盖 Java 中的私有或静态方法。你不能覆盖子类中的私有方法,因为它在那里不可访问。

36. 什么是隐藏方法?

方法隐藏是覆盖私有或静态方法的替代方法,当你隐藏超类方法时会发生这种情况。你在子类中创建具有相同返回类型和相同方法参数的类似方法。例如,你可以在子类中创建另一个具有相同名称的私有方法。

37. Java 中的 equals() 和 == 有什么区别?

  • 等于()方法 
    • 在 Java 的对象类中定义。 
    • 用于检查业务逻辑定义的两个对象的相等性。
  • “==”(等式运算符)
    • Java 编程语言提供的二元运算符,用于比较原语和对象。 
    • public boolean equals(object o) 是 Object 类提供的方法。 
    • 默认使用 == 运算符比较两个对象。例如,你可以覆盖字符串类之类的方法。equals() 方法用于比较两个对象的值。

38. 你能在一个 try 块下写多个 catch 块吗?

是的,你可以在一个 try 块下有多个 catch 块。你的方法应该从具体到一般,

如下例所示:

public class Example {

public static void main(String args[]) {

try {

int a[]= new int[10];

a[10]= 10/0;

}

catch(ArithmeticException e)

{

System.out.println(“Arithmetic exception in first catch block”);

}

catch(ArrayIndexOutOfBoundsException e)

{

System.out.println(“Array index out of bounds in second catch block”);

}

catch(Exception e)

{

System.out.println(“Any exception in third catch block”);
}

}

39. 什么是局部变量?

局部变量是在方法中定义的,变量的作用域存在于方法本身中。

40. 什么是实例变量?

实例变量在类内部和方法外部定义。变量的范围存在于整个类中。

41. 在 Java 中如何使用 final 关键字和 final 变量?

  • 当 Java 程序员对原始数据类型的变量使用 final 关键字时,他们无法更改变量的值。
  • 当你将 final 与非原始变量一起使用时,你无法更改引用对象的成员。

42. Java中的继承是什么?

Java中的继承是一个类的属性可以被另一个类继承的概念。它有助于重用代码并建立不同类之间的关系。

43. 在 Java 中,哪些类型的类执行继承?

  • 家长班
  • 儿童班

44. Java 支持哪些类型的继承?

  • 单继承
  • 多级继承
  • 分层继承
  • 混合继承

45. 什么是 Java 异常处理?

在 Java 中,异常是对象。当你抛出一个异常时,你抛出一个对象。但是,你不能只抛出任何对象作为异常——只能抛出其类从 throwable 继承的那些对象。Throwable 作为整个类家族的基类,在 java.lang 中声明,你的程序可以实例化和抛出这些类。

46. 未检查异常、已检查异常和错误之间有什么区别?

  • Unchecked 异常继承自 RuntimeException(从异常扩展而来)。JVM 对 RuntimeException 的处理方式不同,因为不需要应用程序代码显式处理它们。
  • 已检查的异常继承自异常类。客户端代码必须在 try-catch 子句中处理检查的异常,或者必须抛出超类以捕获相同的异常。较低类(子类)抛出的已检查异常会强制调用类(超类)捕获或抛出它。
  • 错误(错误家族的成员)通常出现在更严重的问题上,例如可能不太容易处理的 OutOfMemoryError (OOM)。

47. Java中的循环是什么?

你将使用循环重复执行一个语句或一个语句块。 

48. Java中的循环有哪些类型,它们是如何使用的?

  • For 循环在 Java 中用于重复执行语句给定次数。当程序员知道执行语句的次数时使用 for 循环。
  • 当某些语句需要重复执行直到满足某个条件时, while 循环很有用。在 while 循环中,它在执行语句之前检查条件。
  • do while 循环与while 循环相同,只是它在语句块执行后检查条件。此外,while 循环语句至少执行一次。

49. 什么是无限循环?

无限循环在没有任何条件的情况下运行并无限运行。你可以通过在语句块的主体中​​定义任何中断逻辑来中断无限循环。

50. 你如何声明一个无限循环?

for (;;)

{

    // Statements to execute

    // Add any loop breaking logic

}

51. continue 和 break 语句有什么区别?

Break 和 continue 是循环中使用的两个重要关键字。在循环中使用break关键字时,循环会立即中断。当前迭代在使用continue关键字时中断,循环继续下一次迭代。

Java字符串面试题

52. Java 的入口点是什么,它是如何编写的?

  • Java 中的 main() 是任何 Java 程序的入口点。
  • main() 始终写为 public static void main string args。

53. 在 Java 中,什么是 public static void main string args?

public static void main string args,也称为public static void main(String[] args),意思是:

  • Public是一个访问修饰符,用于指定谁可以访问此方法。此外,任何类都可以访问此方法。
  • static是 java 中的一个关键字,用于标识它何时是基于类的。main() 在 Java 中是静态的,可以在不创建类实例的情况下访问它。如果 main 不是静态的,编译器将抛出一个错误,因为 main() 在创建任何对象之前被 JVM 调用。它只能通过类直接调用静态方法。
  • void是定义方法的方法的返回类型。该方法不返回值。
  • Main是 JVM 搜索的方法的名称,作为应用程序的起点(仅具有特定签名)。它也是主要执行发生的方法。
  • String args[]是传递给 main 方法的参数。

54. 在Java中,静态方法和静态变量的目的是什么?

当需要在类的多个对象之间共享方法或变量时,开发人员使用静态关键字使所有对象共享方法或变量。这用于代替为每个对象创建单独的副本。

55. 如何在 Java 中使用、调用和访问静态方法?

  • 你必须在方法名称之前使用 static 关键字。
  • 使用类 (className.methodName) 调用静态方法。
  • 静态方法不能访问任何非静态实例变量或方法。

56. 如何在 Java 中使用、调用和访问非静态方法?

  • 你不需要在方法名称之前使用 static 关键字。
  • 像任何通用方法一样调用非静态方法。
  • 非静态方法可以访问任何静态方法或静态变量,而无需创建类的实例。

57. 在 Java 中,this() 和 super() 是什么,你需要在哪里使用它们?

在 Java 中,super() 和 this() 是用于调用构造函数的特殊关键字。使用 this() 和 super() 时,它们必须是块的第一行。

58. this() 代表什么,它在 Java 中是如何使用的?

  • this() 表示类的当前实例
  • 用于:
    • 调用同一个类的默认构造函数
    • 当前类的访问方法
    • 指向当前类实例

59. super() 代表什么,它在 Java 中是如何使用的?

  • super() 表示父/基类的当前实例
  • 用于:
    • 调用父/基类的默认构造函数
    • 基类的访问方法
    • 指向超类实例

60. 什么是 Java switch 语句,如何使用?

  • 作为标准的编程逻辑,它可以简单地通过使用 if…else 条件来实现。
  • 在涉及更复杂情况的程序中,复杂的场景需要调用几个方法来解决这个问题。
  • Switch 避免了几个嵌套的 if…else 语句。
  • 在产生大量迭代的 Java 场景中,切换通常比使用 if….else 语句更快。 

61. 开关盒的默认设置是什么? 

在 switch 语句中,默认情况在没有其他 switch 条件匹配时执行。因为默认情况是可选的,所以你只能在编码所有其他开关情况后声明它。

总结

这份全面的 Java 面试问题列表应该让你为面试做好更好的准备,不仅如此,而且是一次成功的面试。确保在准备时写下你的答案,以便你更好地记住它们。

Java训练营课程推荐

Java 程序员需要知道的 60 个 Java 面试问题

【Udemy高分课程 + 中英文双字幕】

2022年 完整的 Java 开发训练营课程

除了多练习面试问题,还可以再通过一些完整的Java训练营课程,查漏补缺,巩固基础,希望你能够更好地找到一份梦想 Java 工作。 

如果本站的内容对你有帮助,可以点击这儿,不花一分钱捐赠本站

(0)
疯狂的小黑疯狂的小黑
上一篇 2022年5月28日 下午2:23
下一篇 2022年7月6日 下午3:16

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

微信