①访问权限②static③静态方法④实例初始化块⑤静态初始化块
一、访问权限
默认是同包
protected是有关系的,即同包和不同包的子类
private只有本类,public全部
本类 | 同包 | 不同包 | |||
子类 | 非子类 | 子类 | 非子类 | ||
private | √ | ||||
默认(同包) | √ | √ | √ | ||
protected | √ | √ | √ | √ | |
public | √ | √ | √ | √ | √ |
二、static
static可以修饰属性(一个值),方法(预加载,类级别),初始化块(只执行一次),成员内部类(相当于属性)(本类直接new出来,外部new时需要用 外部类类名.new)
不能修饰类,类只能用这几个修饰 only public, abstract & final are permitted
不能修饰构造,因为构造器是构造对象的,static是类级别,在加载类的时候就加载了,only public, protected & private are permitted
不能修饰局部变量,only final is permitted
不能修饰局部内部类,only abstract or final is permitted
静态成员变量,类级别,全类共享一个
Person.country = "中国";
一般用在有共同的属性的时候,或者常量
public static final int PI = 3.14;否则每个对象在new 的时候都会有个PI,浪费空间
可以不创建对象直接调动,也可以new一个对象在调用
特点①与对象无关,与类有关②全类共享一个值③预加载(随着类的加载而被加载)
public static int num = 0;
构造(){
num++;
}
三、静态方法
随着类的加载而被加载
static的方法不能操作非static的任何属性和方法,
原因:①类级别,与对象无关②类先被加载,非static的还没有被加载到内存
常用在:工具类的工具方法
四、实例初始化块
{}
构造(){}
在产生对象的时候自动执行,new几次执行几次,使用量少,因为完全可以写到本类构造方法前几行
在父类的构造方法之后,在本类的构造方法之前
五、静态初始化块
static{}
类加载的时候自动执行,且只会执行一次,使用量大
比如在一些准备工作,文件的准备,数据库初始化
new 子类();
执行顺序:fu静,子静,fu实,fu构,子实,子构
父类静态初始化块,子类静态初始化块(先对象,new子类会先调父类)
父类实例初始化块,父类构造器(调子类构造会先调父类构造,实例初始化块在构造器之前)
子类实例初始化块,子类构造器