static修饰符
static是静态修饰符,主要作用在于创建独立于具体对象的域变量或者方法。
static可以用来修饰
- 成员变量 (静态变量,可以直接通过类名访问)
- 成员方法(静态方法,可以直接通过类名访问)
- 代码块(静态代码块,当Java虚拟机加载类时,就会执行该代码)
static代码块
jvm加载类时,加载静态代码块。
- 如果有多个静态块,按顺序加载。
- 每个静态代码块只会被执行一此。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class StaticTest { static int num = 10; static{ num+=10; System.out.println(num); } static{ num+=10; System.out.println(num); }
public static void main(String[] args) { StaticTest s1 = new StaticTest(); StaticTest s2 = new StaticTest(); System.out.println(StaticTest.num); } }
|
运行结果:
20
30
30
static变量
类的成员变量包括
类变量(静态变量)
- 被static修饰的变量。
- 在内存中只有一个拷贝。
- 类内部,可在任何地方直接访问静态变量。
- 其它类中,可以通过类名访问。
实例变量
- 没有被static修饰的变量。
- 每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响。
static变量作用
- 能被类的所有实例共享,可作为实例之间进行交流的共享数据
- 如果类的所有实例都包含一个相同的常量属性,可把这个属性定义为静态常量类型,从而节省内存空间
1 2 3 4 5 6 7 8 9 10 11 12
| public class StaticTest { static int num; public static void main(String[] args) { num++; StaticTest s1 = new StaticTest(); s1.num++; StaticTest s2 = new StaticTest(); s2.num++; StaticTest.num++; System.out.println(num); } }
|
运行结果:
4
static方法
静态方法:可直接通过类名访问
- 静态方法中不能使用this和super
- 不能直接访问所属类的实例变量和实例方法
- 可直接访问类的静态变量和方法
实例方法:通过实例访问
- 可直接访问所属类的静态变量、静态方法、实例变量和实例方法
静态方法必须被实现
main()就是最常用的静态方法
常见错误
static变量不能创建在方法里面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
public class StaticText { public StaticText(){ System.out.println("构造方法执行....."); } static { System.out.println("静态代码块执行...."); } public static final String JD = "jd"; public String name = "admin"; public static String atr1 = "atr1";
public void method1(){ System.out.println(name); System.out.println(atr1); } public static void method2(){
}
|