一、静态变量
1.静态变量使用static修饰
2.静态变量属于类,可以被类及此类的所有对象访问。普通成员变量属于对象,不能被类直接访问
3.静态变量存储在静态方法区,普通成员变量存储在堆区。
4.静态变量随着类的初始化而初始化,普通成员变量随着对象的初始化而初始化。
5.静态变量不被jvm回收,普通成员变量被jvm回收。
6.静态变量可以被静态方法及普通成员方法访问,普通成员变量只能被普通成员方法访问。
二、静态方法
1.静态方法使用static修饰的方法
2.静态方法属于类,可以被类直接调用,普通成员方法属于对象,只能被对象调用。
3.存储位置不同:静态方法在静态方法区,普通成员方法在普通方法区。
4.静态方法只能访问静态变量,不能访问成员变量,普通成员方法都能访问,因为生命周期不同。
5.静态方法随着类的初始化而初始化。普通成员方法,随着对象的初始化而初始化。
三、静态代码块
1.随着类的初始化而初始化。
2.只能访问静态变量。
3.随着类的初始化,只执行一次。
四、静态内部类:如果一个类要被声明为static的,只有一种情况,就是静态内部类。
静态内部类实际上与普通类(即类名必须与文件名一样的顶级类)一样,只是静态内部类在某一类的内部定义了而已,既然是类,要想使用就必须实例化。
概念上与静态变量、静态方法是不一样的,不要被“静态”两个字迷惑了(不要以为凡是静态的东西就不需要实例化就可以直接使用,静态内部类是有区别),
而且只有静态内部类,而没有静态类(顶级类)的概念