为什么java的主函数入口必须是public static void main (String[] args);
很多写javaEE好几年的程序员经常会记得java的主函数就是这么写的,但实际上为什么这么写大都已经忘记。
由于每天被各种框架,各种技术包围,所以出现了一种知道怎么用但不知道为什么这么用的情况。
java的主函数是一个java基础知识的大综合,在面试中,从这里就能看出程序员的基础知识掌握程度。
一、是不是所有的类都可以有主方法?如果是,为什么?如果不是,那么在什么类中可以有主方法。
首先我们可以看到程序都是写在一个以.java结尾的文档中的,但是一个.java的文档并不是只能存在一个类,它里面可以存在很多类
但是并不是所有的类都可以有主方法的。只有在此类名与文档名相同的情况下,才可以在此类中存在主函数。如果文件中只有一个类,文件名必须与类名一致
二、为什么主函数要写public
这是java修饰符的知识,java*有四种访问限制修饰符:private,public,protected,default
private:私有,内部访问
public:共有,都可以访问
default:同一个包可以访问
protected:同一个包或者子类可以访问
修饰符 | 同类 | 同包 | 子类 | 不同包 |
public | √ | √ | √ | √ |
protected | √ | √ | √ | |
default | √ | √ | ||
private | √ |
需要注意的是,由于访问限制修饰符的存在,所以会有一些默认的规则,保证jvm的安全
1.java保存的文件名必须与类名一致;
2.如果文件中只有一个类,文件名必须与类名一致;
3.一个Java文件中只能有一个public类;
4.如果文件中不止一个类,文件名必须与public类名一致;
5.如果文件中不止一个类,而且没有public类,文件名可与任一类名一致。
而主函数必须用public修饰,由于一个文件中只能有一个public,所以需要让主函数使用public作为类的对外接口,供jvm使用。
三、主函数的static
java的static是一个关键字,也是作为java类中方法的修饰符。
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。
1、static变量
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。
用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量。可用类名直接访问,一旦静态变量被修改,其他实例均对修改可见,故线程不安全。因为static变量独立于任何实例,因此static变量必须被实现,而不能是抽象的abstract。在接口中,static变量默认被限制位static final修饰
2、static方法
静态方法可以直接通过类名调用,不需要创建实例,因此静态方法中不能用this和super关键字,不能直接访问当前类的实例变量和实例方法(因为它们都还没被加载)。只能访问当前类的静态成员变量和成员方法。因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。
3、static代码块
static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块仅仅只会被执行一次。
所以java的主函数入口被修饰成static以便在不用创建类的实例时,就可以调用。
四、void无返回值的
这里是方法的副作用和返回值类型
一个方法的执行,如果在返回一个值之外还导致某些外部“状态”发生变化,则称该方法产生了副作用。这里所谓“状态”发生变化,可以是实例域或静态变量被修改
1.没有返回值的方法必然有副作用,除非它的方法体是空的或者方法没有意义。所以,没有返回值的方法、有返回值但有副作用的方法称为过程
2.有返回值而且没有副作用的方法称为函数(function)。
由于java的主函数是栈中最底层的函数,所以并不存在能够接收的值,所以使用void,无返回的
五、main方法名(注意是main,很多初学者都会写成mian,这是不一样的)
main是java主方法的方法名,是不能被改变的,就算错了一个字也是不可以运行的。
由于java中有关键字(保留字)存在的机制,所以main也类似与一个关键字(但不是),jvm运行时,只会找符合要求的main单词,所以将main改变后,jvm将找不到主入口,方法将不能执行。当然,main也可以作为方法名存在。也可以作为变量名存在。
在一个类中可以存在多个main方法,这是方法的重载。在名字相同的同时,必须有不同的参数。不允许参数完全相同而只是返回值不同的情况出现。无法进行编译,程序在eclips中显示错误
六、String数组的参数
java语言是可以在命令行进行编辑执行的(我估计应该没人在这里玩吧)。这里可以了解到关于java的基本类型和应用类型。
8种基本类型
一、4种整型
byte 1字节 -128——127
short 2 字节 -32,768 —— 32,767
int 4 字节 -2,147,483,648 ——2,147,483,647(超过20亿)
long 8 字节 -9,223,372,036,854,775,808——9,223,372,036854,775,807
注释:java中所有的数据类所占据的字节数量与平台无关,java也没有任何无符号类型
二、 2种浮点类型
float 4 字节 32位IEEE 754单精度(有效位数 6 – 7位)
double 8 字节 64位IEEE 754双精度(有效位数15位)
三、1种Unicode编码的字符单元
char 2 字节 整个Unicode字符集
四、1种真值类型
boolean 1 位 True或者false
3种引用类型
类class
接口interface
数组array
我们在命令行输入是不管是什么字符都是一个字符串类型,如数字1可以是字符串“1”等等。所以用字符串的数组类型来装
大话java基础知识一之为什么java的主函数入口必须是public static void的更多相关文章
-
Java基础知识强化10:Java中的中间缓存变量机制
1.对于自增运算++j与j++,由于加一的执行顺序不同,所以Java中有中间缓存变量来储存其单个表达式的值,而j的自增自减的结果依然保留在原来的变量储存区.因为本体是j的值,而单个表达式的值是中间产生 ...
-
java基础知识(十一)java反射机制(上)
java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...
-
java基础知识(五)java类
类是java的核心和本质,是java语言的基础. 一.java中的类 1.类class 一个类可以包含局部变量.实例变量.类变量(静态变量) 一个类至少有一个构造方法,如果没有,系统会默认给出一个无参 ...
-
java基础知识(十一)java反射机制(下)
1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...
-
Java基础知识强化106:Java中 int 的各进制之间的转换
1.二.八.十.十六进制之间的转换 下面是示例代码,我们直接通过JDK工具库中的方法实现的,如下: public static Integer valueOf(String s, int radix ...
-
Java基础知识强化103:Java常量池理解与总结
一.相关概念 1. 什么是常量 用final修饰的成员变量表示常量,值一旦给定就无法改变! final修饰的变量有三种:静态变量.实例变量和局部变量,分别表示三种类型的常量. 2. Class文件中的 ...
-
Java基础知识强化101:Java 中的 String对象真的不可变吗 ?
1. 什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对 ...
-
Java基础知识强化13:Java中单例模式案例使用(懒汉式)
1.古往今来历史上皇帝通常只有一人.为了保证其唯一性,古人采用增加"防伪标识"的办法,如玉玺.更为简单的办法就是限制皇帝的创建.本案例中就是使用单例模式从而保证皇帝的唯一性.实例运 ...
-
Java基础知识强化12:Java中运用数组的四种排序方法
1.使用JavaApi文档中的Arrays类中的sort()进行快速排序 首先我们直接看代码如下: package himi.text; import java.util.Arrays; public ...
随机推荐
-
关于automatic_Panoramic_Image_Stitching_using_Invariant_features 的阅读笔记
并没有都读完,不过感觉还是有必要做一个笔记的,毕竟这只是随笔不是文章,所以可以有多少写多少,也算是工作总结了,最重要的是这个好在可以,完成所有有意义文档的检索,比起自己的word来说高级很多~~~. ...
-
POJ 2299 Ultra-QuickSort (求序列的逆序对数)
题意:废话了一大堆就是要你去求一个序列冒泡排序所需的交换的次数. 思路:实际上是要你去求一个序列的逆序队数 看案例: 9 1 0 5 4 9后面比它小的的数有4个 1后面有1个 0后面没有 5后面1个 ...
-
POJ 3449 Geometric Shapes
判断两个多边形是否相交,只需判断边是否有相交. 编码量有点大,不过思路挺简单的. #include<cstdio> #include<cstring> #include< ...
-
这是一个简单的前台短信验证码功能 ajax实现异步处理 (发送和校验)
<script type="text/javascript"> var InterValObj; //timer变量,控制时间 var count = 60; //间隔 ...
-
使用weinre远程调试
1.调试环境: 1)使用nodejs搭建调试服务器: 先安装node,然后使用npm安装weinre,在node.js安装目录输入以下命令 npm install weinre 2)需要wifi环境和 ...
-
ubuntu 18.04 安装mysql 8.0
1.下载配置(不然直接装的是mysql5.7): wget https://repo.mysql.com//mysql-apt-config_0.8.10-1_all.deb 2.更新配置: sudo ...
-
电磁波、无线电、802、WLAN及WiFi的区别与联系
一.电磁波.无线电.WLAN和WiFi的关系 电磁波 > 无线电 [+ 可见光] > WLAN [+ 电话 ]> WiFi [+蓝牙] 参考:https://zh.wikipedia ...
-
如何优雅的选择字体(font-family)
大家都知道,在不同操作系统.不同游览器里面默认显示的字体是不一样的,并且相同字体在不同操作系统里面渲染的效果也不尽相同,那么如何设置字体显示效果会比较好呢?下面我们逐步的分析一下: 一.首先我们看看各 ...
-
精选10款HTML5手机模板
1.Stroller | Mobile & Tablet Responsive Template 演示地址 购买地址 2.Ocean Mobile Template 演示地址 购买地址 ...
-
初学者手册-Sublime Text常用快捷键
Alt + F3 :找出当前文档中所有被划选的词语,若文档很大的话,可能会导致Sublime Text崩溃. Ctrl + kkk :删除当前行光标至行尾的所有内容. End: 光标跳至行尾. Hom ...