Main方法解析(有参考,为菜鸟详细解释嘛是Main方法)

在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方 法有很大的不同,比如方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数等等。

在看Java中的main()方法之前,先看一个最简单的Java应用程序HelloWorld,我将通过这个例子说明Java类中main()方法的奥秘,程序的代码如下:

public class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello World!");
}
}

一、先说类:

HelloWorld 类中有main()方法,说明这是个java应用程序,通过JVM直接启动运行的程序。
既然是类,java允许类不加public关键字约束,当然类的定义只能限制为public或者无限制关键字(默认的)。

二、再说main()方法

这个main()方法的声明为:public static void main(String args[])。必须这么定义,这是Java的规范。

为什么要这么定义,和JVM的运行有关系。
当一个类中有main()方法,执行命令“java 类名”则会启动虚拟机执行该类中的main方法。

由于JVM在运行这个Java应用程序的时候,首先会调用main方法,调用时不实例化这个类的对象,而是通过类名直接调用因此需要是限制为public static。

对于java中的main方法,jvm有限制,不能有返回值,因此返回值类型为void。
main方法中还有一个输入参数,类型为String[],这个也是java的规范,main()方法中必须有一个入参,类细必须String[],至于 字符串数组的名字,这个是可以自己设定的,根据习惯,这个字符串数组的名字一般和sun java规范范例中mian参数名保持一致,取名为args。

因此,main()方法定义必须是:“public static void main(String 字符串数组参数名[])”。

三、main()方法不准 throws Exception

因此main()方法中的异常要么处理,要么不处理,不能继续抛出。

比如写个public static int main(String args[]) throws Exception来定义main方法是错误的。

四、main()方法中字符串参数数组作用

main()方法中字符串参数数组作用是接收命令行输入参数的,命令行的参数之间用空格隔开。

下面给出一个例子,看看如何初始化和使用这个数组的。

public class TestMain {
public static void main(String args[]){
System.out.println("打印main方法中的输入参数!");
for(int i=0;i<args.length;i++){
System.out.println(args[i]);
}
}
}

执行方法和运行结果
D:\Study\basetest\src>javac TestMain.java

D:\Study\basetest\src>java TestMain 1 2 3
打印main方法中的输入参数!
1
2
3

五、给出HelloWorld的另外一个版本

public class HelloWorld2 {
static {
System.out.println("Hello Wordld!");
}
public static void main(String args[]){
System.exit(0);
}
}

这个main()方法执行的内容就一句"System.exit(0);" ,目的是让程序正常结束。那“HelloWorld!”是从哪里打印的,秘密就是在static打印的,因为static代码块的内容会在main调用前调用。

总结:
main方法作为一个特殊的规范,与普通的方法有很大区别,限制很多,理解其原理需要学习JVM相关知识。是Java中学习中大障碍。

时间: 2024-11-08 15:27:53

Main方法解析(有参考,为菜鸟详细解释嘛是Main方法)的相关文章

4.20 main方法的格式详细解释

/* main方法的格式讲解: public static void main(String[] args) {...} public:公共的,访问权限是最大的.由于main方法是被jvm调用,所以权限要够大. static:静态的,不需要创建对象,通过类名就可以.方便jvm的调用. void:因为方法的返回值是返回给调用者,而main方法是被jvm调用.返回内容给jvm没有意义. main:是一个常见的方法入口.是以main作为入口. String[] args:这是一个字符串数组.值去哪里了

JS和JAVA使用JSON方法解析

JS和JAVA使用JSON方法解析 一.JS部分================== 将json字符串转换为json对象的方法.在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键. 例如: JSON字符串: var str1 = '{ "name": "cxh", "sex": "man" }'; JSON对象: var str2 = {

清除浮动方法解析

清除浮动方法解析 清除浮动带来的额外影响 如果对于浮动不熟悉的同学,可以看看介绍float的文章.传送门:CSS float 我们知道,在一个父元素内如果遇到某个浮动元素,此时父元素的高度会发生塌陷.针对父元素高度塌陷的问题,现在已经有了很多的解决方案.针对每一个方案,我们来进行深度的剖析. 添加空块级元素 这种方法比较容易,但是要注意的是这个空元素必须是一个块级元素,不能是行内元素或者是行内块元素.缺点就是多了一些没有意义的标签.代码如下. //HTML <div class="cont

用原始方法解析复杂字符串,json一定要用JsonMapper么?

转自数据之巅原文用原始方法解析复杂字符串,json一定要用JsonMapper么? 阅读目录 1.不规则非json字符串 2.键值对字符串分割函数 3.复杂Json格式的字符串 4.标准的json格式 5.总结 经常采集数据,肯定会碰到解析字符串,包括整个页面的html,或者json以及一些不标准的json格式... 以前用json序列化,有时候需要实体类,有的时候没有,比较麻烦,听说可以用JsonMapper,解析为字典格式.不过没用过,习惯了用最原始的方法来解析字符串,所以这里分享几个解析的

window.open方法解析

一.前言 最近在项目中需要新窗口打开一个第三方的页面,大家都知道,使用window.open打开新窗口某些情况下会被浏览器的屏蔽程序阻止.如果要打开的URL是通过AJAX获取的,就一定会被浏览器拦截.为了解决这个问题,温习了window.open的详细用法.记录下来备忘. 二.window.open有两个用途 (1).导航到指定的URL (2).打开一个新窗口.该应用场景比较常见. 先看一个完整示例,打开招商银行大众版: var cmbBankWin = window.open('https:/

QT开发(四十四)——流方法解析XML

QT开发(四十四)--流方法解析XML 一.流方法解析XML简介 QT 4.3开始,QT引入了两个新的类来读取和写入XML文档:QXmlStreamReader和QXmlStreamWriter. QXmlStreamReader类提供了一个快速的解析器通过一个简单的流API来读取良构的XML文档,是作为QT的SAX解析器的替代者出现的,比SAX解析器更快更方便.    QXmlStreamReader可以从QIODevice或QByteArray中读取数据.QXmlStreamReader以一

显式Intent与隐式Intent的功能与使用方法解析。

显式Intent与隐式Intent的功能与使用方法解析. Intent,在中文中的意思是意图.就是想要做的事. 而使用startActivity(Intentintent)或者startActivityForResult(Intentintent)或者别的使用它的方法,形象地说就是指  去做你想要做的事.(do what you want to do) 首先,大体的介绍一下它们的使用差别: 1.Explicit Intent(显式意图):主要用于调用自身应用程序的组件(activity,serv

Android Measure中对应方法解析

注:根据网上资料整理如下 首先 onMeasure方法是为了得到各个View大小的函数 fill_parent-->public static final int EXACTLY = 1 << MODE_SHIFT; wrap_content-->public static final int AT_MOST = 2 << MODE_SHIFT; 这是makeMeasureSpec方法的代码片段 public static int makeMeasureSpec(int

MySQL-递归查询方法解析

MySQL-递归查询方法解析,兄弟连教育(www.lampbrother.net)帮大家做了个简单的整理:有需要的朋友可以参考下哈. 首先 表结构和数据 CREATE TABLE `class` (  `classid` int(11) NOT NULL AUTO_INCREMENT,  `banji` int(11) DEFAULT NULL COMMENT '0',  `nianji` varchar(255) DEFAULT NULL,  PRIMARY KEY (`classid`))