发布于 2026-01-06 1 阅读
0

Java开发人员面试中你绝对应该知道的21个常见问题

Java开发人员面试中你绝对应该知道的21个常见问题

Java面试题种类繁多,我们无法在一篇文章中全部列举。不过,根据IT公司人力资源经理的说法,这里列出了一些非常常见的Java面试题。

1.“拆卸” public static void main(String args[])

这是Java面试中常见的一道题,尤其适合应届毕业生,而且比较简单。

  • public这是一个访问修饰符。我们用它来指定对该方法的访问权限。这里的修饰符是“public”,因此任何类都可以访问此方法。
  • static.这个 Java 关键字表示我们使用此方法时不会创建新的类对象。
  • Void这是方法的返回类型。这意味着该方法不返回任何值。
  • main`main` 是方法的名称。JVM 将其识别为应用程序的入口点(它应该具有特定的签名)。`main` 是主要执行发生的方法。
  • String args[].这是传递给主方法的参数。这里列出的是 Java 应用程序运行时接受的字符串类型的参数。您可以在终端中输入这些参数。

equals()2.和之间有什么区别==

首先,“ ==”是一个运算符,而是equals()一个方法。我们使用==运算符进行引用比较(或地址比较),equals()使用方法进行内容比较。这意味着运算符==检查两个对象是否指向同一内存位置,而equals()方法比较对象中的值。

main()3. 我们可以执行一个没有方法的程序吗?

很多Java基础面试题都很简单,比如这道题。所以简而言之:是的,我们可以。例如,我们可以使用静态代码块来实现。

您可以使用静态代码块来初始化静态数据成员。它会main在类加载时,在方法执行之前执行。

class Example{
 Static{ 
System.out.println("static block is invoked"); 
} 
  public static void main(String args[]){ 
   System.out.println("Now main method"); 
  } 
}
Enter fullscreen mode Exit fullscreen mode

输出结果为:

**static** block is invoked 
Now main method
Enter fullscreen mode Exit fullscreen mode

如果完全没有 main 方法会怎样?如果您尝试运行一个完全没有 main 方法的普通类,您会收到以下错误:

类 Test 中未找到 main 方法,请将 main 方法定义为:public static void main (String [] args)或者 JavaFX 应用程序类必须继承自javafx.application.Application
错误信息本身表明,如果这是一个 JavaFX 应用程序,并且该类继承自javafx.application.Application,那么就可以实现。

4. 什么是immutable对象?你能创建immutable对象吗?

类中的对象创建后就无法修改immutable。也就是说,一旦创建了对象,就不能更改它。如果尝试修改Immutable对象,系统会创建一个新对象(克隆),然后在创建过程中修改这个克隆对象。

一个很好的例子是Java 中的 ` StringObject` 类immutable。这意味着你不能修改对象本身,但你可以修改对该对象的引用。

5. 以下代码创建了多少个对象?

Java 技术面试题之一,可替代第 4 题。

String s1="Hello"; 
String s2="Hello"; 
String s3="Hello";

Enter fullscreen mode Exit fullscreen mode

答案是“只有一个”,因为 Java 有一个字符串池。当我们使用 ` new()new` 运算符创建一个字符串对象时,它会在堆内存中创建一个新对象。如果我们使用字符串字面量语法(就像我们示例中那样),它可能会从字符串池中返回一个已存在的对象(如果该对象已存在)。

6. 以下代码创建了多少个对象?

String s = new String("Hello");
Enter fullscreen mode Exit fullscreen mode

这里有两个对象。一个在字符串常量池中,另一个在堆中。

String7. Java 中的类StringBuilderStringBuffer之间有什么区别?

这是顶尖的Java面试题之一。

首先,`String`String是一个不可变类。这意味着一旦创建,就无法修改其内容。而 `String`StringBuffer和 ` StringBuilderT` 是可变类,因此可以稍后修改。如果我们修改 `String` 对象的内容String,它会创建一个新的字符串,因此不会修改原始字符串。这就是为什么 `String` 的性能StringBuffer优于 `T` 的原因String

两者之间的主要区别在于StringBuffer, ` StringBuilders`StringBuffer的方法是同步的,而StringBuilder`s` 的则不是。

String8.使用字面量和 with 运算符创建的内容有什么区别new()

是的。如果我们使用运算符创建字符串,new()它会出现在堆中,而不会添加到字符串池中。如果使用String字面量创建字符串,它会创建String在堆的永久区(Perm)中的字符串池中。

9. Java 中可以重写privateorstatic方法吗?

这是Java新手面试中容易遇到的棘手问题之一。在Java中,你真的不能重写private方法static

您无法重写private方法,因为私有访问说明符的作用域仅限于类内部。要重写某些方法,必须存在父类和子类。如果父类的方法被声明为私有private,子类就无法使用它,子类中的方法将被视为新方法(而非被重写的方法)。

Static方法也不能被重写,因为static方法是类本身的一部分,而不是类的任何对象的一部分。当然,你可以static在子类中声明具有相同签名的方法,但它们会被视为新方法。

10.Abstract Class两者之间的区别Interface

这是Java开发人员面试中常见的考题之一,它与面向对象编程(OOP)原则密切相关。首先,在Java中,interface定义行为并abstract class创建层次结构。

11. 我们可以在类中声明static变量和方法吗abstract

是的,可以static在方法内部声明变量和方法abstract。访问静态上下文不需要创建对象。因此,我们可以abstract使用类名来访问类内部声明的静态上下文abstract

12. JVM 分配哪些类型的内存区域?

类区域存储每个类的结构,例如运行时常量池、字段、方法数据以及所有方法的代码。

是运行时数据区域,用于为对象分配内存。

用于存储帧。它包含局部变量和部分结果,并参与方法的调用和返回。每个线程都有一个私有的 JVM 栈,该栈与线程同时创建。每次调用方法时都会创建一个新的帧。当方法调用完成时,帧会被销毁。

程序计数器寄存器包含当前正在执行的 Java 虚拟机指令的地址。

本地方法栈包含应用程序中使用的所有本地方法。

13. 为什么Java中不允许多重继承?

这会非常复杂。想象一下有三个类A:`A`、 ` B`B`C`,它们分别继承了`A` 和 `B` 。现在, `A``C` 类有一个相同的方法,如果你从子类对象中调用它……应该调用哪个类呢?是`A` 的还是`B` 的?这里存在歧义。如果你试图继承两个类,Java 会报编译时错误。CCABABAB

14. 我们能否重载该main()方法?

当然,Java 程序中可以有多个主方法,这可以通过方法重载来实现。试试看!

15. 我们能否将构造函数声明为final

不行。构造函数不能声明为 `<T>`,final因为它不能被继承。所以把构造函数声明为 `<T>` 是没有意义的final。但是,如果你尝试这样做,Java 编译器会报错。

16. 我们能否将接口声明为final

不,我们不能这样做。接口不能被定义,final因为根据定义,接口必须由某个类来实现。因此,创建接口是没有意义的final。但是,如果你尝试这样做,编译器会报错。

static binding17.和有什么区别dynamic binding

binding编译器在编译时可以解析的参数称为早期static绑定。Binding所有参数的static解析privatefinal方法都在编译时完成。

编译器Dynamic binding无法选择要调用的方法。重写方法就是一个典型的例子dynamic binding。在重写中,父类和子类都拥有相同的方法。

Static Binding 
class Cat{ 
 private void talk() 
{System.out.println("cat is mewing..."); 
} 
</code>
<code> public static void main(String args[]){ 
  Cat cat=new Cat(); 
  cat.talk(); 
 } 
} </code>
<code>Dynamic Binding 
class Animal{ 
 void talk(){ 
System.out.println("animal is talking..."); 
} 
} </code>
<code>class Cat extends Animal{ 
 void talk(){ 
System.out.println("cat is talking...");
} </code>
<code> public static void main(String args[]){ 
  Animal animal=new Cat(); 
  animal.talk(); 
 } 
}
Enter fullscreen mode Exit fullscreen mode

18. 如何在 Java 中创建只读类?

你可以通过将类的所有字段设为私有来实现这一点。只读类只有getter方法,这些方法会将类的私有属性返回给该main方法。你无法修改此属性,原因是缺少setter方法。

public class HockeyPlayer{ 
private String team ="Maple leaf"; 
public String getTeam(){ 
return team; 
} 
}
Enter fullscreen mode Exit fullscreen mode

19. 如何在 Java 中创建只写类?

同样,你应该将类的所有字段都设为只写private。现在,你的只写类应该只有 setter 方法,而没有 getter 方法。因此,我们无法读取该类的属性。

public class HockeyPlayer{ 
private String team; 
public void setTeam(String college){ 
this.team = team; 
} 
}
Enter fullscreen mode Exit fullscreen mode

20. 每个try代码块后面都必须跟一个catch代码块,对吧?

不,这不是必须的。每个 try 代码块都可以没有 catch 代码块。它后面可以跟一个catchblockfinally 代码块,或者一个 catch 代码块,甚至可以完全不跟它们。

public class Main{ 
     public static void main(String []args){ 
        try{ 
            int variable = 1; 
            System.out.println(variable/0); 
        } 
        finally 
        { 
            System.out.println("the other part of the program..."); 
        } 
     } 
}
Enter fullscreen mode Exit fullscreen mode

输出:

class Main {
        public static void main(String[] args) throws IOException {
            try(InputStreamReader inputStreamReader = new InputStreamReader(System.in);
                BufferedReader reader = new BufferedReader(inputStreamReader)){
                System.out.println("test");
            }
        }
    }
Enter fullscreen mode Exit fullscreen mode

PS:在 Java 8 之前,接口中的方法只能是抽象的。在 Java 8 或更高版本中,可以定义默认方法并在接口中直接实现它们。

throw21.和throws关键词之间有什么区别?

Throws用于声明异常,因此它的工作方式类似于try-catch代码块。Throw关键字用于从方法或任何其他代码块中显式抛出异常。

Throw后面跟着类的实例Exception,throws 后面跟着异常类名。

Throw在方法体中用于抛出异常。Throws在方法签名中用于声明方法语句中可能发生的异常。

一次只能抛出一个异常,但您可以使用throw关键字声明多个异常来处理它们。您可以声明多个异常,例如:`Exception`、`Exception` public void method()throws IOException、` Exception` SQLException

这里我们只列举了一些Java面试题及答案。本文是面试系列文章的第一篇。下一篇(即将推出)将介绍数据结构方面的问题。

最初发表于CodeGym 博客

文章来源:https://dev.to/codegym_cc/top-21-interview-questions-for-java-developers-you-totally-should-know-4n3l