JAVA关键字理解

芋圆院长 / 2023-08-15 / 原文

各种关键字总是弄混,划一根线来梳理一下它们之间的关系~

前言

关键字,是语言的肢体,利用关键字才能表现出不同的动作,进而真正实现功能。

不得不说任何一种计算机语言都会从数据类型开始讲起。当基本数据类型不足以满足当下需求时,就会出现数组等各种类型,即引用数据类型。
【所以会有用于定义数据类型的关键字】

实现功能时使用简单的逻辑,条件 循环等
【所以会有用于定义流程控制的关键字】

实现上述两个功能后,基本的功能都是可以实现的。但在解决不同的问题、面对不同的情境时,总会出来更多省时省力的方法。针对这些思路抽象出更方便的实现模式。在JAVA的世界里,一切皆对象,不严谨地说,类包含了一切(毕竟是对象的模板)。
就会有【用于定义建立实例及引用实例,判断实例的关键字】

制造出不同的对象解决不同的问题,面向对象的三大特征必不可少:封装、继承和多态。
暴露在外边的时候,就会有【用于定义访问权限修饰符的关键字】

继承的时候,就会有有的希望被继承,有的是父类的特有属性,有的被抽象到一定程度。
就会有【用于定义类、函数、变量修饰符的关键字】、【用于定义类与类之间关系的关键字】

何时何地应急情况 不可控情况,always has a plan B。
异常处理必须存在,所以有【用于异常处理的关键字】

介于JAVA的管理模式 project module package class,一定会有【用于包的关键字】

做事情总要滴水不漏啊,所以一定会有不在这些大流程范围内的【其他关键字】

万一随着场景的多样化又出来新的门类呢?所有事情都是在迭代中不断完善进步的!

用于定义数据类型的关键字

byte short int long float double char boolean,
class interface enum,
void
注意啊,引用数据类型包括类,接口,数组,枚举,注解。String 也是类哦。

用于定义流程控制的关键字

if else switch case default
for while do break continue return

用于定义建立实例及引用实例,判断实例的关键字

new this super instanceof

用于定义访问权限修饰符的关键字

public protected private

修饰符 本类 本包 其他包子类 其他包非子类
public
protected √(本包子类非子类都可见) √(其他包仅限于子类可见) ×
缺省 √(本包子类非子类都可见) × ×
private × × ×

public 和 default

可以修饰类、成员变量、成员方法、构造方法。

protected 和 private

可以修饰成员变量、成员方法、构造方法,不能修饰类(这里指的是外部类)
那么内部类
参考链接:https://blog.csdn.net/mashaokang1314/article/details/83111727
【写了好多啊,值得我再写一篇整理参考了。】
跳转链接:下一篇。

用于定义类、函数(方法)、变量(成员)修饰符的关键字

static final abstract

static

修饰成员变量和方法,不能修饰类。
因为它本身就是来表示属性和方法与类的绑定关系的。与和对象绑定的属性和方法进行区分。static修饰的方法或变量不需要依赖对象进行访问,只要类被加载了,就可以通过类名去访问。

因为主要和加载这块相关,所以修饰代码块 -- 在变量的初始化顺序那里也有一定的应用。

静态变量

随类加载,只有一次。只能修饰成员变量,不能修饰局部变量。

静态方法

静态方法不依赖对象就可以访问,所以不构建对象,没有this。所以静态方法中不能访问类的非静态成员变量和非静态方法。【必须要一起加载了才能实现,我加载 你不加载 我们没法合作。】
如果想在不创建对象的情况下调用某个方法,就可以将方法设置为static。

静态代码块

很多时候会将一些只需要进行一次的初始化操作放在static代码块中进行。
静态初始化块可以置于类中的任何地方,类中可以有多个静态初始化块。在类初次被加载时,会按照静态初始化块的顺序来执行每个块,并且只会执行一次。

mian方法加载前在干什么

JAVA以类为单位执行,找到main函数入口开始执行(非单元测试情况下)。
先加载类(使用类加载器搜索类的二进制代码,然后加载),链接类(验证 准备 解析),初始化类(静态变量的初始化和静态代码块的初始化),调用main方法。

“初始化包括静态变量的初始化和静态代码块的初始化。初始化是按文本顺序进行。如果 Test 类可以被初始化,其直接父类需要先被初始化了,而如果直接父类可以被初始化,直接父类的直接父类需要先被初始化了,以此递推。Object 类没有父类,所以 Object 类初始化后,递推结束。在初始化直接父类的时候,如果直接父类还没有被加载,则需要先加载、链接、初始化直接父类。所以,在初始化一个类阶段,有可能会抛出加载错误、链接错误、初始化错误。”

final

修饰成员变量和方法,类。
final表示最终,已经终结,意味着不能延续。
修饰成员变量,这个变量不能更改,我拿到的是什么 什么就不能更改,我拿到的就是常量。基本数据类型值不能改,引用数据类型地址不能改。
修饰局部变量,由方法传入的参数来完成初始化,不能被赋值。
修饰类,这个类不能被继承。
修饰方法,这个方法不能被重写。

abstract

修饰成员方法和类

用于定义类与类之间关系的关键字

extends implements

用于异常处理的关键字

try catch finally throw throws

用于包的关键字

package import

其他修饰符关键字

native strictfp transient volatile assert