static
1.static:静态的
2.static用来修饰:属性、方法、代码块、内部类
3.static用来修饰属性:
-
3.1 在类中声明的属性分为:static修饰的:静态变量、类变量
非static修饰的:实例变量
-
3.2 静态变量在内存中只有一份,被类的多个对象所共享。
如果类的一个对象对共享的静态变量进行修改的话,会导致其他所有的对象调用此静态变量,也是修改过的。
对比:实例变量,在内存中每个对象一份。当通过对象a修改此实例变量时,不会影响其他对象此变量的值。
-
3.3 实例变量:存储在堆空间中
静态变量:方法区的静态域中
-
3.4 实例变量,随着对象的创建而加载。每个对象一份。
静态变量,随着类的加载而加载。内存中只有一份。
-
3.5 静态变量的加载要早于对象的创建。
-
3.6
是否可以直接调用 | 静态变量 | 实例变量 |
---|---|---|
类 | yes | no |
对象 | yes | yes |
上述的解释都从生命周期的角度来看即可:后出生的可以调用已经加载的。
-
3.7 Math.PI 或 System.out
-
3.8 开发中,类中的属性如何判断需要加上static修饰呢?
是否需要当前类的多个对象共享唯一的一个属性。如果是,那就使用static修饰。
类中的常量习惯使用static修饰。
4.static用来修饰方法:
- 4.1
是否这可直接调用 | 静态方法 | 实例方法 |
---|---|---|
类 | yes | no |
对象 | yes | yes |
-
4.2 静态方法随着类的加载而加载。
比如:Math.round() Math.random() Math.sqrt() Arrays.sort() Arrays.binarySearch() …
-
4.3 静态方法内不能调用非静态的结构,可以调用静态的结构:属性或方法
非静态的方法内可以调用静态的结构和非静态的结构:属性或方法
-
4.4 开发中,类中的方法如何判断需要加上static修饰呢?
通常,工具类中的方法都是静态方法
通常方法内如果操作静态变量,则此方法一般声明为静态的。
5:在静态方法中不能使用this和super关键字(因为当时对象还没创建)