static(不能修饰类(从属)和局部变量(冲突))
1)static修饰属性,则该属性就成为静态属性。静态属性是全类公有的属性。什么叫全类公有的属性呢?
场景一:A类中定义了静态属性b:static int b;
那么A类的所有对象,都公用一个 b 属性,即 每一个A类对象的 b 属性,都指向同一块内存。
如果存在两个A类对象都调用了b属性,那么这个属性值以最后一次赋值为准;如:A1.b = 100; A2.b = 200; 最后打印输出b属性值为200;
2)static修饰方法,成为静态方法,静态方法是全类公有的方法,既然是全类公有,那么同一个类中的非静态方法都是可以访问静态方法或者静态属性的;但是静态方法是一个很有要求的方法,虽然提供给了其他人访问的权力,但对自身还是有要求的,静态方法中只能访问静态成员(属性或方法)。
注:静态方法中不能使用this关键字,因为静态方法从属于类本身(先有类),而this关键字标明的是类的对象(再有类对象)。
注:静态方法只能被静态方法覆盖,但是没有多态的!只能根据引用类型去调用方法,无法调用子类静态方法覆盖之后的静态方法,不过可以强制转换一下;
3)静态方法修饰初始化代码块;在类的里面,所有方法的外面定义的代码块称之为初始化代码块,使用static修饰它,就称之为静态初始化代码块;那么这个代码块什么时候执行呢?静态初始化代码块执行的时机是什么时候呢?
答案是在进行类加载的时候,会进行静态初始化代码的执行;那么类加载又是什么呢?类加载就是把.class 文件读入 JVM 的过程。也就是说,当 JVM 第一次遇到某个类时,会通过 CLASSPATH 找到相应的.class 文件,读入这个文件并把类的信息保存起来,这个过程叫做类加载。而静态初始化代码块会在类加载的时候执行。另外不要忘记,类加载的同时也会为其他静态成员如静态属性分配空间和初始化默认值;