我们来看一下主函数

public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World");
}
}
main方法是一个特殊的规范,和JVM的运行原理有关
 

(1)main

JVM启动会找main方法,并且检查main函数所在类是否被java虚拟机装载。如果没有装载,那么就装载该类,并且装载所有相关的其他类。
因此程序在运行的时候,第一个执行的方法就是main()方法。
 

(2)static

通常情况下, 如果要运行一个类的方法,必须首先实例化出来这个类的一个对象,然后通过"对象名.方法名()"的方式来运行方法,但是因为main是程序的入口,这时候还没有实例化对象,因此将main方法声明为static的,这样这个方法就可以直接通过“类名.方法名()”的方式来调用。
 

(3)args

作用是从命令行取得输入参数,这样在程序中可以调用。
我们修改一下main方法
public class HelloWorld{
public static void main(String[] args){
System.out.println("args[]");
for(int i=0;i<args.length;i++){
System.out.println(args[i]);
}
}
}
执行方法和运行结果
传递给main一个包含字符串的数组args

 

JVM运行main的流程

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

 

谈谈主函数main的更多相关文章

  1. x264代码剖析(三):主函数main()、解析函数parse()与编码函数encode()

    x264代码剖析(三):主函数main().解析函数parse()与编码函数encode() x264的入口函数为main().main()函数首先调用parse()解析输入的參数,然后调用encod ...

  2. 【01】主函数main

    java和C#非常相似,它们大部分的语法是一样的,但尽管如此,也有一些地方是不同的. 为了更好地学习java或C#,有必要分清它们两者到底在哪里不同. 首先,我们将探讨主函数main. java的主函 ...

  3. 黑马程序员——JAVA基础之主函数main和静态static,静态代码块

    ------- android培训.java培训.期待与您交流! ---------- 主函数:是一个特殊的函数.作为程序的入口,可以被jvm调用. 主函数的定义: public:代表着该函数访问权限 ...

  4. 主函数 main WinMain _tmain _tWinMain 的区别

    main是C/C++的标准入口函数名 WinMain是windows API窗体程序的入口函数.(int WINAPI WinMain()) 中 WINAPI是__stdcall宏,在windef.h ...

  5. 如何理解主函数main中变量(int argc,char *argv[])的含义

    每一个C语言的初学者,都会注意到主函数main()里的两个参数,但是初学者一般不会去关注这两个参数的具体作用,下面我们就来介绍这两个参数的具体作用. main()函数是控制台程序的入口,int mai ...

  6. 主函数特别之处:public static void main(String[] args)

    public static void main(String[] args) public class Test_java {//主函数特殊之处 public static void main(Str ...

  7. main主函数

    public static void main(String[] args) { //虚拟机调用main函数,需要传个args的参数,传入的是new String[0] System.out.prin ...

  8. [C#] 了解过入口函数 Main() 吗?带你用批处理玩转 Main 函数

    了解过入口函数 Main() 吗?带你用批处理玩转 Main 函数 目录 简介 特点 方法的参数 方法的返回值 与批处理交互的一个示例 简介 我们知道,新建一个控制台应用程序的时候,IDE 会同时创建 ...

  9. java主函数的含义

    下面对java中的主函数进行简单的解释,解决可能困惑大家的问题,下面举的例子在实际开发中几乎不会出现,但是为了解决好奇心,大家可以这么去尝试一下! 我们在java中看到的主函数通常是这样的:publi ...

随机推荐

  1. hdu 2896 AC自动机

    // hdu 2896 AC自动机 // // 题目大意: // // 给你n个短串,然后给你q串长字符串,要求每个长字符串中 // 是否出现短串,出现的短串各是什么 // // 解题思路: // / ...

  2. disconf安装部署

    1.client pom文件引入 <dependency> <groupId>com.baidu.disconf</groupId> <artifactId& ...

  3. styleId妙用

    styleId妙用: <html:text property="etpsBlocReg.cptlTotal" style="width: 94%;" re ...

  4. c#后台进行窗体切换的方法

    Response.Redirect("http://localhost:60896/WebForm2.aspx");

  5. Linux网卡bounding详解

    多块网卡绑在一起,作为一个网卡用,实现负载均衡和提高带宽   linux双网卡绑定一个IP地址,实质工作就是使用两块网卡虚拟为一块,使用同一个IP地址,是我们能够得到更好的更快的服务.其实这项技术在 ...

  6. Linux下多路径multipath配置

    一.multipath在redhat 6.2中的基本配置: 1. 通过命令:lsmod |grep dm_multipath  检查是否正常安装成功.如果没有输出说明没有安装那么通过yum功能安装一下 ...

  7. 对文本行按特定字段排序(前N个字符或后N个字符),TCPL 练习5-17

    The C programming language 的关于文本行排序的问题有很多种要求的方式,在对每行的字段排序方面,最简单的是例如对前N个字符或者末位N个字符进行排序,更高一点的要求是,对特殊符号 ...

  8. switch...case和if...else if的判断应用

    判断成绩所属等级的 两种方法 1...      switch...case方法: #include<stdio.h> int main(void) { ;i <= ;++i) // ...

  9. FUND

    The Shaanxi Natural Science Plan Project of China Grant NO.: 2014JM8322

  10. python学习笔记:Day02

    一.列表(list) 1.定义一个列表 name=["tom","jerry","12","13","lose ...