Java main()方法面试问题及答案

x33g5p2x  于2022-10-07 转载在 Java  
字(2.7k)|赞(0)|评价(0)|浏览(539)

在这篇文章中,我们将讨论经常被问到的Java main()方法面试问题及答案,供应届生和有经验者参考。

我们知道,Javamain()方法是任何Java程序的入口。它的语法总是public static void main(String[] args)。 

Java main()方法面试问题与答案

我们将讨论以下8个Java main()面试问题和答案。

  1. 为什么main()方法是公共静态的?
  2. 我们可以在Java中重载main()方法吗?
  3. 我们可以把main()方法声明为私有的或受保护的或没有访问修饰的吗?
  4. 我们可以把main()方法声明为非静态的吗?
  5. 我们可以改变main()方法的返回类型吗?
  6. main()方法可以接受字符串数组以外的参数吗?
  7. 我们可以在没有main()方法的情况下运行定义的Java类吗?
  8. 我们可以在Java中把main变成final吗?

我将用实例来证明上述所有问题。

1. 为什么main()方法是公共静态的?

首先,我们来看看为什么main()方法在Java中是静态的?main()方法在Java中是静态的,所以JVM可以直接调用它而不需要实例化类的对象。

如果main()方法是非静态的,那么JVM就需要创建一个类的实例,如果该类的构造函数需要一个参数,就会产生歧义--JVM应该调用哪个构造函数,应该传递哪些参数?我们知道,如果不调用一个构造函数方法,JVM就不能实例化一个Java类。 
下面的例子说明了为什么main()方法在Java中是静态的? 

package net.javaguides.corejava;

public class MainMethodDemo {

    public MainMethodDemo(int arg0) {
        //One argument constructor
    }

    public MainMethodDemo(int arg0, int arg1) {
        //Two arguments constructor
    }

    public MainMethodDemo(String arg[]) {

    }

    public void main(String...args) {
        //Non Static main method
    }
}

现在,让我们看看为什么main()方法是公共的?

我们知道,任何人都可以访问/调用具有public访问指定符的方法。在Java中,main()方法是公开的,因为它必须被JVM调用。所以,如果main()在Java中不是公共的,JVM就不会调用它。

2. 我们可以在Java中重载main()方法吗?

是的,我们可以重载main()方法。一个Java类可以有任意数量的main()方法。但要运行java类,该类应该有一个main()方法,其签名为public static void main(String[] args)

下图显示了main()method可以被重载。

让我们看一个简单的例子来证明main()可以被重载。

package net.javaguides.corejava;

import java.util.Arrays;

public class MainMethodDemo {

    /** Actual main method with String[] args**/
    public static void main(String[] args) {
        System.out.println("String[] args main method called");
        main(new Double[] {
            1.0,
            2.0,
            3.0
        });
    }

    /** Overloaded main method with Double[] args**/
    public static void main(Double[] args) {
        System.out.println("Double[] args main method called");
        System.out.println(Arrays.toString(args));
    }
}

输出。

String[] args main method called
Double[] args main method called
[1.0, 2.0, 3.0]

3. 我们可以将main()方法声明为private或protected或没有访问修饰符吗?

不行,main()方法必须是公共的。你不能把main()方法定义为私有的或受保护的**或没有访问修饰符。这是因为要使main()方法能够被JVM访问。 

下图显示了运行时的错误,如果你将main()方法定义为public以外的方法。

4. 我们可以将main()方法声明为非静态的吗?

不可以,main()方法必须被声明为static,这样JVM就可以调用main()方法而不需要实例化其类。如果你把main()方法签名中的 "static "去掉,编译就会成功,但程序在运行时就会失败。 

下图展示了main()方法应该是静态的,否则JVM会抛出运行时错误。

5. 我们可以改变main()方法的返回类型吗?

不能,main()方法的返回类型必须是void。任何其他类型都是不能接受的。 

下图展示了main()方法应该有一个void的返回类型。

6. main()方法可以接受String数组以外的参数吗?

不能,main()方法的参数必须是一个字符串数组。但是,从var args的引入来看,可以将字符串类型的var args作为参数传给main()方法。同样,var args也不过是数组。 

下图显示了main()方法的参数应该是字符串数组或var args。

7. 我们可以在没有main()方法的情况下运行定义的Java类吗?

不能,从Java 7开始,我们不能在没有main()方法的情况下定义一个类。在以前的Java版本中,我们可以用Static Initializers作为替代。

public class MainMethodDemo
{
    static
    {
        System.out.println("Static Initalizer");
        System.exit(0);
    }
}

输出。(从JDK 7开始)

Error: Main method not found in class Test, please define the main method as:
   public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application

输出结果。(JDK 6)

Static Initalizer

8. 我们可以在Java中把main变成final吗?

是的,你可以把main()方法变成final。 

下图展示了我们可以在Java中把main()方法设为final。

相关文章