作者:xwdreamer
出处:http://www.cnblogs.com/xwdreamer
欢迎任何形式的转载,但请务必注明出处。

从写java至今,写的最多的可能就是主函数

public static void main(String[] args) {}

但是以前一直都没有问自己,为什么要这么写,因为在c语言中就没有这样子的要求。其实这是一个不需要解释的问题,因为java标准就是这么规定的,那么既然是java标准规定的,我们按照规定来执行就好了。不过,这并不是一个很好的学习态度,如果总是知其然而不知其所以然,总会对java有种隔膜的感觉。就是发现问题了,不去解决,不去了解为什么,心里总是会有牵绊。今天既然自己都这么问自己了,为什么java的主函数要按照这个格式来写,那么我就得弄明白为什么。

在java中,main()方法是java应用程序的入口方法。java虚拟机通过main方法找到需要启动的运行程序,并且检查main函数所在类是否被java虚拟机装载。如果没有装载,那么就装载该类,并且装载所有相关的其他类。因此程序在运行的时候,第一个执行的方法就是main()方法。通常情况下, 如果要运行一个类的方法,必须首先实例化出来这个类的一个对象,然后通过"对象名.方法名()"的方式来运行方法,但是因为main是程序的入口,这时候还没有实例化对象,因此将main方法声明为static的,这样这个方法就可以直接通过“类名.方法名()”的方式来调用。

实例

 虚拟机通过调用某个指定类的方法main启动,传递给main一个字符串数组参数,使指定的类被装载,同时链接该类所使用的其它的类型,并且初始化它们。例如对于程序:

public class HelloApp {public static void main(String[] args) {System.out.println("Hello World!");for (int i = 0; i < args.length; i++) {System.out.println(args);}}
}

 编译后在命令行模式下键入: java HelloApp run virtual machine

  将通过调用HelloApp的方法main来启动java虚拟机,传递给main一个包含三个字符串"run"、"virtual"、"machine"的数组。现在我们略述虚拟机在执行HelloApp时可能采取的步骤。

  开始试图执行类HelloApp的main方法,发现该类并没有被装载,也就是说虚拟机当前不包含该类的二进制代表,于是虚拟机使用ClassLoader试图寻找这样的二进制代表。如果这个进程失败,则抛出一个异常。类被装载后同时在main方法被调用之前,必须对类HelloApp与其它类型进行链接然后初始化。链接包含三个阶段:检验,准备和解析。检验检查被装载的主类的符号和语义,准备则创建类或接口的静态域以及把这些域初始化为标准的默认值,解析负责检查主类对其它类或接口的符号引用,在这一步它是可选的。类的初始化是对类中声明的静态初始化函数和静态域的初始化构造方法的执行。一个类在初始化之前它的父类必须被初始化。整个过程如下:

转载于:https://www.cnblogs.com/lm3306/p/3274474.html

java中main函数解析相关推荐

  1. java中的de是什么_【转】java中main函数解析

    源地址:http://www.cnblogs.com/xwdreamer/archive/2012/04/09/2438845.html 从写java至今,写的最多的可能就是主函数 public st ...

  2. java中main()函数的返回值是什么_Java中main()函数的返回值类型是什么

    Java中main()函数的返回值类型是什么 答:void 在单纯形表的终表中,若非基变量的检验数有0,那么最优解 答:无穷多 中国大学MOOC: 不属于现代区位理论的是( ) 答:中心地理论 不属于 ...

  3. java中的主函数_java中main函数解析

    从写java至今,写的最多的可能就是主函数 public static void main(String[] args) {} 但是以前一直都没有问自己,为什么要这么写,因为在c语言中就没有这样子的要 ...

  4. main函数 java_java中main函数解析

    从写java至今,写的最多的可能就是主函数 public static void main(String[] args) {} 但是以前一直都没有问自己,为什么要这么写,因为在c语言中就没有这样子的要 ...

  5. java中main函数的String[] args

    写java程序时main函数必须有一个字符串数组即String[] args 作用:用来获取用户从命令行输入的参数 如果main函数中不写字符串数组,则将会报错 转载于:https://www.cnb ...

  6. java中main函数的值是_java基础-main方法

    概述 Java中的main方法,是一个java应用程序的入口,无论一个java的应用多么复杂庞大,或是多么的小,只要他是一个可以运行的java程序那么必然就要有一个main方法.main方法的定义格式 ...

  7. java中main函数的参数

    java中的main函数是一个程序执行的入口,main函数必须被声明为static的,在编译的时候就已经为其分配了内存,就是说,不用调用也能执行的,那么main函数的参数有什么作用呢?参数args的主 ...

  8. java中main函数的args参数

    先说一下args的作用: 我们习惯将一些有用的参数传递给我们定义的函数,那么可曾想过有参数传递给main函数?args就是传递给main函数的一个数组参数.         可是main函数作为程序( ...

  9. java函数void返回值是,Java中main()函数的返回值是什么( )。A、StringB、intC、c......

    下面的哪个是Java的关键字()A.stringB.abstractC.NULLD.Boolean Javaapplication中的主类需包含main方法,以下哪项是main方法的正确形参?A.St ...

最新文章

  1. __getattr__ 与动态属性
  2. java开发需要掌握哪些东西_java开发需要掌握哪些技能
  3. android text字体居中显示,Android Canvas的drawText()和文字居中方案
  4. 初学数位DP--hdu 2089
  5. Oracle instant client安装与设置 - Windows版,可用WIN7
  6. jdbc和mysql面试题_JDBC数据访问技术面试题(附答案)
  7. ListView的性能优化之convertView和viewHolder
  8. 小红书:笔试题(棋盘最短路径,笔记本草稿栈,迷宫游戏)
  9. mrpoid模拟器java版_mrpoid2冒泡模拟器下载-mrpoid2模拟器下载3.0安卓版-西西软件下载...
  10. bootice添加linux_如何使用老毛桃winpe的Bootice工具还原SYSLINUX引导程序?
  11. 图片(img)alt属性标签怎么写
  12. 如何对Windows 2000中出现的“Stop 0x0000007B”错误信息进行故障诊断
  13. The Onion Router洋葱路由器
  14. 苹果手机备份有必要吗_苹果手机备份最简单方式!原来大神都这样做
  15. 【Flutter从入门到实战】⑪、豆瓣案例-1、星星评分Widget、虚线Widget、TabbarWidget、BottomNavigationBarItem的封装、初始化配置抽取
  16. 去掉字符串首尾指定字符
  17. 平板电脑 android系统升级,戴尔平板电脑Streak 10 Pro升级至安卓3.2 官方教程
  18. java设计模式之中介者模式(Mediator)
  19. 递归学习_组合_全组合排列
  20. 怎么用python画直线_python怎么画直线

热门文章

  1. Java基础---网络编程
  2. class里面只能写以下5种
  3. winform绑定多张图片
  4. Linux 内核顶层Makefile 详解
  5. 数据结构——顺序栈和链式栈的简单实现和解析(C语言版)
  6. echarts 获取点击的y轴数值_用 Python 自动获取NBA现役球员的职业生涯数据曲线
  7. linux板级初始化
  8. linux运维和3dmax哪个简单,牛逼运维常用的工具系列-2
  9. oracle恢复指定数据文件,Oracle特殊恢复-BBED修改某个数据文件头
  10. 电脑操作系统维护10条实用建议!