这个问题困扰我好久了,今天就一查究竟,毕竟我好奇心比较重

1. why “public”

因为java程序是通过jvm虚拟机调用的,所以main()函数要是想被调用,必须是public

2.why “static”

在java中,没有static的变量或函数,如果想被调用的话,是要先新建一个对象才可以。而main函数作为程序的入口,需要在其它函数实例化之前就启动,这也就是为什么要加一个static。main函数好比一个门,要探索其它函数要先从门进入程序。static提供了这样一个特性,无需建立对象,就可以启动。

3.why “(String[] args)”?

(1)先来说说,为什么这个字符串数组要叫“args”,其实这个是约定俗成的一种命名,不叫"args"叫其它的也是ok的,不信可以自行测试。

(2)再来看看为什么要是一个String的数组,java在运行的时候是这样的(如下),有点像命令行,a1,a2,a3就是这个String数组里的命令。

java main a1 a2 a3

下面我们在深入到jvm驱动里面看看,main()函数是怎样被启动的:

mainID = (*env)->GetStaticMethodID(env, mainClass, "main", "([Ljava/lang/String;)V");

这是jvm启动时的代码,直接去找static的,参数为String数组的main方法。

作者微信公众号:凡人机器学习

长期分享机器学习实战相关信息,感谢关注!

/********************************

* 本文来自博客  “李博Garvin“

* 转载请标明出处:http://blog.csdn.net/buptgshengod

******************************************/

java的main函数为什么是public static void main(String[] args)相关推荐

  1. 【Java】错误: 在类 Test1.Test2 中找不到 main 方法, 请将 main 方法定义为:    public static void main(String[] args)的解决方案

    问题:运行Java程序的时候碰到如下问题 错误: 在类 Test1.Test2 中找不到 main 方法, 请将 main 方法定义为:    public static void main(Stri ...

  2. 错误: 在类中找不到 main 方法, 请将 main 方法定义为:public static void main(String[] args)否则 JavaFX 应用程序类必须扩展javafx.ap

    最近在使用eclipse编写java程序时遇到这样一个问题: 错误在类中找不到main方法,请将main方法定义为 public static void main(String[] args)否则 J ...

  3. 错误: 在类 shiyan.Triangle 中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args)

    程序运行不了 import java.util.Scanner; public class Triangle {     public static void mian(String[] args) ...

  4. JAVA 错误: 在类 com.runoob.test.HelloWord 中找不到 main 方法, 请将 main 方法定义为: public static void main(String

    解决方法: eclipse->windows->preferences->Run/Debug->Launching 将第一个改为always就可以了

  5. 解决eclipse报错:错误: 在类中找不到 main 方法, 请将 main 方法定义为:public static void main(String[] args)

    事件:刚才在eclipse新建了一个类,然后执行了main方法,就报错了 分析: 1.我的class内容如下: 2.于是查了一下,看了第一篇文章,尝试了一下解决了这个问题,原文链接 解决:eclips ...

  6. Java中的主类概念以及public static void main方法的分析

    1. 首先一定要有main()函数,不然你说从哪个函数开始执行呢 2. 包含main函数的类名不需要和文件名一致 因为字节码文件名只和类名有关,执行java程序时,也只是"java 类名&q ...

  7. 关于public class 类名{ public static void main(String[] args)}的一些说明

    Test.java /*1.在java中任何有效的代码必须写到"类体"当中,最外层必须是一个类的定义.2.public表示公开的,class表示定义一个类,Test是一个类名.类名 ...

  8. Java工程中的主函数public static void main(String[] args)

    Java工程中的主函数 主函数简介 主函数声明中各关键词的作用 public static void String[] args 一个Java工程中可以有多个主函数 平时写java project的时 ...

  9. java中main方法前的public static void及其后面的(String[] args)【笔记自用】

    为什么Java的main方法必须是public static void? 一. void 如下,像C, C++一样,将返回值类型改为int,再返回一个0,虽然编译通过,但是运行时会报错. 找到一种可理 ...

最新文章

  1. xtrabackup-工作原理
  2. 《编译与反编译技术实战》——2.1节编译器、解释器及其工作方式
  3. linux 文件读取 监控,linux 文件系统的监控
  4. python scipy optimize_scipy.optimize.fminbound:设置参数的界限
  5. openGauss 正式开源并成立开源社区
  6. Java泛型程序设计
  7. spring jdbcTemplate中获取jdbc Connection并执行操作
  8. iOS ijkplayer 硬解H265(hevc)4k视频问题解决
  9. Linux 入门必备命令
  10. 十大热门编程语言优缺点对比
  11. 实战 | 航空公司客户价值分析-LRFCM模型
  12. 家谱制作软件如何成谱编修流程
  13. 全国通用 专升本计算机基础(简答题背诵可用)
  14. 汇编语言 王爽第二版 总结
  15. apache-maven-3.8.5配置
  16. 认证疑难问题分析报告
  17. html5 link prefetch,dns预获取(dns-prefetch)link rel="dns-prefetch"优化载入速度
  18. 算法 图1 列出连通集
  19. Vue快速入门(狂神版)
  20. BEM实战之扒一扒淘票票页面

热门文章

  1. leetcode 279. 完全平方数 bfs广度优先解法 图解 动态规划解法 c代码
  2. 向一个有N个元素的顺序表中插入一个元素,平均要移动的次数为多少
  3. android 7 蓝牙版本,[Android]Android什么版本开始支持蓝牙4.2?答案:Android 7.0
  4. oracle 新建路径,Linux环境安装Oracle11g(三)——用户、路径创建及配置环境变量
  5. flex 平铺布局_CSS3 Flex布局(伸缩布局盒模型)学习
  6. java xsl生成word文件_导出生成xsl文件
  7. centos7 python3 sqlserver_Centos7.3下SQLServer安装配置方法图文教程
  8. go int 最大值_Dig101 - Go之灵活的slice
  9. php pdo bind,PHPPDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别_php技巧
  10. linux 指定时间加3天,Linux系统的定时任务和延时任务