- 浏览: 59836 次
- 性别:
- 来自: 四川
最新评论
源文作者版权申明:
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lavasoft.blog.51cto.com/62575/53263
|
Java中的main()方法详解
在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数等等。
在看Java中的main()方法之前,先看一个最简单的Java应用程序HelloWorld,我将通过这个例子说明Java类中main()方法的奥秘,程序的代码如下:
/**
* 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()方法中可以throw Exception
因此main()方法中可以抛出异常,main()方法上也可以声明抛出异常。
比如,下面这个写法是正确的:
public class TestMain {
public static void main(String[] args) throws Exception { System.out.println("哈哈哈哈哈"); throw new Exception(""); } } 运行结果:
哈哈哈哈哈
Exception in thread "main" java.lang.Exception: at maintest.TestMain.main(TestMain.java:11) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90) Process finished with exit code 1 四、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的另外一个版本
/**
* 变态版的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中学习中大障碍。这是我对main原理和使用的总结,欢迎各位在此讨论。
|
发表评论
-
struts2 中获取 web资源的方式
2016-01-08 17:02 467在struts2中获取 web资源的方式大致可分为获取扩展 ... -
sql server、db2、oracle 存储过程动态sql语句示例
2015-01-31 19:00 1786Oracle CREATE OR REPLACE PRO ... -
ie9 中出现不明的异常(参数是必选项 (Argument not optional)、尚未实现)等
2015-01-27 23:57 1266<script type="text/jav ... -
SAXParseException: The content of element type "configuration" must match
2014-09-15 23:57 1923在mybatis的配置文件中新增加<databaseI ... -
java.lang.ClassNotFoundException: Cannot find class: DB_VENDOR
2014-09-15 23:45 1925在mybatis 中使用databaseIdProvide ... -
spring mvc3 + fastjson 转换 REST 参数以及输出
2014-03-27 00:16 4187spring 3可以支持Rest风格参数,其内置了jack ... -
eclipse中编辑log4j 的xml配置文件时,自动提示
2014-03-27 00:05 839方法1. 配置log4j.dtd文件: Windows - ... -
java json 转换之 Jackson 框架
2013-08-01 21:50 1105转自:http://www.cnblogs.com/hooj ... -
eclipse/myeclise 自定义注释中的变量名称
2013-07-01 23:18 934eclipse/myeclipse中自带了 ... -
Eclipse Class Decompiler——Java反编译插件
2012-11-08 22:41 1201Eclipse Class Decompiler,整 ... -
struts+spring+hibernate整合问题解决方法 陆续更新中....
2009-01-01 10:33 839在整合ssh过程中出现的问题和解决方法: 一、 严重: Ser ... -
DWR通过Annotation与spring整合
2009-01-21 22:05 634DWR 2.0 增加了一个很有趣的新特性,Annotat ... -
div嵌套页面 div加载页面 (其中获取目标页面的内容是用dwr框架连接java程序做的)
2009-03-15 16:58 625前段时间因为有需要,要在div中加载一个页面。但是以前没做过, ... -
tapestry autocomplete 更改样式及定位
2009-07-09 19:02 676版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文 ... -
tapestry5 集成 spring 的事务管理
2009-07-22 15:43 553说明:使用的是tapestry5.1.0.5 和spring ... -
tapestry5 布局 参数的处理
2009-07-23 17:24 372<?xml version="1.0" ... -
tapestry不支持 等html特殊符号的解决方法
2009-07-23 17:34 476在使用tapestry时,偶然发现使用 &a ... -
WebService大讲堂之Axis2(1):用POJO实现0配置的WebService
2009-07-28 15:01 397转自:http://space.itpub.net ... -
WebService大讲堂之Axis2(2):复合类型数据的传递
2009-07-28 15:25 465转自:http://space.itpub.net/12921 ... -
WebService大讲堂之Axis2(3):使用services.xml文件发布WebService
2009-07-28 15:28 475转自:http://space.itpub.net/12921 ...
相关推荐
JAVA入门必备知识:JAVA之Main方法详解
Java中的main()方法详解.doc
Java中main()方法详解,对初学者来说是个不错的切入点.
第04章 面向对象(上) 11 完整内存结构图与main方法详解
020511_【第5章:面向对象基础】_理解main方法笔记.pdf 020512_【第5章:面向对象基础】_代码块笔记.pdf 020513_【第5章:面向对象基础】_构造方法私有化笔记.pdf 020514_【第5章:面向对象基础】_对象数组笔记.pdf ...
Java中Robot类详解 概述 概述 Java中Robot类位于java.awt.Robot,该类⽤于为测试⾃动化,⾃运⾏演⽰程序和其他需要控制⿏标和键盘的应⽤程序⽣成本机系统输⼊ 事件,Robot类的主要⽬的是便于Java平台实现⾃动测试。...
在java中main()方法是java应用程序的入口方法,由此可见main方法是很重要的,那么下面这篇文章就给大家详解介绍了Java中的main()方法,需要的朋友可以参考下。
主要介绍了Java中的main函数的详细介绍的相关资料,main()函数在java程序中必出现的函数,这里就讲解下使用方法,需要的朋友可以参考下
执行带main方法的class文件,命令行为: java 注意:CLASS文件名不要带文件后缀.class 例如: 代码如下: java Test 如果执行的class文件是带包的,即在类文件中使用了:package <包名> ...
JAVA断言技术详解,1、What will happen when you attempt to compile and run the following code? (Assume that the code is compiled and run with assertions enabled) 1. public class AssertTest 2. { 3. ...
系统存在一个主内存(Main Memory), Java中所有变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory),工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是...
public static void main(String[] args) { Class<?> demo=null; try{ demo=Class.forName("Reflect.Person"); }catch (Exception e) { e.printStackTrace(); } Person per=null; try { per=(Person)demo....
会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的...
主要介绍了Java使用agent实现main方法之前的实例详解的相关资料,希望通过本文能帮助到大家,让大家理解这部分内容,需要的朋友可以参考下
5.6.9 理解main方法语法及命令行参数147 5.6.1 0递归算法147 5.7 this关键字148 5.8 JavaBean149 5.9 包150 5.9.1 为什么需要包?150 5.9.2 如何创建包151 5.9.3 编译并生成包:151 5.9.4 使用带包的类152 5.9.5 JDK...
在main方法中,我们首先通过Scanner对象提示用户输入他们的个人信息,然后将这些信息传递给DynamicSelfIntroduction类的构造方法,最后创建一个新的DynamicSelfIntroduction对象并调用introduce方法进行自我介绍。
示例源码:Main.java, ExternalLibrary.java。 阅读建议: 在设置classpath环境变量之前,请确保已经正确配置了Java开发工具包(JDK)。 按照示例代码和步骤指导进行操作,特别是在配置环境变量时要注意路径的正确...
主要介绍了详解Java中NullPointerException异常的原因详解以及解决方法。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
根据定义,进程为一个数据结构及能在其上进行的一次操作, 它有两个基本特征, ...程序启动运行时,就自动产生了一个线程,main方法就是在这个线程上运行的,当不再产生新的线程时,程序就是单线程。