public static void main(String[] args){} 关于Java main()方法
是Java程序的入口方法,JVM在运行程序时,会首先查找main()方法。
public是权限修饰符,表明任何类或对象都可以访问这个方法;
static表明main()方法是一个静态方法,即方法中的代码时存储在静态区的,只要类被加载后,就可以使用该方法而不需要通过实例化对象来访问,可以直接通过 类名.main() 直接访问;
void表明方法没有返回值;
main是JVM识别的特殊分方法名,是程序的入口方法;
方法的参数为字符串数组,字符串数组参数args为开发人员在命令行状态下与程序交互提供了一种手段;
JVM在启动时就是按照上述方法的签名(必须有public、static修饰,返回值为void,且方法的参数为字符串数组)来查找方法的入口地址,若找到就执行,找不到就会报错。
因为main是程序的入口方法,所以当程序运行时,第一个执行的方法就是main()方法。
通常来讲,要执行一个类的方法,先必须实例化一个类的对象,然后通过对象来调用这个方法。 但由于main是程序的入口方法,此时还没有实例化对象,因此在编写main()方法时就要求不需要实例化对象就可以调用这个方法,鉴于此,main()方法需要被定义成public与static。
一个.java文件不能出现两个以上的public类或接口
如果一个java源文件里定义了一个public修饰的类,则这个源文件的文件名必须与public修饰的类名相同。
如果一个java源文件里定义的所有类都没有使用public修饰,则这个文件的文件名任意。
main方法是否还有其它可用的定义格式?
1)由于public与static没有先后顺序:static public void main(String[] args)
2)也可以把main方法定义成final: public static final void main(String[] args)
3)也可以用synchronized来修饰mian方法:static public Synchronized void mian(String[] args)
不管哪种定义格式,都必须保证main方法的返回值为void,并由static与public修饰。
由于main方法为程序的入口方法,因此不能用abstract修饰。
同一个Java文件是否可以有多个main()方法?
可以,虽然每个类都可以定义main方法,但是只有与文件名相同的用public修饰的类中的main方法才能作为整个程序的入口方法。
例:创建一个Test.java 源文件
class T{
public static void mian(String[] args){
System.out.println(“T main”);
}
}
public class Test{
public static void main(String[] args){ //程序入口函数
System.out.println(“Test mian”);
}
}
结果: Test main
1.不用main方法如何定义一个类?
不行,没有main方法我们不能运行Java类。
在Java 7之前,你可以通过使用静态初始化运行Java类。但是,从Java 7开始就行不通了。
2.main方法需要的参数不是字符串数组?
不是的,main方法的参数必须是字符串数组。
但是,在引进变参时,你可以将字符串类型的变参作为参数传递给main方法。变参一定得是数组。
package com.instanceofjava;publicclassMainMethod {publicstaticvoidmain(String args) { } }
3.我们能不能改变main方法的返回类型?
不能,main方法的返回类型只能是空。任何其它类型都是不能接受的。
package com.instanceofjava;publicclassA {publicstaticintmain(String args) {return1;//run time error : No main method found} }
4.main方法为什么必须是静态的?
main方法一定是静态的。
如果main允许是非静态的,那么在调用main方法时,JVM就得实例化它的类。
在实例化时,还得调用类的构造函数。如果这个类的构造函数有参数,那么届时就会出现歧义。
例如,在下面的程序中,在实例化类“A”的时候,JVM传递什么参数?
package com.instanceofjava;publicclassA {publicMainMethod(inti) {//Constructor taking one argument}publicvoidmain(String args) {//main method as non-static}
5.我们能不能声明main方法为非静态?
不能,main方法必须声明为静态的,这样JVM才可以调用main方法而无需实例化它的类。
如果从main方法去掉“static”这个声明,虽然编译依然可以成功,但在运行时会导致程序失败。
package com.instanceofjava;publicclassA {publicvoidmain(String args) { System.out.println("indhu");//Run time error} }
6.我们能否重载main方法?
可以,我们可以重载main方法。一个Java类可以有任意数量的main方法。
为了运行java类,类的main方法应该有例如“public static void main(String args)”的声明。如果你对此声明做任何修改,编译也是可以成功的。但是,运行不了Java程序。你会得到运行时错误,因为找不到main方法。
package com.instanceofjava;publicclassA {publicstaticvoidmain(String args) { System.out.println("Indhu"); }voidmain(intargs) { System.out.println("Sindhu"); }longmain(inti,longd) { System.out.println("Saidesh");returnd; } }
7.我们能否声明main方法为private或protected,或者不用访问修饰符?
不能,main方法必须public。你不能定义main方法为private和protected,也不能不用访问修饰符。
这是为了能让JVM访问main方法。如果你不定义main方法为public,虽然编译也会成功,但你会得到运行时错误,因为找不到main方法。
package com.instanceofjava;publicclassA {privatestaticvoidmain(String args) {//Run time error} }
8.我们能否在Java中覆盖main方法?
不能,你不能在Java中覆盖main方法。这是因为main方法是静态方法,而在Java中静态方法在编译时会结合在一起,所以你在Java中不能覆盖静态方法。
9.我们能否在Java中终结main方法?
你可以在Java中终结main方法。JVM对此没问题。
10.我们能否在Java中同步main方法?
是的,main方法可以在Java中同步,synchronized修饰符允许用于main方法的声明中,这样就可以在Java中同步main方法了。
public static void main(String[] args){} 关于Java main()方法的更多相关文章
- public static void speckOnWin7(string text),在win7中读文字
public static void speckOnWin7(string text) { //洪丰写的,转载请注明 try { string lsSource = ""; ...
- 《Java程序员面试笔试宝典》之为什么需要public static void main(String[] args)这个方法
public staticvoid main(String[] args)为Java程序的入口方法,JVM在运行程序的时候,会首先查找main方法.其中,public是权限修饰符,表明任何类或对象都可 ...
- 为什么main方法是public static void?
Main方法是我们学习Java编程语言时知道的第一个方法,你是否曾经想过为什么main方法是public.static.void的.当然,很多人首先学的是C和C++,但是在Java中main方法与前者 ...
- 为什么 main 方法是 public static void ?
Main方法是我们学习Java编程语言时知道的第一个方法,你是否曾经想过为什么main方法是public.static.void的.当然,很多人首先学的是C和C++,但是在Java中main方法与前者 ...
- C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例
C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...
- java里面的public static void main(String[] args)
package com.java_1; public class Hello { public static void main(String[] args){ System.out.println( ...
- JAVA:从public static void main(String args[])開始
我们都知道当你要执行一个JAVA文件的时候必需要有一个main函数. 这是为什么呢? 跟C语言的道理一样,当你执行一个文件的时候.你必需要有一个入口函数或者入口地址,在C里面是main函数.相同的在J ...
- java面试:关于public static void main(String[] args)是什么意思?
它是作为JAVA中的主函数,所有java程序的运行起点就是这个方法,除了args这个名字可以不一样外,其他必须是这样. 主函数的一般写法如下: public static void main(Stri ...
- public static void main(String[] args){}函数诠释
public static void main(String[] args){}函数诠释 主函数的一般写法如下: public static void main(String[] args){-} 下 ...
随机推荐
- iOS extern使用教程
ios开发使用extern访问全局变量 使用extern关键字法: 1 .新建Constants.h文件(文件名根据需要自己取),用于存放全局变量: 2. 在Constants.h中写入你需要的全局变 ...
- php设计模式----工厂模式
工厂模式主要是为了代码执行的时候更灵活地new对象,就像工厂流水线一样,批量生产出产品. 目的:简化对象生成过程,更加灵活. 例子如下: <?php /** * User: freephp * ...
- windows下使用命令查看端口占用情况
使用下面的命令查看端口占用情况: 比如查看3000端口的占用情况 netstat -ano|findstr 3000 运行后,结果如下: 可以看到进程号为9692的占用了该端口,使用下面的命令查看是哪 ...
- CSS3特性修改(自定义)浏览器默认滚动条
前言:我们做前端时,会遇到一些需求,要求把默认浏览器的滚动条样式给改写了,诶.好好的改它干啥了,也带不来用户体验,就是好看点嘛!实现原理其实是用了伪元素,webkit的伪元素实现很强,可以把滚动条当成 ...
- 关于angularjs的$state.go()与ui-sref传参问题
上次转发过关于angularjs回退的文章,回退用到的还是js的回退功能,直接用history.back();实现功能,当时顺便提了下$state.go()有关路由跳转. 那这回就全面解析下$stat ...
- sql Cursor的用法
table1结构如下 id int name ) declare @id int ) declare cursor1 cursor for --定义游标cursor1 select * from ta ...
- 在2002年的老电脑上安装Debian
在2002年自己花了家里八千多元买了一台联想昭笔记本电脑.配置是PIII 750 Hz, 128 MB内存(后来升级到了320 MB).那个时候大学里买笔记本电脑的人还不多,宿舍里的同学大都攒的台式机 ...
- package scripts在前端项目的使用
前端的项目往往依赖了很多打包.部署工具,比如grunt,gulp,webpack.....,在这么多打包.部署工具里,有这各自的命令,这样给项目带来了很多烦恼,不同的项目不同的命令,有没有办法统一接口 ...
- CSS3之3D效果中的transform运用
css3中添加了很多新的标签 属性 描述 css transform 向元素应用 2D 或 3D 转换. 3 transform-origin 允许你改变被转换元素的位置. 3 transform-s ...
- 今天学习的裸板驱动之GPIO实验学习心得
GPIO分成很多组今天学习的这个芯片的GPIO有GPA-GPJ个组.具体可在芯片手册中看到. GPIO有很多寄存器,今天学习的这个芯片,他的寄存器分为以下几种类型: (1)端口控制寄存器 (2)端口数 ...