1、静态方法:
1)静态方法代表一种不依靠实例变量也就不需要对象的行为。
2)静态方法通过直接使用类名调用(最常用),非静态方法通过对象的引用变量来调用。
3)可以通过对象的引用变量代替类名调用静态方法(容易造成误解,不常用)。
4)带有静态方法的类通常(虽然不一定是这样)不打算被初始化。
5)静态的方法不能调用(访问)非静态的变量。
原因:因为非静态的变量(实例变量)是归属于某个实例(对象)的,所以尝试在静态方法中访问实例变量时,编译器会抱怨说:“我是属于类的,我可不知道你说的是哪个实例(对象)的变量!”。
6)静态的方法不能调用非静态的方法(原因类似以上第4点)。
7)静态方法中不能使用this关键字(因为this与特定实例相关)。
2、静态变量:
1)静态变量的值对于同类的所有实例都是相同的,即同类的所有实例(对象)都共享同一份静态变量。
2)静态变量:每个类一份;实例变量:每个实例一份。
3)静态变量是在类被加载的时候初始化的。
注:通常Java虚拟机会加载某个类是因为第一次有人尝试创建该类的实例或使用该类的静态方法或变量。
4)静态变量会在该类的任何对象创建之前就完成初始化。
5)静态变量会在该类的任何静态方法执行之前完成初始化。
3、静态常量
1)静态常量:静态的final变量。
2)静态常量的初始化(必须初始化)。
a)在声明的时候:如public static final int PI=3.14。
b)在静态初始化程序(静态代码块)中:如static{...}。
注:静态初始化程序是一段在加载类时会执行的程序代码,他会在其他程序可以使用该类之前执行,所以很适合用来初始化静态的final变量,另外其中只能访问类的静态成员。
c)静态常量的初始化和静态代码块的执行级别是一样的,所以根据他们在代码中的顺序执行。
4、非静态的final变量
1)final变量可以修饰实例变量、局部变量及方法参数。
2)关于不可变性的说明:
a)修饰基本数据类型变量,则变量值不可改变。
b)修饰对象引用类型变量,则该引用不能改变(指向其他对象),但指向的对象内容可以改变。
5、final方法:final修饰的方法表示你不能覆盖掉该方法。
6、final类:final修饰的类表示你不能继承该类,即创建它的子类。