大话java基础知识一之为什么java的主函数入口必须是public static void
为什么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 ...
随机推荐
- [Swift实际操作]九、完整实例-(6)创建App欢迎界面
本文创建一个位于导航控制器之内的欢迎页面,该页面主要用来向用户简要介绍产品的功能.以及提供主要功能的入口. 首先选择自定义视图文件夹[CustomViews],需要在该文件夹下,导入一款第三方类库.该 ...
- BFS【bzoj1667】: [Usaco2006 Oct]Cows on Skates滑旱冰的奶牛
1667: [Usaco2006 Oct]Cows on Skates滑旱冰的奶牛 Description 经过跟Farmer John长达数年的谈判,奶牛们终于如愿以偿地得到了想要的旱冰鞋.农场上大 ...
- linux 内核的 switch_to原理
switch_to:这是一个宏,有三个参数prev,next,last 局部变量prev,next:指向进程描述符的内存地址 首先明确的是:last和prev是同一个,用last只是为了理解方便,完全 ...
- 9.path Sum III(路径和 III)
Level: Easy 题目描述: You are given a binary tree in which each node contains an integer value. Find t ...
- Web安全工程师(进阶)课程表
01-SQL注入漏洞原理与利用 预备知识: 了解HTTP协议,了解常见的数据库.脚本语言.中间件.具备基本的编程语言基础. 授课大纲: 第一章:SQL注入基础 1.1 Web应用架构分析1.2 SQL ...
- P3172 [CQOI2015]选数(莫比乌斯反演)
[题目链接] https://www.luogu.org/problemnew/show/P3172 [题解] https://www.luogu.org/blog/user29936/solutio ...
- Codeforces Round #339 (Div. 2) A
Description Programmer Rostislav got seriously interested in the Link/Cut Tree data structure, which ...
- Go语言基础之2--字符串详解
一.字符串原理解析 1. 字符串底层就是一个byte数组,所以可以和[]byte类型互相转换:(字符串可以存文本,也可以存二进制,因为其本来就是一个字节流) 2. 字符串之中的字符是不能修改的,那怎 ...
- Log4web独立config配置
第一步:config配置,独立文件的 <?xml version="1.0" encoding="utf-8"?> <configuratio ...
- HikariPool连接池的使用
HikariDataSource datasource= new HikariDataSource( xxxx ); Connection cn = datasource.getConnection( ...