static关键字
【static:adj. 静态的 】
可以用于修饰 属性、方法、代码块、内部类
1. 修饰属性:静态变量(类变量)
分类
若用static修饰,则称为静态变量(或类变量),否则是非静态变量(实例变量)
-
静态变量:创建了类的多个对象,多个对象共享同一个静态变量。当某个对象修改了静态变量时,其他对象读取的是最新的修改值。
-
实例变量:创建了类的多个对象,每个对象都各自有一套类的非静态属性。当修改其中一个对象中的非静态属性,对其他对象的非静态属性不影响。
-
两者比较
调用 类变量 实例变量 类 yes no 对象 yes yes
特性
- 静态变量随着类的加载而加载。调用方式为
类名.静态变量名。 - 静态变量的加载先于对象的创建。
- 由于类只加载一次,所以静态变量在内存中只存一份在方法区的静态域中。
应用
Q:在实际开发中,如何确定一个属性是否要声明为static呢?
A:可以被多个对象共享的,多个对象共用一个。牵一发而动全身。
举例
- System.out
- Math.PI;
2. 修饰方法:静态方法
特性
-
随着类的加载而加载。调用方式为
类名.静态方法名。 -
静态方法只能调用静态属性。 即静态方法只能调用静态结构,非静态方法可调用静态结构和非静态结构。 注意点:
静态方法中不能使用this关键字、super关键字。构造方法不能用static修饰。 -
两者比较
调用 静态方法 非静态方法 类 yes no 对象 yes yes
应用
Q:在实际开发中,如何确定一个方法是否要声明为static呢?
A:
- 当属性是static的,即操作静态属性的方法(如get(),set())通常声明为static。
- 一些不需要创建对象,就能使用的方法(工具类中的方法),习惯上声明为static。如:Math、Arrays、Collections。