java中的main_Java中的main方法

在一个Java应用程序中,通常程序的入口是一个main方法,它被声明为公有静态方法,参数是一个字符串数组,返回值为Void类型。这个方法有许多值得研究的地方,今天就来浅显的测试一些用例,看看main方法在不同情况下的表现。

一、main方法的第一个参数

public class TestMain{

public static void main(String[] args){

System.out.println(args[0]);

}

}如上这段代码,是最基本的Java类结构。在这个TestMain类中,仅仅存在一个main方法,main方法也只有一行代码:打印字符串数组参数中的第一个参数。先看下运行结果:

cdc10a6a4a3cb887fac23f9d0b3a5205.png

可以看出,在Java中,命令行传入的参数保存在main方法的参数args中。与C/C++不同的是,args中并不包含程序名称。

二、不提供参数的main方法

public class TestMain{

public static void main(){

System.out.println("Success!");

}

}如上代码,没有给main方法提供args参数。首先要关注的是,这样一个程序,是否能够编译通过,其次才是它的运行结果。

75dec9862750762f48e2c77e65ffcca4.png

显然,没有字符串数组参数的main方法可以编译通过,但在执行时却抛出了NoSuchMethodError异常,提示找不到主方法。

三、私有的main方法

public class TestMain{

private static void main(String[] args){

System.out.println("Hello World!");

}

}这段代码中,main方法的修饰符改为了private,即私有方法。来看下编译和运行结果:

593a5b72e5ae5e8437da14a7da6a380f.png

与无参的main方法一样,

私有的main方法也可以编译通过,同样在运行期抛出了NoSunchMenthodError异常。

四、非静态main方法

public class TestMain{

public void main(String[] args){

System.out.println("Hello World!");

}

}非静态main方法是移除了main方法前的修饰符static后的方法,首先看下编译和运行情况:

59237e6916d0dab97063064f49044989.png

同样的,

没有static修饰的main方法也可以编译通过,在运行期抛出了main方法不是类中的static方法错误。

五、返回类型为int的main方法

public class TestMain{

public static int main(String[] args){

System.out.println("Hello World!");

return 0;

}

}在C/C++中,main函数可以不指定返回类型,也可以指定返回类型为void或int,甚至推荐指定main函数的返回类型为int。如果在Java中指定main方法的返回类型为int,结果会是怎么样的呢?

f627fc86fbd3ea4c31a30f994aaaf253.png

很遗憾,

在Java中,main方法的返回类型必须为void,其它返回类型都会导致编译后的程序,在运行期抛出main方法返回类型必须为空类型的错误。

六、省略void的main方法

public class TestMain{

public static main(String[] args){

System.out.println("Hello World!");

}

}C/C++中main方法可以省略void,如果在Java中也省略void,结果又是怎么样的呢?

bb952d6986542189403f9d16e19e1ea2.png

可以看出,

不提供void返回类型的main方法,在编译期就抛出了方法声明无效,需要返回类型的错误。

七、不带参数的命令行,main方法的数组参数是null还是空数组

public class TestMain{

public static void main(String[] args){

String result = null == args ? "NULL" : ("length of args is" + args.length);

System.out.println(result);

}

}上面这个测试中,如果main方法的字符串数组参数args为null,输出NULL,否则就输出args的长度。

93bbb8169edc5fd42436800155c8f5f4.png

如上,

main方法的字符串数组参数,即使在命令行运行时没有传入参数,也不会是null,它会是一个长度为0的空数组。

版权声明:本文为博主原创文章,未经博主允许不得转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值