Java学习笔记
Java学习笔记是一个持续更新的系列,工作多年,抽个空对自身知识做一个梳理和总结归纳,温故而知新,同时也希望能帮助到更多正在学习Java 的同学们。
本系列目录
入门篇
基础篇
标识符
用于给 Java 程序中变量、类、方法等命名的符号,也就是说凡是由我们自己起名的地方都可以称为标识符。
例如:方法名,变量名,类名,常量名,接口名等等
定义规则
使用标识符时,需要遵守几条规则:
- 标识符可以由字母、数字、下划线(_)、美元符($)组成,但不能包含 @、%、空格等其它特殊字符,不能以数字开头。
例如:123name - 标识符不能是 Java 关键字和保留字,但可以包含关键字和保留字。
例如:不可以使用 void 作为标识符,但是 Myvoid 可以。 - 标识符是严格区分大小写的。
Java 是一种大小写敏感的语言,尽量避免使用只有大小写不同的标识符。
例如:Hello 和 hello 是两个不同的标识符。
注意:关键字全是小写的。 - 标识符的命名规范化。
按照一定的规则,最好能反映出其定义的作用,见名知意。
命名规范
在Java语言中,标识符的命名随意性很大,为提高程序的可读性、可维护性,命名时需按照企业制定的规范进行。
常见的命名规则有以下几种
- 工程结构
- 项目名全部小写
例如:javaproject
- 包名全部小写,其余组成词可使用“.”符号分隔
每个包名都必须保持唯一性,由于企业的域名称是不会重复的,所以通常开发人员采用自己公司的域名称作为自己程序包的唯一前缀。
例如 : com.csdn.klsstt…
通用规则:com.公司(团队)名.项目名.模块名 - 类文件名首字母大写,其余组成词首字母依次大写
例如:HelloWord.java
- 资源文件名首字母小写,其余组成词可使用分隔符或者首字母依次大写
例如:application-test.yml,index_head.html
注意:有些第三方的框架的配置文件名称是固定的或者有自己定义的命名规则,如果引用框架,则以其自身的命名规则为准。
- 类文件
-
类名和接口名
每个单词的首字母大写,其余为小写。
例如: HelloWord
注意:类名或者接口名必须与Java文件名保持一致。 -
变量名和方法名
第一个单词首字母小写,之后的单词首字母为大写。
例如:String userName=“张三”; -
常量名
全部大写字母,单词与单词之间用下划线分隔
例如:public final String APP_ID=“123465”;
注意:标识符应尽量使用有意义的单词组合,避免使用无意义的字母,拼音,汉字。
关键字
关键字是Java语言事先定义好的有特别意义的标识符,有时又叫保留字。
Java的关键字对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,标识符命名时,不能与关键字重复。
目前Java中存在53个关键字,其中保留字有两个,分别是goto和const
保留字是Java提前保留的关键字,目前版本中还未启用,所以没有任何作用,但是已经被当作关键字了,定义标识符时不能与关键字重复。
修饰符
Java关键字中有一部分用于限定类型以及类型成员声明的关键字,被称为修饰符。
Java的修饰符根据修饰的对象不同,分为类修饰符、方法修饰符、变量修饰符,其中每种修饰符又分为访问控制修饰符和非访问控制修饰符。
修饰符种类分布列表
类修饰符 | 方法修饰符 | 变量修饰符 | |
---|---|---|---|
访问控制修饰符 | public | public protected private default | public protected private default |
非访问控制修饰符 | abstract final | abstract static final native synchronized | static final volatile transient |
访问修饰符作用
修饰符 | 作用 | 类 | 方法 | 变量 |
---|---|---|---|---|
default | 没有被关键字修饰时默认访问权限,没有关键字 | 此时该类只有同一个包下的其他类可见 | 此时该方法只有同一个包下的类可见 | 此时该变量只有同一个包下的类可见 |
public | 公共访问控制符 | 修饰类成为公共类,可以使用import关键字导入到其他类中 | 修饰方法成为公共方法,可以在外部使用 | 修饰变量成为公共变量,可以在外部使用 |
protected | 保护访问控制符 | 此时类只能被同一个包和其子类可见,若子类与父类不在同一包中,那么在子类中,子类实例可以访问其从父类继承而来的protected方法,而不能访问父类实例的protected方法 | 此时方法只能被同一个包和其子类可见 | 此时变量只能被同一个包下的类和其子类可见 |
private | 私有修饰符 | 不可用 | 此时方法只能在类内部使用,不能被继承 | 此时变量只能在内部使用 |
非访问修饰符作用
修饰符 | 作用 | 类 | 方法 | 变量 |
---|---|---|---|---|
abstract | 写在访问修饰符后,类名前,Java中定义抽象的关键字 | 定义抽象类,类和类之间如果具有相同的特征,将这些共同的特征提取出来,形成的就是抽象类 | 用来定义抽象方法,抽象方法没有方法体,必须在抽象类中定义,抽象类被继承时,必须重写抽象方法 | 不可用 |
final | 定义常量关键字,写在访问修饰符后,类名/方法/变量名前 | 使类不可被继承,final类中的所有成员方法都会被隐式地指定为final方法 | final方法不可被继承重载 | final变量成为常量,如果是基本类型则值不可修改,如果是引用类型,则不可更改对象的引用指针,但是可以修改对象内容 |
static | 静态方法,静态变量修饰符,方便在没有创建对象的情况下通过类名来进行方法和变量的调用 | 不可用 | static方法不依赖于任何对象就可以进行访问,因此方法中没有this对象,也不能访问类的非静态成员变量和非静态成员方法,但是在非静态方法中却可以访问静态方法和静态变量 | static变量即静态变量被所有的对象所共享,在内存中只有一个副本 |
native | 主要作用于方法上,表示该方法的实现由非Java语言实现,比如用C或C++实现 | 不可用 | 使用native关键字说明这个方法是原生函数,由c或者c++实现并且被编译成了DLL,由java去调用 | 不可用 |
synchronized | Java中的同步锁,底层使用操作系统的mutex lock实现的 | 不可用 | 能够保证在同一时刻最多只有一个线程执行该段代码 | 不可用 |
volatile | Java提供的轻量级的同步机制,它不会引起线程上下文的切换和调度 | 不可用 | 不可用 | volatile赋予了变量俩个特性,1.保证了不同线程对该变量操作的内存可见性,2.禁止指令重排序,缺点是不能保证操作的原子性 |
transient | 如果不需要序列化属性,在它前面添加关键字transient即可 | 不可用 | 不可用 | 一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问 |
关键字列表
访问控制
private 私有的
protected 受保护的
public 公共的
类、方法和变量修饰符
abstract 声明抽象
class 类
extends 扩允,继承
final 终极,不可改变的
implements 实现
interface 接口
native 本地
new 创建
static 静态
strictfp 严格,精准
synchronized 线程,同步
transient 短暂
volatile 易失
程序控制语句
break 跳出循环
continue 继续
return 返回
do 运行
while 循环
if 如果
else 反之
for 循环
instanceof 实例
switch 开关
case 返回开关里的结果
default 默认
错误处理
try 捕获异常
catch 处理异常
finally 有没有异常都执行
throw 抛出一个异常对象
throws 声明一个异常可能被抛出
assert 断言
包相关
import 引入
package 包
基本类型
boolean 布尔型
byte 字节型
char 字符型
double 双精度,
float 浮点
int 整型
long 长整型
short 短整型
null 空
true 真
false 假
enum 枚举
变量引用
super 父类,超类
this 本类
void 无返回值
保留字
goto
const
保留字暂无意义