CodeGym /Java 博客 /随机的 /前 21 个 Java 面试问题
John Squirrels
第 41 级
San Francisco

前 21 个 Java 面试问题

已在 随机的 群组中发布
Java面试题数不胜数,无法在一篇文章中囊括所有。然而,根据 IT 公司的人力资源经理的说法,您可以在这里找到一些非常常见的 Java 面试问题。 前 21 个 Java 面试问题 - 1
  1. “拆卸” public static void main(String args[])

    新生最流行的 Java 面试问题之一,而且非常简单。

    • public是访问修饰符。我们用它来指定访问这个方法。这里修饰符是“public”,所以任何类都可以访问这个方法。

    • static. 这个 Java 关键字意味着我们在不创建类的新对象的情况下使用此方法。

    • Void是方法的返回类型。这意味着该方法不返回任何值。

    • main是方法的名称。JVM“知道”它是应用程序的入口点(它应该有一个特定的签名)。Main是主要执行发生的方法。

    • String args[]. 这是传递给 main 方法的参数。这里我们有 Java 应用程序在运行时接受的 String 类型的参数。您可以在终端上输入它们。

  2. equals()和 和有什么不一样==

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

  3. 我们可以在没有方法的情况下执行程序吗main()

    很多java基础面试题真的很简单。像这个。简短的回答是:是的,我们可以。例如,我们可以使用静态块来做到这一点。

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

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

    输出是:

    
    static block is invoked
    Now main method
    
  4. 总的 main 方法不存在怎么办?如果您尝试运行一个根本没有 main 方法的普通类,则会出现下一个错误:Main method not found in class Test,请将 main 方法定义为:public static void main (String [] args) 或 JavaFX 应用程序类必须扩展 javafx.application.Application。该错误本身表明,如果这是一个 JavaFX 应用程序并且该类是从 javafx.application.Application 继承的,那么它是可能的。
  5. 什么是immutable对象?你能创建immutable对象吗?

    您不能immutable在创建后修改类的对象。因此,一旦创建它们,就无法更改它们。如果您尝试修改Immutable对象,您会得到一个新对象(克隆)并在创建时更改此克隆。

    一个很好的例子是String,它是immutable用 Java 编写的。这意味着您不能更改对象本身,但可以更改对该对象的引用。

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

    替代#4 的 Java 技术面试问题之一。

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

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

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

    
    String s = new String("Hello");
    

    有 2 个对象。一个在字符串常量池中(如果不存在的话),另一个在堆中。

  8. StringJava 中的类和StringBuilder类之间有什么区别StringBuffer

    在顶级 Java 面试问题中有一位领导者。

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

    StringBufferStringBuilderthatStringBuffer的方法之间的主要区别是同步的,而StringBuilder's 不是。

  9. String使用文字和使用运算符创建的有什么区别吗new()

    有。如果我们使用new()运算符创建一个 String,它会出现在堆和字符串池中(如果不存在的话)。如果您String使用文字创建一个,它会在字符串池中创建(如果不存在的话)。字符串池是堆内的一个存储区域,用于存储字符串文字。

  10. 您可以在 Java 中覆盖private或方法吗?static

    新手的 java 棘手面试问题之一。您真的不能在 Java 中重写privatestatic方法。

    您不能覆盖这些private方法,因为私有访问说明符的范围仅在类内。当你要覆盖某些东西时,我们应该有父类和子类。如果父类的方法是private,则子类不能使用它,子类中的方法将被视为新方法(不会被覆盖)。

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

  11. Abstract Class和之间的区别Interface

    与 OOP 原则相关的流行 Java 开发人员面试问题之一。首先,在 Java 中interface定义一个行为并abstract class创建层次结构。

    抽象类 界面
    抽象类中可以有一个方法体(非抽象方法) 接口只能有抽象方法。在 Java 8 或更新版本中,可以定义默认方法并直接在接口中实现它们。此外,Java 8 中的接口可以有静态方法。
    实例变量可以在抽象类中 接口不能有实例变量。
    允许构造函数 接口不能有任何构造函数。
    允许静态方法 不允许使用静态方法
    类只能有一个抽象父类 一个接口可以实现不同的类
    抽象类可以提供接口的实现。 接口不能提供抽象类的实现。
    允许抽象类扩展其他 Java 类并实现多个 Java 接口。 一个接口只允许扩展另一个 Java 接口。
    Java 抽象类可以有私有和受保护的类成员 默认情况下,Java 接口的成员是公共的
  12. 我们可以static在类中声明变量和方法吗abstract

    是的,可以static在方法中声明变量和方法abstract。不需要使对象访问静态上下文。所以我们可以abstract通过类名访问类内部声明的静态上下文abstract

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

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

    是一个运行时数据区域,内存分配给对象。

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

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

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

  14. 为什么java中不允许多重继承?

    这真的很复杂。想象三个类A, B,CC继承Aand B。现在,AB具有相同的方法,您可以从子类对象调用它……哪个?A的还是B?这里我们有歧义。

    如果您尝试继承两个类,Java 会呈现编译时错误。

  15. 我们可以重载该main()方法吗?

    当然,通过使用方法重载,我们可以main在 Java 程序中拥有许多方法。试试看!

  16. 我们可以将构造函数声明为吗final

    没有。构造函数不能声明为 afinal因为它不能被继承。所以将构造函数声明为final. 但是,如果您尝试这样做,Java 编译器会向您抛出一个错误。

  17. 我们可以将接口声明为吗final

    不,我们不能这样做。接口不能是final因为接口应该由某个类根据其定义来实现。所以做接口是没有意义的final。但是,如果您尝试这样做,编译器将显示错误。

  18. static binding和 和有什么不一样dynamic binding

    可以由编译器binding在编译时解析的调用static或早期绑定。Binding所有static,privatefinal方法都是在编译时完成的。

    Dynamic binding编译器中无法选择要调用的方法。覆盖是一个完美的例子dynamic binding。重写父类和子类具有相同的方法。

    
    Static Binding
    class Cat{  
     private void talk()
    {System.out.println("cat is mewing...");
    }  
      
     public static void main(String args[]){  
      Cat cat=new Cat();  
      cat.talk();  
     }  
    }  
    Dynamic Binding
    class Animal{  
     void talk(){
    System.out.println("animal is talking...");
    }  
    }  
      
    class Cat extends Animal{  
     void talk(){
    System.out.println("cat is talking...");
    }    
     public static void main(String args[]){  
      Animal animal=new Cat();  
      animal.talk();  
     }  
    }
    
  19. 如何在 Java 中创建只读类?

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

    
    public class HockeyPlayer{    
    private String team ="Maple leaf";    
    public String getTeam(){    
    return team;    
    }    
    }
    
  20. 如何在 Java 中创建只写类?

    同样,您应该制作所有课程的字段private。现在,您的只写类应该只有 setter 方法而没有 getter。因此,我们无法读取类的属性。

    
    public class HockeyPlayer{       
    private String team;    
    public void setTeam(String college){    
    this.team = team;    
    }    
    }    
    
  21. 每个try块后面必须跟一个catch块,不是吗?

    没有。这不是必须的。每个try块可以没有catch块。它后面可以跟一个 catch 块或 finally 块,甚至根本没有它们。

    
    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...");  
            }  
         }  
    }
    

    输出:

    
    Exception in thread main java.lang.ArithmeticException:/ by zero
    the other part of the program...
    

    再举一个例子:
    
    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");
                }
            }
        }
    

    输出:

    
    test
    

    PS:在 Java 8 之前,接口中的方法只能是抽象的。在 Java 8 或更新版本中,可以定义默认方法并直接在接口中实现它们。
  22. throw和关键字有什么区别throws

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

    Throw后跟一个Exception类的实例,throws 后跟异常类名。

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

    允许一次抛出一个异常,但您可以通过使用throw关键字声明它们来处理多个异常。您可以声明多个异常,例如,public void method()throws IOException, SQLException

这里我们只有几个java面试问题和答案。本文是访谈系列的第一篇。下一个(即将推出)是关于数据结构的问题。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION