main()主函数再熟悉不过,了解java的人也都知道System.exit()方法是停止虚拟机运行。那这里为什么还要单独写一篇博客,都是源于朋友发的一张最近刚买的T恤照片,就是上面这张图。这是一个经典的helloworld程序,吸引我的是主函数中最后那句"System.exit(0);",主函数运行结束自然会停止执行机使整个程序退出,那加上一句是否还有必要,有什么区别。这里查阅一下论坛发现有些说法也不够准确,网上随处可见的两条常规结论如下,

1.如果是普通方法(非程序入口,即主函数),那么方法结束是返回到调用位置,程序继续执行;System.exit(0)是停止执行机,将程序停掉。

2.在主函数中,没有区别,加不加都是程序结束。

第一条容易理解,第二条为什么不准确,因为还有这种情况,如下代码,大家看到后应该会恍然大悟我要说明的问题,即主函数启动了一个线程,那么正常情况下主函数会等待线程结束然后结束程序。这里的System.exit(0);加与不加就体现出区别了,加了之后不等待线程执行完,main函数运行到这一句直接将虚拟机停止,程序结束。所以第二条说没有区别并不准确。

public class MainWaitThread {
public static void main(String[] args) {
System.out.println("Hello world");
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Thread start!");
long l = System.currentTimeMillis();
while (System.currentTimeMillis() - l < 10000);
System.out.println("Thread stop!");
}
});
thread.start();
System.exit(0);
}
}

最后说一下System.exit()这个方法,接收一个参数status,0表示正常退出,非零参数表示非正常退出。不管status为何值都会退出程序。和return 相比,return是回到上一层,而System.exit(status)是回到最上层。

main函数中System.exit()的作用的更多相关文章

  1. c++中system("pause")的作用和含义

    简单来说就是暂停的意思,一般在LINUX编程时会用到,等待接收信号,才会重新运行 . 在进行C/C++编程的时候,在运行程序查看输出效果时,会出现窗口闪一下就关闭的情况. 在C语言中一般通过添加get ...

  2. eclipse 中main()函数中的String[] args如何使用?通过String[] args验证账号密码的登录类?静态的主方法怎样才能调用非static的方法——通过生成对象?在类中制作一个方法——能够修改对象的属性值?

    eclipse 中main()函数中的String[] args如何使用? 右击你的项目,选择run as中选择 run configuration,选择arguments总的program argu ...

  3. System.exit(0)作用

    System.exit(0)作用   public class HelloGoodbye{ try{ System.out.println(“Hello World”); System.exit(0) ...

  4. (转)Java程序利用main函数中args参数实现参数的传递

    Java程序利用main函数中args参数实现参数的传递 1.运行Java程序的同时,可以通过输入参数给main函数中的接收参数数组args[],供程序内部使用!即当你在Java命令行后面带上参数,J ...

  5. 38 写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。

    题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度. public class _038PrintLength { public static void main(Stri ...

  6. Main函数中的参数argc,argv的使用简单解析

    本篇文章是对Main函数中的参数argc,argv的使用进行了简单的分析介绍,需要的朋友参考下: C/C++语言中的main函数,经常带有参数argc,argv,如下:  int main(int a ...

  7. 写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度

    import java.util.Scanner; /** * [程序38] * * 题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度. * * @author Jame ...

  8. main函数中argc和argv含义

    在main函数中经常可以看到int main(int argc, char ** argv)的函数头,这里的形参int argc, char ** argv究竟是啥含义呢? &1 int ar ...

  9. 问题:C#控制台程序参数;结果:设置与读取C#控制台应用程序Main函数中的参数args

    设置与读取C#控制台应用程序Main函数中的参数args 在项目属性面版->调试->命令行参数设置.空格分隔.读取:string[] str = Environment.GetComman ...

随机推荐

  1. 在Django中使用logging模块

    一.Django logging配置 1.在setting.py中配置 # 日志文件存放路径 BASE_LOG_DIR = os.path.join(BASE_DIR, "log" ...

  2. license.json

    {"license":{"uid":"5359f3d1-8c8c-462b-a17b-b7eb0c3ddb8f","type&qu ...

  3. Sequence II HDU - 5919(主席树)

    Mr. Frog has an integer sequence of length n, which can be denoted as a1,a2,⋯,ana1,a2,⋯,anThere are ...

  4. 状压DP天秀

    状压DP,依靠的是把状态用某种压缩方式表示出来进而DP,大多数时候是二进制状压. 直接看例题吧. 一双木棋     九尾狐吃棉花糖     islands and bridges 愤怒的小鸟   芯片 ...

  5. 从零开始部署javaWeb项目到阿里云上面

    [详情请看]http://www.cnblogs.com/softidea/p/5271746.html 补充几点特别需要注意的事情 一:putty相当于阿里云的控制台, WinSCP 相当于是专门上 ...

  6. vue常用手册

    1.搭建vue的开发环境: 1.必须要安装node.js 2.安装vue的脚手架工具 官方命令行工具 npm install --global vue-cli 3.新建项目 vue init webp ...

  7. java 简单程序

    public class a{ public static void main(String[] args) { System.out.println("Hello world") ...

  8. JavaXML整理

    XML 浏览器的入口不同(访问路径),访问的资源也不同. 1.1XML语法 1.文档声明必须为<?xml开头,以?>结束; 2.文档声明必须从文档的0行0列位置开始: 3.文档声明只有属性 ...

  9. prometheus rules

    prometheus 持久查询 有三种方法可以使我们的持久查询(不用每次都要输入查询规则): 记录规则  -  从查询中创建新的指标. 警报规则  -  从查询生成警报. 可视化  -  使用像Gra ...

  10. 1.4分布式-通讯协议TCP/IP

    服务器和浏览器的通讯依靠http协议,今天就来分析一下http协议的具体内容以及https的加密过程.除了这些协议,为了增加服务器和浏览器交互的可拓展性,也出现了rest风格的请求方式,方便调用接口. ...