JavaRush /Java 博客 /Random-ZH /喝咖啡休息#145。90 个常见的 Java 面试问题及解答

喝咖啡休息#145。90 个常见的 Java 面试问题及解答

已在 Random-ZH 群组中发布
来源:Usemynotes 该出版物包含在初级和中级 Java 开发人员访谈中经常遇到的问题列表。 喝咖啡休息#145。 90 个常见的 Java 面试问题及解答 - 1

1. 是什么使 Java 成为一种独立于平台的语言?

Java 被称为平台无关语言,因为 JDK(Java 开发工具包)生成的字节码可以由任何平台上的 JVM(Java 虚拟机)执行,而与操作系统无关。

2. 为什么Java不是一种完全面向对象的语言?

Java 不是一种完全面向对象的语言,因为它使用八种非对象的基本数据类型:booleanbytecharintfloatdoublelongShort

3. 为什么Java中的main()方法是静态的?

main()方法被声明为静态,以便可以直接从 JVM 调用它,而无需创建声明它的类的对象或实例。

4. Java中什么是包装类?

在 Java 中,每个基本数据类型(例如intfloat )都有一个相应的类,称为包装类。它们也称为包装器,因为它们将原始数据类型包装或转换为对象。

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

Java 中的构造函数是创建对象或实例时自动调用的特殊方法。构造函数和类名称必须匹配。

6. Java中数组和ArrayList有什么区别?

数组 数组列表
它是一种静态数据结构,这意味着它的大小是固定的并且不能改变。 它是集合结构中的可变长度或动态大小的数组,这意味着它的大小可以根据需要更改。
它们可以存储对象和原始类型。 它只能存储或包含对象,但不能存储原始类型。
我们可以通过在方括号 [ ] 中指定元素的索引来访问该元素。 我们可以通过在get()方法中指定元素的索引号来访问该元素。

7. Java为什么不使用指针?

Java 不使用指针,因为它们不安全并且还会增加程序的复杂性。此外,Java 避免使用指针以避免向用户提供直接内存访问。

8. Java中有哪些类型的访问修饰符?

在Java中,访问修饰符是用于指示对类以及类外部或另一个类中的方法的访问的关键字。Java 中有四种不同类型的访问修饰符:
  • 默认
  • 民众
  • 私人的
  • 受保护

9. Java 中的 JIT 是什么?

JIT 是 Java 中即时编译器的缩写。在运行时,它将字节码转换为本机机器代码。JIT编译器有助于提高Java程序的性能。

10.Java中的final关键字是什么?

Java中的final关键字用于表示常量。它可以与变量、类和方法一起使用。
  • 如果final关键字与变量一起使用,则不能更改其值。
  • 如果Final关键字与方法一起使用,则无法覆盖该方法。
  • 如果您将类声明为Final,则该类不能由子类扩展或继承。

11. Java中OOP或面向对象编程的基本概念是什么?

Java 中的面向对象编程或 OOP 使用 4 个主要概念:
  • 封装。
  • 抽象。
  • 遗产。
  • 多态性。

12. Java中什么是单例类以及如何使类成为单例?

在 Java 中,单例类是一种只有一个实例或对象的类。通过创建私有构造函数,我们可以使该类成为单例。

13. Java中局部变量和实例变量有什么区别?

局部变量是在块或方法内定义的。局部变量的作用域仅在块内。类实例变量是在类内部但在方法外部定义的变量。它通过创建类的对象来访问,并在对象被删除时终止。

14.什么是OOP或面向对象编程?

面向对象编程或 OOP 是一种编程范例,用于使用对象概念开发程序或应用程序。

15. 是什么让 Java 字符串不可变?

Java中的字符串是不可变的,这意味着字符串对象一旦创建就无法更新,但会创建一个新的字符串对象。这是因为字符串对象被缓存在字符串池中。

16.描述Java中接口和抽象类的区别

界面 抽象类
只能有抽象方法。 允许抽象和非抽象方法。
子类使用Implements关键字实现接口。 子类或派生类通过使用关键字来扩展实现(扩展)来继承抽象。
接口只能有公共静态方法,没有实现。 它可以具有不带实现或带实现的方法。
接口的所有方法都必须由实现它的类来实现。 从抽象类继承的类不需要实现其超类的所有方法。

17. 多态是什么意思?它有哪些类型?

Java 中的多态性是指对象具有多种形式的能力。它也可以定义为可以通过不同方式完成的单个任务或活动。多态性分为两种:
  1. 编译时多态性。
  2. 运行时多态性。

18、Java如何实现编译时和运行时多态性?

在Java中,编译时多态性是通过方法重载实现的,而运行时多态性是通过方法重写实现的。

19. 抽象是什么意思?在 Java 中它是如何实现的?

抽象是表示重要信息而不显示内部或实现细节的行为。在Java中,这是通过使用抽象类和接口来实现的。

20.Java中的接口是什么?

Java中的接口是一组抽象方法,只有函数声明,没有实现。我们无法创建接口的对象或实例。接口不能有构造函数。一个类可以使用 Java 中的 Implements 关键字实现多个接口。

21. Java中有哪些类型的继承?

在Java中,我们使用extends关键字来继承超类或基类的属性和方法。继承有五种类型:
  1. 单一继承。
  2. 多级继承。
  3. 分层继承。
  4. 通过接口进行多重继承。
  5. 混合继承。

22. Java为什么不支持多重继承?

Java不支持多重继承以防止歧义。例如,假设有两个超类 A 和 B,以及一个继承 A 和 B 的子类 C。类 A 和 B 都有一个 show()方法。如果我们通过创建类 C 的对象来调用show()方法,那么编译器会抛出错误,因为不清楚应该执行 哪个类的show()方法。

23.方法重载和方法重写有什么区别?

方法重载 方法重写
编译时多态性。 运行时多态性。
同一类中的两个或多个方法具有相同的函数或方法名称,但签名不同。 不同类中具有相同函数或方法名称和签名的两个或多个方法。

24. Java 中是否可以重写静态或私有方法?

私有方法在类外部不可访问,因此它不会被子类覆盖。因此,它不能被覆盖。同样,静态方法不能被重写,因为如果我们在基类和派生类中创建具有相同方法名称和签名的静态方法,派生类将隐藏基类中的方法。这称为方法隐藏。

25. Java中构造函数重载是什么?

在 Java 中,如果一个类具有多个构造函数,但具有不同的参数列表,则构造函数被视为重载。

26.即使没有抽象方法,我们也可以定义一个抽象类吗?

是的,我们可以创建一个抽象类,即使它没有抽象方法。但是,如果一个类至少包含一个抽象方法,则必须将其定义为抽象方法,否则会出现错误。

27.静态变量和方法有什么用?

当我们想要对类的所有对象使用通用方法或变量而不是为每个对象创建多个副本时,我们使用静态成员(方法和变量)。例如,在 Employee 类中,公司名称可以设为静态,因为所有对象都将具有相同的公司名称。

28. Java中有多少种不同类型的构造函数?

Java中有两种类型的构造函数:
  1. 默认构造函数不接受任何参数。
  2. 参数化构造函数 - 至少采用一个参数。

29. Java使用复制构造函数吗?

不,Java 没有像 C++ 那样的复制构造函数。

30.说明Java中构造函数和方法的区别

构造函数 方法
构造函数名称和类名称必须匹配。 方法名称可以与类名称相同,也可以不同。
它不能有返回类型。 需要有返回类型。
构造函数不能是静态的。 该方法可以是也可以不是静态的。
当创建对象或类的实例时,它会被自动调用。 它是使用对象名称和句点 (.) 来调用或应用的。
它用于初始化对象的状态。 它用于定义对象的行为。

31. 是否可以不使用main()方法来执行程序?

不可以, Java中没有main()方法就无法执行程序,因为程序的执行是从main()方法开始的。

32.Java中this关键字的含义是什么?

Java中的this关键字是一个引用变量,用于引用调用方法或变量的当前对象。

33. Java中是否可以使用this关键字来引用静态成员?

是的,由于它是当前对象的引用变量,所以我们可以使用this关键字来引用静态成员。

34. 我们可以将Java中的main()方法设置为私有而不是公共吗?

我们可以将main()方法设为私有,但是这样我们会得到一个运行时错误,因此程序将不会执行。

35. Java中super关键字的含义是什么?

在Java中,super关键字是一个引用变量,用于引用直接父类的对象。

36. 说出向量和数组之间的差异。

向量 大批
这是一个动态调整大小的数组。 它是一个固定大小的数据结构。
矢量是同步的。 数组不同步。
与数组相比,它速度较慢。 与矢量相比,它更快。
它只能包含或存储Java对象。 它用于存储原始类型和 Java 对象。
我们可以使用size()方法来找出向量的长度。 我们可以使用length属性来找出数组的长度。

37.Java中什么是多线程?

多线程是在单个程序中同时执行多个任务的过程。这样做是为了实现最大处理器负载。

38、Java中多线程的实现方式有哪些?

Java中的多线程可以通过两种方式实现:
  1. 通过在java.lang.Runnable中实现Runnable接口。
  2. 通过扩展java.lang.Thread中的Thread类。

39. 说明 Java 中 super 和 this 关键字之间的一些区别。

极好的
用于引用父类的对象。 用于引用当前类对象。
用于访问父类或基类的方法。 用于访问当前类的方法。
调用基类的默认构造函数。 调用当前类的默认构造函数。

40.子类和内部类有什么区别?

子类 内部类
这是一个继承基类或父类的属性和方法的类。 这是一个嵌套在另一个类中的类。
它可以访问超类或基类的所有公共和受保护成员。 它可以访问外部类的所有成员。

41.Java中什么是类加载器?

Java 类加载器是 Java 运行时环境或 JRE 的一个组件,用于在运行时将 Java 类加载到 Java 虚拟机 (JVM) 中。

42. Try 块后面是否有必要在 Catch 块中进行 Java 异常处理?

是的,必须使用catch块,因为try块抛出的任何异常都必须在catch块中捕获。

43. 命名Java中的异常类型

Java 中的异常有两种类型:
  1. 未经检查的异常
  2. 检查异常

44.什么是线程状态?

Java中有4种线程状态:
  1. 新流。
  2. 可运行。
  3. 不可运行。
  4. 死亡或终止。

45.什么是NullPointerException?

当用户尝试访问或更改 null 对象的值时,会抛出NullPointerException

46.Java异常处理中使用了哪些类型的关键字?

  1. 尝试

  2. 抓住

  3. 最后

  4. 投掷

47. Java中是否可以重载main()方法?

是的,main()方法可以被重载,但是JVM或者Java虚拟机只调用原来的main()方法。

48. Java中是否可以重写main()方法?

不可以,因为main()方法是静态方法,静态方法不能被重写。

49. equals() 和 == 有什么区别?

在Java中,equals()是用于比较两个对象或变量的值的方法,而==是比较运算符,用于比较另外两个对象或变量的地址或内存位置。

50.类构造函数可以返回任何值吗?

不,构造函数没有返回类型,因此它不能返回任何值。

51.定义聚合

聚合是一种关联形式,被定义为两个类之间的 has-a 关系。这样做是为了代码重用。这是两个类之间的单向或单向关系。

52. 什么是协会?

关联使用对象定义两个类之间的关系。关系或关联可以是一对一、一对多、多对多或多对一。聚合和组合是关联的两种形式。

53.什么是组合?

组合是一种关联形式,其中两个类相互依赖。

54.动态绑定和静态绑定有什么区别?

通过动态绑定,将方法绑定到对象的决定是在运行时做出的。后期绑定是动态绑定的另一个名称。使用静态绑定,将方法绑定到对象的决定是在编译时做出的。静态绑定是早期绑定的另一个名称。

55.说明封装和抽象之间的区别

在封装中,数据和方法被打包或捆绑到称为类的单个单元中。抽象仅显示重要信息并隐藏内部或实现细节。

56.Java中什么是抽象类?

抽象类是无法实例化的类,但我们可以创建引用变量。使用abstract关键字将类声明为抽象的。它包括抽象方法和非抽象方法。

57. 我们可以在一个方法中同时使用final和abstract关键字吗?

不,我们不能将finalstatic方法与abstract一起使用,因为抽象方法必须由子类重写,而final方法不能被重写。

58. 我们可以在接口中将方法声明为final吗?

不,我们不能将方法声明为final,因为接口中的所有方法都是抽象的,因此它必须由子类实现,并且final方法不能被覆盖。

59. 命名所有Java异常类的基类

所有异常的基类是java.lang.Throwable

60. 是否可以在一个 try 块中创建多个 catch 块?

是的,我们可以为一个try块创建多个 catch 块。

61、定义运行任何Java程序都需要指定的两个环境变量

  1. 路径变量。
  2. 类路径变量。

62. Java中可以使用析构函数吗?

不,我们不能在 Java 中使用析构函数。

63. 匿名类是什么意思?

Java 中的匿名内部类没有名称,仅创建一个对象。

64. 命名一个必须为所有线程实现的 Java 方法

Run()方法。

65. Java中break和continue有什么区别?

休息 继续
用于在满足特定条件时终止或终止循环。 用于根据某些条件跳过当前迭代的循环执行。
它可以在循环和开关内部使用。 仅在循环内使用。

66. Java中的字符串池是什么?

Java中的字符串池是存储在堆内存中的字符串的集合。

67. Java 中的 throw 和 throws 关键字有什么区别?

投掷
用于显式抛出异常。 用于声明方法在运行时可以抛出的异常。
在方法体内部使用。 使用throws关键字,我们可以声明多个异常。
Throw后面是Exception类的实例。 后面是要抛出的异常类的名称。

68. 是否可以在同一个类的另一个构造函数中调用构造函数?

是的,我们可以使用this()作为第一行在 另一个构造函数中调用同一类的构造函数。

69. Java中String Buffer和String类可以比较吗?

不,我们不能比较String BufferString对象。因为我们会得到一个错误。

70. 继承过程中构造函数的调用顺序是什么?

首先调用父类或基类的构造函数,然后调用派生类的构造函数。

71. 我们可以为构造函数命名而不是类名吗?

不可以,构造函数和类名必须相同。

72.什么是Java包?

包是分组的类和接口的集合。

73. String 和 StringBuffer 类有什么区别?

细绳 字符串缓冲区
String类是不可变的。 StringBuffer类是可变的。
比StringBuffer慢。 比String更快。
连接多个字符串时会使用更多内存。 连接许多字符串时它使用更少的内存。

74. Java中是否可以重载静态方法?

是的,我们可以通过传递不同的函数签名来重载 Java 中的静态方法。

75.垃圾回收期间,内存的哪个部分(堆栈或堆)被清理?

堆。

76.当数据需要频繁更新时,应该使用以下哪个字符串类?

StringBuffer类应该在频繁更新的情况下使用,因为它是可变的,因此字符串池不会过载。

77. 如果 Java 中的 main() 方法不使用 static 关键字,会发生什么情况?

不会出现编译错误,但在运行时我们会得到NoSuchMethodError错误。

78. 如果return语句放在try和catch块的末尾,finally块会被执行吗?

是的,无论是否有异常, finally块都会执行。

79. 一个Java源文件中可以有很多公共类吗?

不可以,一个 Java 源文件中只能有一个公共类。

80. 一个接口可以扩展另一个接口吗?

是的,一个接口可以使用Java中的extends关键字扩展另一个接口。

81. 说出 Java 中不同类型的类加载器的名称

  1. 引导类加载器

  2. 扩展类加载器

  3. 系统类加载器

82. Java中三元运算符的作用是什么?

三元运算符用于替代Java 中的if-else运算符。这是唯一包含三个操作数的条件运算符。

83. Java 中垃圾回收的作用是什么?

Java 垃圾收集是 Java 应用程序通过删除或清理内存中未使用的对象和包来自动节省内存的方法。

84. Java中默认构造函数是如何使用的?

在Java中,默认构造函数用于用默认值初始化对象的数据成员或成员变量。当程序中没有其他构造函数时,它由编译器自动生成。

85. Java中路径和类路径有什么区别

  1. 类路径定义字节码文件(即.class 文件)的位置。
  2. 路径指定 .exe 文件的位置。

86.Java中有哪些数据类型?

Java中有8种数据类型:
  1. 短的

  2. 字节

  3. 字符

  4. 整数

  5. 漂浮

  6. 双倍的

  7. 长的

  8. 布尔值

87. Java中OOP的四个概念是什么?

  1. 封装。
  2. 抽象。
  3. 多态性。
  4. 遗产。

88. Java中的this关键字可以赋空值吗?

不。

89. Java中的静态块是什么意思?

Java中的静态块用于初始化类的静态变量。它只执行一次:当类第一次加载到内存中时。

90.什么是例外?哪个包包含Java中的所有异常类定义?

异常是程序执行过程中出现的异常情况。它们可能是由于不正确的用户输入或不正确的编码器逻辑而导致的。java.lang.Exception包包含了Java中所有的异常类定义。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION