阿里二面:main方法可以继承吗?昨天,微信群里有网友发了自己在群里采访阿里的帖子。在一次采访中,他认识了群里的其他PUA网友。这个面试题是:Java中的main方法可以继承吗?我们刚开始学习Java程序的时候,最先运行的一段代码肯定是main方法。main方法的格式如下:publicstaticvoidmain(String[]args){}那么main方法有什么特别之处呢?今天我们就来简单的看一下。首先定义main方法的格式:“public”:main方法在JVM启动时加载,public的访问权限最高,所以需要声明为public;“static”:方法要么通过对象调用,要么通过类调用,main方法由虚拟机调用,不需要生成对象,可以声明为static;“main”:至于为什么方法名是main,我想应该参考C语言的“void”:当main方法退出时,不需要返回相关的返回值,所以是void;“String[]”:该字符串数组用于接受用户在运行时输入的参数;因为字符字符串在Java中是通用的,所以使用字符串是最好的选择;对于数组,既然我们的参数不止一个,那么数组肯定是合适的;但是,由于JDK1.5引入了动态参数,String[]数组也可以使用String...args来实现。publicstaticvoidmain(String...args){}除了上面JVM规定的特殊的main方法外,其他的main方法和普通的静态方法没有区别。main方法可以重载吗?这是可以的,比如我们为它重载一个方法:}publicstaticvoidmain(String[]args){main("test");}}编译运行,显然没有问题,除了JVM指定的main方法作为应用程序的入口外,其他的main方法都是比较普通的方法。main方法可以被其他方法调用吗?publicclassMain{privatestaticinttimes=3;publicstaticvoidmain2(String[]args){次--;主要(参数);}publicstaticvoidmain(String[]args){printlnSystem.out("主方法执行:"+次);如果(时间<=0){System.exit(0);}main2(args);}}运行代码,可以发现代码可以正常执行:main方法执行:3main方法执行:2main方法执行:1main方法执行:0所以连main方法都作为应用程序的入口可以通过其他方法调用,但是要注意程序关闭的方式,以免陷入死循环。main方法可以继承吗?之前我们学习过类继承的时候,子类可以继承父类的方法和变量,那么当父类定义了main方法,但是子类没有main方法的时候,可以继承main方法父类和正常运行的程序?publicclassMain{publicstaticvoidmain(String[]args){System.out.println("helloworld");}}definesubclass:publicclassMain2extendsMain{}这时候我们运行子类Main2,可以发现,还打印了helloworld,说明main方法也是可以继承的。然后还有一个隐藏的情况,也是显而易见的。子类定义自己的main方法,把实现隐藏在父类中,所以这样也是可以的。publicclassMain2extendsMain{publicstaticvoidmain(String[]args){System.out.println("helloworldMain2");}}这时候会打印子类本身的内容:helloworldMain2。从这个角度来看,除了main方法作为应用程序的入口比较特殊外,其他情况下与普通的静态方法没有区别。
