类别 | 关键字 | 说明 |
访问控制 | private | 私有的 |
protected | 受保护的 | |
public | 公共的 | |
default | 默认 | |
类、方法和变量修饰符 | abstract | 声明抽象 |
class | 类 | |
extends | 扩充,继承 | |
final | 最终值,不可改变的 | |
implements | 实现(接口) | |
interface | 接口 | |
native | 本地,原生方法(非 Java 实现) | |
new | 新,创建 | |
static | 静态 | |
strictfp | 严格,精准 | |
synchronized | 线程,同步 | |
transient | 短暂 | |
volatile | 易失 | |
程序控制语句 | break | 跳出循环 |
case | 定义一个值以供 switch 选择 | |
continue | 继续 | |
do | 运行 | |
else | 否则 | |
for | 循环 | |
if | 如果 | |
instanceof | 实例 | |
return | 返回 | |
switch | 根据值选择执行 | |
while | 循环 | |
错误处理 | assert | 断言表达式是否为真 |
catch | 捕捉异常 | |
finally | 有没有异常都执行 | |
throw | 抛出一个异常对象 | |
throws | 声明一个异常可能被抛出 | |
try | 捕获异常 | |
包相关 | import | 引入 |
package | 包 | |
基本类型 | boolean | 布尔型 |
byte | 字节型 | |
char | 字符型 | |
double | 双精度浮点 | |
float | 单精度浮点 | |
int | 整型 | |
long | 长整型 | |
short | 短整型 | |
变量引用 | super | 父类,超类 |
this | 本类 | |
void | 无返回值 | |
保留关键字 | goto | 是关键字,但不能使用 |
const | 是关键字,但不能使用 |
static的用法及注意事项(静态可以在加载类的时候初始化)
好处
除了可以被对象调用外,还可以被类名调用,避免浪费空间,使用时,可以不需要创建对象即可使用该功能
用法
%
1.静态方法不可以访问非静态成员,但是非静态方法可以访问静态成员
说明:静态的弊端在于访问的局限性,好处是可以直接被类名调用
原因:
(1)静态是随着类的加载就加载了,随着类的消失而消失
(2)静态优于对象存在,被对象共享(开发时,静态一般用类名调用)
(3)因为静态先存在于内存中,无法访问后来对象中的数据,所以静态无法访问非静态。而且内部无法使用(书写)this,因为这时对象可能不存在,this没有任何指向
2.静态方法中不允许出现this、super关键字
%
定义功能时,如果功能不需要访问类中定义的成员变量时,该功能就需要静态修饰
成员变量每个对象都一致时,将所有类相同的属性实现共享,节省空间,可以在变量前加静态
//静态的主函数
public static void main (String[] args)
主函数在被虚拟机调用->在生成的类中找寻入口,即主函数
public :权限最大
static : 不需要对象,直接用给定的类名就可以访问该函数了
void : 不需要返回值
main : 函数名,该名称是固定的
(String[] args) : 主函数的参数列表,字符串属性类型的参数 打印出来为:对象类型+对应算出来的哈希值,说明jvm传递了一个字符串类型的数组实体,且传递的是一个 new String[0],在命令行调用时在后面输入可传入参数并储存到数组中。
args : arguments 参数,该名称就是一个变量名
静态变量与成员变量的区别
1.所属范围不同:静态变量所属于类,成员变量所属类
静态变量也称为:类变量
成员变量也称为:实例变量
2.调用不同:
静态变量可以被对象和类调用(一般都用类名调用)
成员变量只能被对象调用
3.加载时期不同:
静态变量随着类的加载而加载
成员变量随着对象的加载而加载
4.内存存储区域不同:
静态变量存储在方法区中(数据共享区)
成员变量储存在堆内存中
方法区
存储类:
类中的各成员(非静态)
静态code:
里面储存静态成员
静态代码块
//静态变量有两次初始化:一默认初始化,二显示初始化
模式:
static{}
执行时间:在静态变量显示初始化后执行
特点:随着类的加载而执行,仅执行一次。
作用:给类进行初始化
构造代码块
模式(类中):
{}
执行时间:只要创建对象就会被调用,给所有对象初始化,构造函数只给对应的对象针对性的初始化,在静态变量显示初始化后执行,也在静态代码块后执行
特点:这里面可以定义不同构造函数的共性代码
作用:用于构造对象
局部代码块(放于方法中)
模式(在方法中):
{}
特点:该代码块中的变量为局部变量,语句运行完局部变量直接释放
作用:可以控制局部变量生命周期
final(显示初始化的值,不能不显示初始化):
继承的弊端:
打破了封装性
可以通过final来实现
修饰符:
1.final是一个最终类,不能再派生子类
2.final可以修饰类、方法、变量(成员变量、局部变量、静态变量)
3.final修饰的变量常量时,只能被赋值一次(当程序中一个数据在使用时是固定不变的,可以给该数据起个名字,这就是变量,为了保证这个变量的值不被修改,加上final修饰,这就是一个阅读性很强的常量,书写规范,被final修饰的常量所有的字母都是大写的,如果由多个单词组成,单词间通过 _ 连接)
abstract(抽象):
情景:
当A类与B类中有共同的内容时,可以抽取所属共性内容,创建父类,但是,如果A类与B类,功能类似,但是表现不一样,可以在父类中定义一个函数
abstract name ();——抽象函数
定义了抽象函数的类也必须抽象化——抽象类(描述事物时,没有足够的信息描述一个事物时,这是该事物就是抽象事物)
抽象类的特点:
1.抽象类和抽象方法都要用abstract修饰,抽象方法一定要定义在抽象方法中
2.抽象类不可以创建实例,因为调用抽象方法没有意义
3.只有覆盖了抽象类中所有抽象方法后,子类才可以实例化,否则该子类依旧是一个抽象类
(之所以继承,更多的是在思想,面对共性类型操作会更简单)
细节:
1.抽象类一定是一父类,是不断抽取而来的
2.抽象类有构造函数,虽然不可以给自己的对象初始化,但是可以给自己的子类初始化
3.抽象类可以不定义抽象函数,意义仅仅是为了不让该类创建对象
4.abstract不能和final(final修饰的类不可能产生子类了,而抽象类必须有子类,所以冲突)、private(抽象函数在子类中要覆盖、重写,所以不能被私有化)、static(被static修饰可以通过类名调用,但是该方法为抽象函数,无意义)关键字共存
与一般类的异同:
相同:
1.他们都是用来描绘事物的
2.他们之中可以定义属性和行为
不同:
1.一般可以描绘具体的事物,抽象类描绘的事物信息不具体
2.抽象类中可以多定义一个成员:抽象函数
3.一般类可以创建对象,而抽象类不能创建对象
interface(接口):
情形:当一个抽象类里面方法全是抽象的,这是可以用接口来表示
定义:
interface Dema
{
abstract void show1;
abstract void show2;
}
1.定义变量:但是变量必须持有固定的修饰符,public static final,所以接口中的变量也称之为常量
2.定义方法:方法也有固定的修饰符,public abstract
其固定的修饰符可以不写,因为编译时会自动加上
特点:
1.接口不能创建对象
2.子类必须覆盖掉所有方法后,子类才可以实例化,否则子类是一个抽象类
接口继承的关键字(implements)
interface Dema
{
内容1;
内容2;
·
·
·
}
class DemoImpl implements Demo
{
//覆盖时方法必须要有关键字public,因为接口方法自带public,覆盖时没有会权限不够
}
重要体现:
解决了多继承的弊端,将多继承这种机制在Java中实现了
当多继承时,多个父类中有相同功能时,子类会产生不确定性,核心原因是因为多继承的父类中功能有主体,而导致调用运行时,不确定运行哪个主体,接口中的功能没有方法体,由子类说了算,所以多实现解决了多继承的弊端。
protected关键字
在外包中的类中的方法,不能直接对外开放,只能对子类进行覆写时,用protected