Java工程中的主函数

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

平时写java project的时候,肯定会看到public static void main(String[] args),一说起来,大家都管它叫“主函数”、“Java应用程序的入口”等等。但是它到底用在哪里,其中的String[] args到底都有什么,将在这篇博客中仔细介绍。

主函数简介

首先,public static void main(String[] args)是作为Java程序的程序入口,main是JVM识别的特殊方法名,只有包含main()方法的java程序才能够被JVM执行。JVM通过main方法找到需要启动的运行程序,并且检查main函数所在类是否被JVM装载。如果没有装载,那么就装载该类,并且装载该类的所有相关类。因此程序在运行的时候,第一个执行的方法(注意是方法,而不是其他的,例如代码块——为什么这么说,还有代码块在main方法前面调用?待补入本文)就是main()方法。简单点说,JVM运行程序的时候,首先找的就是main方法——你在哪个文件创建了public static void main(String[] args),JVM就从那个文件的public static void main(String[] args)开始执行。jvm在启动时就是按照上诉方法的签名(必须有public和static修饰,返回值为void,且方法参数为字符串数组,待验证)来查找方法的入口地址,若找到就执行,找不到就会报错。

在新建文件时,会有一项提示“是否新建public static void main(String[] args),选中它,就会在这个新建的文件内生成public static void main(String[] args),待补图。

主函数声明中各关键词的作用

然后,我们分别来看下public static void main(String[] args)中各个关键字起到的作用:

public

main是java程序的入口,java程序通过JVM调用,属于外部调用,所以需要使用public修饰,否则虚拟机无法调用。

static

在java中,没有static的变量或函数,如果想被调用的话,是要先新建一个对象才可以。而main函数作为程序的入口,需要在其它函数实例化之前就启动。或者更具体地说,通常情况下, 如果要运行一个类的方法,必须首先实例化出这个类的一个对象,然后通过调用该对象的方法——即"对象名.方法名()"的方式来运行,但是因为main是程序的入口,这时候还没有实例化对象,因此将main方法声明为static的,这样main()中的代码是存储在静态存储区的,即当定义了类以后,这段代码就已经存在了。在类加载的时候,静态方法——main()方法就会随之加载到内存中去。如果main()方法没有使用static修饰符,那么编译不会出错,但是当你试图执行该程序时,编译器将会报错,提示main()方法不存在。因为包含main()的类并没有实例化(即没有这个类的对象),所以其main()方法也不会存在。而使用static修饰符则表示该方法是静态的,不需要实例化即可使用。

void

(从语法上不能写成?)对于java中的main(),jvm有限制,不能有返回值,因此返回值类型为void。因为当main方法出现返回值时,JVM无法进行上抛,如果有返回值难道抛给操作系统么?(JVM外面就是操作系统?)

区分public static void main(String[] args) throws Exception不能这么写的原因
(从逻辑上不能写成,并非语法上有问题)抛出异常的目的,一般是为了让调用方处理异常,而主函数main()是最终调用者,没有函数再调用它。如果到main函数这里还往外抛出异常,相当于把异常抛给了JVM,而JVM的处理方式就是让程序挂掉,然后打印异常信息,那就相当于写了异常抛出跟没写一样,都是出了异常,程序挂掉,所以说逻辑上来说没有这么写的,但是这么写是不存在任何语法错误。

String[] args

是开发人员通过命令提示行与已开发完的程序代码进行交互的一种手段。

参数String[] args是一个字符串数组,接收在执行程序时传入的参数。其中,有博客(文中还提到了命令提示行下,运行Java程序的方法)提到,“args是数组的名字,并不是固定的,可以改成其他名字”——这一点我还没有确认,不确定。

自写部分:【比如,命令提示行中执行本段代码:将开发的一个.class文件打成jar包,放到lib目录下。然后在Windows系统的命令提示行中输入指令java -Djava.ext.dirs=lib DailyDownTask.DailyDown0c(jar包名称?) 传入的参数1 传入的参数2 传入的参数3 ...,回车即可。在启动jar包的同时,jar包的代码通过main(String[] args)获取到了刚才输入指令传入的参数】。这也是Windows上安装的Java程序可以通过命令提示行进行操控的原理,例如Jmeter。

如果是在控制台,可以通过编译执行将参数传入主函数,命令行如下:

这样传进main函数的就是一个字符串数组, args[0] =a; args[1]=b;args[2]=c, 如果不传参数进来,args为空。如下所示:

和上面一样,程序使用者还可以在命令行状态下向某个类传递参数,样例可以看这篇博客,代码的写法可以参考这篇博客。

最后,我在网上还看到了一篇好玩的博客;synchronized写法,其中提出了public static void main(String[] args)函数各种不常见的写法,大家感兴趣的可以去看看。我能力有限,目前判别不出这篇文章内容正确与否,还请各位自己判断这篇博客的对错,见谅。如果有大神能确定这篇文章内容的对或错,也欢迎在本博客下留言告诉我,在这提前说声谢谢。

一个Java工程中可以有多个主函数

主函数虽然是Java应用程序的入口,但一个Java工程却可以有多个主函数。工程里的所有代码文件,均以含有主函数的各个class文件为根节点,分成几组,构成多个树形结构。每次在启动Java工程时,eclipse会以当前界面文件为准,打开它属于的根节点文件的主函数。

Java工程中的主函数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. java public main_JAVA:public static void main(String args[]) 详解

    JAVA中的主函数,所有java程序的运行起点就是这个方法,除了args这个名字可以不一样外,其他必须是这样. 主函数的一般写法如下: public static void main(String[] ...

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

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

  4. 浅析 public static void main(String[] args)

    最初接触Java程序的时候,老师就教导我们要从下面这句开始学起,据说是约定俗成的,所以直到今天,还是只知道java程序应该这么写,具体为什么这么写,鄙人惭愧. 1 public class Class ...

  5. [转载] public static void main(String[] args) 隐含了什么?

    参考链接: 了解Java中" public static void main"中的" static" public class TestSort { publi ...

  6. public static void main(String[] args) 的介绍

    目录标题 Java 基础语法程序代码 public static void main(String[ ] args) 是什么意思? 我们经常使用到 System.out.println(),那么它是什 ...

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

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

  8. 浅谈public static void main(String[] args)

    public static void main(String[] args){//代码 } mian函数是程序的执行入口 public:表示main方法可以由任何类访问.(java虚拟机调用main方 ...

  9. public static void main(String[] args)

    public static void main(String[] args)到底 是什么意思? public static void main(String[] args), 是Java程序的入口地址 ...

最新文章

  1. 16、设计模式-行为型模式-命令模式
  2. 2017-12-25 Linux学习笔记
  3. vi/vim使用入门: vimrc在哪儿?
  4. Python3算法基础练习:编程100例(1~5)
  5. C++的inline函数
  6. element UI 制作带快捷选项的时间选择器
  7. 用JavaScript fetch API取数据遇到CORS policy问题
  8. Hibernate备忘录
  9. 具有Akka反应流的反应队列
  10. docker构建oracle集群,docker 构建 oracle数据库 镜像-Go语言中文社区
  11. debian下安装python虚拟环境
  12. win8信息服务器不可用怎么办,win8系统下开机提示OneDrive选项此服务现在不可用请稍后再试怎么办...
  13. Git撤销修改、回退版本相关命令
  14. logback为日志配置颜色
  15. python中fac函数_python系列-基础
  16. 计算机取消右键粘贴,复制粘贴文件后鼠标右击取消粘贴功能的简单方法介绍
  17. 解决tensorflow下载速度慢
  18. cocos creator使用anysdk接入admob广告教程
  19. 电脑系统安装失败无法启动服务器,Windows2008R2安装补丁后系统无法启动
  20. 软件定义和硬件重构知多少(一)

热门文章

  1. 三角形网格 四方形网格_HTML5中3D对象的三角形网格
  2. Go技术日报(2021-07-27)——全网最全的Go书单来喽
  3. 火狐禁止 WebRTC
  4. java集合Cloneable
  5. java 灰度发布_灰度发布的原理及实现
  6. 信息周刊:微软Vista百问
  7. WhatsApp群发实战分享——WhatsApp Business API账号
  8. 【Flink报错】Option not applicable to singleton quantifier
  9. 中国洗洁精市场深度调研及投资前景分析报告2022-2028年
  10. CAM350使用总结