修饰符
访问权限
public
公共的,无论哪里都能访问。
protected
受保护的,本包内可用,包外有继承关系的子类中也可用。
default
默认的,只有本包内可用。
private
私有的,只有本类中可用。
总结
类内部 | 本包 | 子类 | 外部包 | |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
修饰类 | 修饰成员(属性和方法) | |
---|---|---|
public | √ | √ |
protected | × | √ |
default | √ | √ |
private | × | √ |
其他修饰符
finally
-
修饰类
最终类,“骡子类”,即不能派生子类,不能被继承,但可以继承别的类。例如:Math类、String类等。
-
修饰方法
最终方法,能被继承,但不能被覆盖。
-
修饰变量
最终变量,一旦赋值便不能修改。
final修饰基本数据类型 就是值无法修改;
final修饰引用数据类型 那是引用的值(内存指向的地址)不能修改。
static
-
修饰属性
静态属性,静态属性在内存当中只有一份值,它不是每个对象都有一份的,而是整个这个类型共享同一份,它不依赖于任何一个对象存在,在类第一次被加载的时候就要初始化。
静态属性可以直接使用类名.属性名访问,不需要对象。 -
修饰方法
静态方法 调用不需要对象 可以直接使用类名.方法名(), 所以静态方法调用起来更加简单。
那么为什么不把所有方法都定义成静态的呢?它有不足:不能直接访问非静态成员。
静态方法举例:
System.arraycopy();
Arrays.sort();
String.valueOf();
Math.random();
System.currentTimeMillis(); -
修饰代码块
静态初始化块用于初始化静态变量,它在类第一次被加载的时候执行,且执行一次。
非静态的初始化块 是用于给非静态的属性赋值的,而每有一个对象都会有一份儿属性,所以每创建一个对象执行一次。
abstract
-
修饰方法
抽象方法,代表这个方法不具体,没有方法体,直接用分号结尾。他代表了这个类一定有这个方法,但目前没有好的实现方式,等待子类实现。
-
修饰类
抽象类,这个类不形象,不具体,不能创建对象。Java的类中,即使只有一个方法是抽象方法,那这个类也一定是抽象类。抽象类不一定有抽象方法,但有抽象方法的类一定是抽象类。