专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 2022年初级Java面试题

2022年初级Java面试题

更新时间:2022-08-19 09:18:05 来源:动力节点 浏览797次

1.为什么Java是平台无关的语言?

Java 语言的开发方式使其不依赖于任何硬件或软件,因为编译器会编译代码,然后将其转换为可以在多个系统上运行的与平台无关的字节码。

运行该字节码的唯一条件是机器安装了运行时环境 (JRE)

2.为什么Java不是纯粹的面向对象语言?

Java 支持原始数据类型 - byte、boolean、char、short、int、float、long 和 double,因此它不是纯面向对象的语言。

3. java中堆内存和栈内存的区别。以及java如何利用它。

堆栈内存是分配给每个单独程序的内存部分。它是固定的。另一方面,堆内存是未分配给 java 程序的部分,但在需要时可供 java 程序使用,主要是在程序运行时。

Java将此内存用作-

当我们编写一个java程序时,所有的变量、方法等都存储在堆栈内存中。

当我们在 java 程序中创建任何对象时,该对象就会在堆内存中创建。它是从堆栈内存中引用的。

示例 -考虑下面的 java 程序:

class Main {
   public void printArray(int[] array){
       for(int i : array)
           System.out.println(i);
   }
   public static void main(String args[]) {
       int[] array = new int[10];
       printArray(array);
   }
}

4. java可以说是完整的面向对象的编程语言吗?

如果我们声称 java 是完整的面向对象的编程语言,那并没有错。因为Java中的一切都在类之下。我们可以通过创建对象来访问它。

但是,如果我们说 java 不是一种完全面向对象的编程语言,因为它支持原始数据类型,如 int、float、char、boolean、double 等。

现在的问题是:Java 是完全面向对象的编程语言吗?我们可以说——Java 不是一种纯粹的面向对象的编程语言,因为它可以直接访问原始数据类型。而且这些原始数据类型不直接属于 Integer 类。

5. Java 与 C++ 有何不同?

C++ 只是一种编译语言,而 Java 既是编译语言又是解释语言。

Java 程序与机器无关,而 c++ 程序只能在编译它的机器上运行。

C++ 允许用户在程序中使用指针。而java不允许它。Java 在内部使用指针。

C++ 支持多重继承的概念,而 Java 不支持这一点。正是由于避免了导致钻石问题的名称歧义的复杂性。

6. C/C++中使用指针。为什么Java不使用指针?

指针对于初学者来说非常复杂且不安全。Java 专注于代码的简单性,而指针的使用可能使其具有挑战性。指针的使用也可能导致潜在的错误。此外,如果使用指针,安全性也会受到影响,因为用户可以在指针的帮助下直接访问内存。

因此,通过在 Java 中不包括指针来提供一定程度的抽象。此外,指针的使用会使垃圾收集过程变得非常缓慢和错误。Java 使用引用,因为这些不能被操纵,不像指针。

7. java中变量和实例的默认值是什么?

java中的变量没有默认值。我们需要在使用它之前初始化该值。否则会抛出编译错误(变量可能未初始化)。

但是例如,如果我们创建对象,则默认值将由默认构造函数根据数据类型进行初始化。

如果它是一个引用,那么它将被分配给 null。

如果它是数字,那么它将分配为 0。

如果它是一个布尔值,那么它将被赋值为 false。等等。

8.Java中如何声明无限循环?

无限循环是那些在没有任何中断条件的情况下无限运行的循环。有意识地声明无限循环的一些例子是:

使用 For 循环:

for (;;)
{
   // Business logic
   // Any break logic
}

使用 while 循环:

while(true){
   // Business logic
   // Any break logic
}

使用 do-while 循环:

do{
   // Business logic
   // Any break logic
}while(true);

9.简述构造函数重载的概念

构造函数重载是在同名但构造函数参数不同的类中创建多个构造函数的过程。根据参数的数量及其对应的类型,不同类型的构造函数的区分由编译器完成。

class Hospital {
int variable1, variable2;
double variable3;
public Hospital(int doctors, int nurses) {
 variable1 = doctors;
 variable2 = nurses;
}
public Hospital(int doctors) {
 variable1 = doctors;
}
public Hospital(double salaries) {
 variable3 = salaries
}
}

这里定义了三个构造函数,但它们根据参数类型及其数量而有所不同。

10.在java中定义复制构造函数。

Copy Constructor 是当我们想将值从同一个类的旧对象初始化到新对象时使用的构造函数。

class InterviewBit{
   String department;
   String service;
   InterviewBit(InterviewBit ib){
       this.departments = ib.departments;
       this.services = ib.services;
   }
}

在这里,我们从构造函数中的旧对象值初始化新对象值。虽然,这也可以在对象克隆的帮助下实现。

11.一个Java程序中可以同时存在一个try块和多个catch块。解释。

是的,可以存在多个 catch 块,但特定方法应该先于一般方法,因为只有满足 catch 条件的第一个 catch 块被执行。给定的代码说明了相同的情况:

public class MultipleCatch {
public static void main(String args[]) {
 try {
  int n = 1000, x = 0;
  int arr[] = new int[n];
  for (int i = 0; i <= n; i++) {
   arr[i] = i / x;
  }
 }
 catch (ArrayIndexOutOfBoundsException exception) {
  System.out.println("1st block = ArrayIndexOutOfBoundsException");
 }
 catch (ArithmeticException exception) {
  System.out.println("2nd block = ArithmeticException");
 }
 catch (Exception exception) {
  System.out.println("3rd block = Exception");
 }
}
}

在这里,第二个 catch 块将因为除以 0 (i / x) 而被执行。如果 x 大于 0,则将执行第一个 catch 块,因为 for 循环运行到 i = n 并且数组索引直到 n-1。

12.解释final关键字在变量、方法和类中的使用。

在 Java 中,final 关键字用于定义常量 /final 并表示非访问修饰符。

最终变量:

当一个变量在 Java 中声明为 final 时,它的值一旦被赋值就不能被修改。

如果任何值尚未分配给该变量,则只能由类的构造函数分配。

最终方法:

声明为 final 的方法不能被其子类覆盖。

构造函数不能被标记为最终的,因为无论何时继承一个类,构造函数都不会被继承。因此,将其标记为最终没有意义。Java抛出编译错误说 -modifier final not allowed here

最后一课:

不能从声明为 final 的类继承任何类。但是该最终类可以扩展其他类以供其使用。

13.'finally' 块是否可能不会被执行?如果是,请列出案例。

是的。'finally' 块可能不会被执行。这些案例是——

假设我们在上面的语句中使用System.exit() 。

如果出现堆栈溢出、内存访问错误等致命错误。

14.以下哪项会产生编译时错误?说出原因。

int[] n1 = 新的 int[0];

布尔[] n2 = 新布尔[-200];

双[] n3 = 新双[2241423798];

字符[] ch = 新字符[20];

我们在第 3 行得到一个编译时错误。我们将在第 3 行得到的错误是 - integer number too large。这是因为数组需要大小为整数。Integer 在内存中占用 4 个字节。并且数字(2241423798)超出了整数的容量。我们可以声明的最大数组大小是 - ( 2147483647 )。

因为数组需要整数大小,所以没有一行(1、2 和 4)会给出编译时错误。该程序将编译良好。但是我们在第 2 行得到了运行时异常。异常是 - NegativeArraySizeException。

这里会发生什么 - 当 JVM 在运行时分配所需的内存时,它会发现大小为负。并且数组大小不能为负数。所以JVM会抛出异常。

15.HashSet 与 TreeSet 有何不同?

尽管 HashSet 和 TreeSet 都没有同步并确保不存在重复项,但有一些属性可以将 HashSet 与 TreeSet 区分开来。

实现:对于HashSet,哈希表用于无序存储元素。然而,TreeSet 使用红黑树以有序的方式存储元素。

复杂性/性能:对于添加、检索和删除元素,HashSet 的时间摊销复杂度为 O(1)。对于 TreeSet,执行相同操作的时间复杂度稍高一些,等于 O(log n)。总体而言,HashSet 的性能比 TreeSet 更快。

方法: hashCode() 和 equals() 是 HashSet 用于在对象之间进行比较的方法。相反,TreeSet 使用 compareTo() 和 compare() 方法来促进对象比较。

对象类型:可以借助 HashSet 存储异构和空对象。在 TreeSet 的情况下,插入异构对象或空对象时会发生运行时异常。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>