Java中的关键字
关键字的分类
访问控制:private、protected、public、default
修饰符:abstract、class、extends、final、implements、new、static、strictfp、synchronized、transient
程序控制:break、continue、return、do、while、for、instanceof、switch、case、default
错误处理:try、catch、throw、throws、finally
关于包:import、package
基本数据类型:boolean、byte、char、double、float、short
变量引用:super、this、void
保留字:goto、const
default: 这个关键字很特殊,既属于程序控制,也属于类,方法和变量修饰符,还属于访问控制。
访问控制符
范围 | private | default | protected | public |
---|---|---|---|---|
同一类 | √ | √ | √ | √ |
同一包中的类 | √ | √ | √ | |
同一包中的类、不同包中的子类 | √ | √ | ||
所有 | √ |
private主要用来修饰变量和方法,一般不会用来修饰类,除非是内部类。
被private修饰的变量和方法,只能在自己对象内部使用,当一个变量或方法被定义为私有变量,则在别的类中用该类实例化的对象将无法直接访问该成员变量和方法。(在自身所在类的内部,依旧可以访问)
那么继承关系呢?
如果是继承关系,那么你依然无法通过super来调用被private修饰的方法和变量。在官方文档中描述的是子类不能继承父类的对象,但是如果子类中公有的方法影响到了父类私有属性,那么私有属性是能够被子类使用的,但是在实例化的过程中,JVM 需要为对象的类及其父类中所有定义的属性分配空间,包括父类中声明的私有成员。所以,在另一种角度来说子类也是拥有父类的私有属性和方法只是不能直接调用,但是我们还是可以通过set和get的方法来间接的访问父类中的private属性的变量。
static关键字
static关键字可以修饰类、方法、变量、初始化块、内部类,被static修饰的成员都是类成员,可以只用类名的方式进行访问。
- 被static修饰的变量,叫做静态变量,只加载一次
- 静态代码块也是只加载一次,不论创建多个对象都是被加载一次
- 如果是非静态的内部类,需要通过外部类进行创建,而静态内部类不需要,且不可以访问外部类的非静态成员
静态内部类需满足如下规则:
-
静态内部类可以包含静态成员,也可以包含非静态成员;
-
静态内部类不能访问外部类的实例成员,只能访问它的静态成员;
-
外部类的所有方法、初始化块都能访问其内部定义的静态内部类;
-
在外部类的外部,也可以实例化静态内部类,语法如下:
外部类.内部类 变量名 = new 外部类.内部类构造方法();
final关键字
final代表不可变的
- final类:final关键字修饰的类不可以被继承。
- final方法:final关键字修饰的方法不可以被重写。
- final变量:final关键字修饰的变量,一旦获得了初始值,就不可以被修改。
final和finally的区别
final 可以用来修饰类、方法、变量,分别有不同的意义,final 修饰的 class 代表不可以继承扩展,final 的变量是不可以修改的,而 final 的方法也是不可以重写的(override)。 finally 是 Java 保证重点代码一定要被执行的一种机制。