1.每个源文件中可以有多个类,但只能有一个public类且public的类名必须和源文件名称一致。
2.标识符命名规则:
①标识符只能由数字、字母、下划线“_”、美元符号“$”组成,不能含有其它符号。
② 标识符不能以数字开始。
③ java 关键字和保留字不能作为标识符。
④ 标识符严格区分大小写。
⑤ 标识符理论上没有长度限制。
3.标识符命名规范:
① 见名知意:看到这个单词就知道它表示什么,增强程序的可读性,例如:Student 则表示学生类型,User 则表示用户类型;
② 遵循驼峰命名方式:可以很好的分隔单词,每个单词之间会划清界限,同样也是增强程序的可读性,例如:getName 则表示获取名字,UserService 则表示用户业务类;
③ 类名、接口名首字母大写,后面每个单词首字母大写,这是遵守驼峰命名方式的;
④ 变量名、方法名首字母小写,后面每个单词首字母大写,这也是遵守驼峰命名方式的;
⑤ 常量名全部大写,单词和单词之间用下划线连接。
4.方法的定义
[修饰符列表] 返回值类型 方法名(形式参数列表){ 方法体; }
5.静态方法使用类名的方式调用。实例方法使用引用的方式调用。
6.功能相似的方法可以进行方法重载,即相同的命名和不同的形参列表。
7.类的定义
[修饰符] class 类名 { //类体 = 属性(变量) + 方法 }
8.方法体内声明为局部变量<存储在栈中>,方法体外声明为成员变量(实例变量<存储在堆中>和静态变量<存储在方法区>)。
9.构造方法:
构造方法是类中特殊的方法,通过调用构造方法来完成对象的创建,以及对象属性的初始化操作。
[修饰符列表] 构造方法名(形式参数列表){ 构造方法体; }
① 构造方法名和类名一致。
② 构造方法用来创建对象,以及完成属性初始化操作。
③ 构造方法返回值类型不需要写,写上就报错,包括 void 也不能写。
④ 构造方法的返回值类型实际上是当前类的类型。
⑤ 一个类中可以定义多个构造方法,这些构造方法构成方法重载。
当一个类没有显示的定义任何构造方法的时候,系统默认提供无参数构造方法,当显示的定义构造方法之后,系统则不再提供无参数构造方法。
10.实例变量是在构造方法调用的时赋值。
11.封装:
我们可以使用 java 语言中的 private 修饰符,private 修饰的数据表示私有的,私有的数据只能在本类当中访问。
使用方法提供入口。
12.空指针异常:空引用访问实例。
13.方法体中直接访问实例变量,则该方法一定是实例方法。
14.一个类当中可以编写多个静态代码块。类加载时执行,自上而下执行,并且只执行一次。
static{ java 语句; }
15.一个类中可以编写多个实例代码块。在每个构造方法执行之前自上而下自动执行。
{ java 语句; }
16.this保存当前实例的地址(谁去调用就储存谁的地址)。
17.使用“this(实际参数列表);”来调用有参数的构造方法,这样就可以让代码得到复用了。this()语法只能出现在构造方法第一行。
18.方法覆盖:
那么,当程序具备哪些条件的时候,就能构成方法覆盖呢?
① 方法覆盖发生在具有继承关系的父子类之间,这是首要条件;
② 覆盖之后的方法与原方法具有相同的返回值类型、相同的方法名、相同的形式参数列表;
另外,在使用方法覆盖的时候,需要有哪些注意事项呢?
① 由于覆盖之后的方法与原方法一模一样,建议在开发的时候采用复制粘贴的方式,不建议手写,因为手写的时候非常容易出错,比如在 Object 类当中有 toString()方法,该方法中的 S 是大写的,在手写的时候很容易写成小写 tostring(),这个时候你会认为 toString()方法已经被覆盖了,但由于方法名不一致,导致最终没有覆盖,这样就尴尬了;
② 私有的方法不能被继承,所以不能被覆盖;
③ 构造方法不能被继承,所以也不能被覆盖;
④ 覆盖之后的方法不能比原方法拥有更低的访问权限,可以更高(学习了访问控制权限修饰符之后你就明白了);
⑤ 覆盖之后的方法不能比原方法抛出更多的异常,可以相同或更少(学习了异常之后就明白了);
⑥ 方法覆盖只是和方法有关,和属性无关;
⑦ 静态方法不存在覆盖(不是静态方法不能覆盖,是静态方法覆盖意义不大,学习了多态机制之后就明白了);