《Java程序员面试笔试宝典》之为什么需要public static void main(String[] args)这个方法
public staticvoid main(String[] args)为Java程序的入口方法,JVM在运行程序的时候,会首先查找main方法。其中,public是权限修饰符,表明任何类或对象都可以访问这个方法,static表明main方法是一个静态方法,即方法中的代码是存储在静态存储区的,只要类被加载后,就可以使用该方法而不需要通过实例化对象来访问,可以直接通过类名.main()直接访问,JVM在启动的时候就是按照上述方法的签名(必须有public与static修饰,返回值为void,且方法的参数为字符串数组)来查找方法的入口地址,如果能找到就执行,找不到则会报错。void表明方法没有返回值,main是JVM识别的特殊方法名,是程序的入口方法。字符串数组参数args为开发人员在命令行状态下与程序交互提供了一种手段。
因为main为程序的入口方法,因此当程序运行的时候,第一个执行的方法就是main方法。通常来讲,要执行一个类的方法,首先必须实例化一个类的对象,然后通过对象来调用这个方法。但是由于main是程序的入口方法,此时还没有实例化对象,因此在编写main方法的时候就要求不需要实例化对象就可以调用这个方法,鉴于此,main方法需要被定义成public与static。下例给出了在调用main方法时传递参数的方法。
|
public class Test{ public static void main(String[] args){ for(int i=0;i<args.length;i++){ System.out.println(args[i]); } } } |
在控制台下,使用javac Test.java指令编译上述程序,使用javaTest arg1 arg2 arg3指令运行程序,程序输出结果如下所示。
|
arg1 arg2 arg3 |
引申:
(1)main方法是否还有其它可用的定义格式?
1)由于public与static没有先后顺序关系,由此下面的定义也是合理的:
static public void main(String[] args)
2)也可以把main方法定义为final:
public static final void main(String[]args)
3)也可以用synchronized来修饰main方法:
static public synchronized voidmain(String[] args)
不管哪种定义方式,都必须保证main方法的返回值为void,有static与public关键字修饰。同时由于main方法为程序的入口方法,因此不能用abstract关键字来修饰。
(2)同一个.java文件中是否可以有多个main方法?
虽然每个类中都可以定义main方法,但是只有与文件名相同的用public修饰的类中的main方法才能作为整个程序的入口方法。如下例所示,创建了一个名为Test.java的文件。
|
class T{ public static void main(String[] args) { System.out.println("T main"); } } public class Test { // 程序入口函数 public static void main(String[] args) { System.out.println("Test main"); } } |
程序运行结果为:
|
Test main |
常见笔试题:
Java程序中程序运行入口方法main的签名正确的有( )
A:publicstatic void main(String[] args) B:publicstatic final void main(String[] args)
C:staticpublic void main(String[] args) D:staticpublic synchronized void main(String[] args)
E:staticpublic abstract void main(String[] args)
答案: A、B、C、D。见上面讲解。
《Java程序员面试笔试宝典》之为什么需要public static void main(String[] args)这个方法的更多相关文章
- 《Java程序员面试笔试宝典》终于在万众期待中出版啦~
<Java程序员面试笔试宝典>终于在万众期待中出版啦~它是知名畅销书<程序员面试笔试宝典>的姊妹篇,而定价只要48元哦,恰逢求职季节,希望本书的出版能够让更多的求职者能够走进理 ...
- 《Java程序员面试笔试宝典》之Static关键字有哪些作用
static关键字主要有两种作用:第一,只想为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关.第二,希望某个方法或属性与类而不是对象关联在一起,也就是说,在不创建对象的情况下就可以通过 ...
- 《Java程序员面试笔试宝典》之Java程序初始化的顺序是怎样的
在Java语言中,当实例化对象时,对象所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化后,才会调用对象所在类的构造函数创建对象. Java程序的初始化一般遵循以下三个原则(以下三原则优 ...
- 《Java程序员面试笔试宝典》之为什么Java中有些接口没有任何方法
由于Java不支持多重继承,即一个类只能有一个父类,为了克服单继承的缺点,Java语言引入了接口这一概念.接口是抽象方法定义的集合(接口中也可以定义一些常量值),是一种特殊的抽象类.接口中只包含方法的 ...
- 《Java程序员面试笔试宝典》之switch使用时有哪些注意事项
switch语句用于多分支选择,在使用switch(expr)的时候,expr只能是一个枚举常量(内部也是由整型或字符类型实现)或一个整数表达式,其中整数表达式可以是基本类型int或其对应的包装类In ...
- 《Java程序员面试笔试宝典》之 instanceof有什么作用
instanceof是Java语言中的一个二元运算符,它的作用是判断一个引用类型的变量所指向的对象是否是一个类(或接口.抽象类.父类)的实例,即它左边的对象是否是它右边的类的实例,返回boolean类 ...
- 《Java程序员面试笔试宝典》之 什么是AOP
AOP(Aspect-Oriented Programming,面向切面编程)是对面向对象开发的一种补充,它允许开发人员在不改变原来模型的基础上动态地修改模型从而满足新的需求.例如,在不改变原来业务逻 ...
- java面试:关于public static void main(String[] args)是什么意思?
它是作为JAVA中的主函数,所有java程序的运行起点就是这个方法,除了args这个名字可以不一样外,其他必须是这样. 主函数的一般写法如下: public static void main(Stri ...
- public static void main(String[] args){} 关于Java main()方法
是Java程序的入口方法,JVM在运行程序时,会首先查找main()方法. public是权限修饰符,表明任何类或对象都可以访问这个方法: static表明main()方法是一个静态方法,即方法中的代 ...
随机推荐
- centerOS安装rkhunter
rkhunter是专业检测系统是否感染rootkit的一个工具: rkhunter-1.4.2.tar.gz 解压后直接安装: #./installer.sh --layout defualt --i ...
- wcf简单的创建和运用
创建一个控制台应用程序,命名为wcftest,并在同一解决方案中添加一个wcf服务应用程序 在wcf项目中会自动生成Service1.svc服务程序文件和IService1.cs契约接口 IServi ...
- Wince修改系统时间问题
当我们需要修改到系统时间的时候,需要用到下面四个函数:SetLoaclTime,GetLocalTime,SetSystemTime,GetSystemTime.这四个函数是用来修改或者 ...
- IE常见的CSS的BUG(一)
2011年6月,我毕业了.2012年我接触了CSS,本以为会好过些能赚点钱了,可谁知,Internet Explorer(下称IE),这个前端工程师的噩梦浏览器让我不再那么好过了.各种出现在IE身上的 ...
- 为iPhone6 设计自适应布局(一)
译者的话:本文是自适应布局的巩固篇,所以对布局约束的添加操作步骤等没有详细的说明.如果看着吃力的话请先移步Swift自适应布局(Adaptive Layout)教程. Apple从iOS6加入了Aut ...
- 解决Fetching android sdk component information加载过久问题
安装完成后,如果直接启动,Android Studio会去获取 android sdk 组件信息,这个过程相当慢,还经常加载失败,导致Android Studio启动不起开.解决办法就是不去获取and ...
- Angular单页应用&AngularJS内部实现原理
回顾 自定义指令 登录后获取登录信息session 首先在登录验证的时候保存一个user 在学生管理页面中运用ajax调用获取到登录的用户信息 对注销按钮添加点击事件:调用ajax在表现层给user赋 ...
- highcharts的使用
步骤: 1. 去highcharts官网下载最新版本 2. 在.aspx页面添加引用 例: <link href="../JS/highcharts/css/highslide.css ...
- Geodatabase - 删除要素
//删除要素类. //例如:workspacePath=@"G:\doc\gis\1.400\data\pdb.mdb", featureClassPath="res2_ ...
- Tornado模块分类和各模块之间的关系
1. Core web framework tornado.web — 包含web框架的大部分主要功能,包含RequestHandler和Application两个重要的类 tornado.https ...