Java基础语法 - 面向对象 - static 关键字
使用static关键字修饰的变量、常量和方法分别被称作静态变量、静态常量和静态方法,也被称作类的静态成员
静态变量
使用static修饰过的类变量称为静态变量
该变量需要使用类名.变量名进行调用,不能使用对象名/this进行调用
在类方法中不能定义与静态变量同名的局部变量
1 package mingri.chapter_6;
2
3 public class Pool {
4
5 public static int water = 0; // 定义一个静态变量
6
7 public void outlet() {
8 // String water = ""; // 在类方法中,不能定义与静态变量同名的变量名
9 if (water >= 2) { // 在类方法中不能使用 this.water 进行调用,只能使用变量名进行调用
10 water -= 2;
11 } else {
12 water = 0;
13 }
14 }
15
16 public void inlet() {
17 water += 3;
18 }
19
20 public static void main(String[] args) {
21 Pool pool = new Pool();
22 System.out.println("水池的水量:" + Pool.water); // 只能通过类名.静态变量名进行访问
23
24 pool.inlet();
25 pool.inlet();
26
27 System.out.println("水池的水量:" + Pool.water);
28 System.out.println("水池放水一次");
29 pool.outlet();
30 System.out.println("水池的水量:" + Pool.water);
31 }
32 }
静态方法
静态方法与静态变量类似,使用类名.静态方法名即可调用
1 package mingri.chapter_6;
2
3 public class Pool2 {
4
5 // 定义静态变量
6 public static int water = 0;
7
8 // 定义静态方法
9 public static void outlet() {
10 if (water > 2) {
11 water -= 2;
12 } else {
13 water = 0;
14 }
15 }
16
17 // 定义静态方法
18 public static void inlet() {
19 water += 3;
20 }
21
22 public static void main(String[] args) {
23 System.out.println("水池的水量:" + Pool2.water); // 调用静态变量
24 System.out.println("水池注水两次。");
25
26 Pool2.inlet(); // 调用静态方法
27 Pool2.inlet();
28
29 System.out.println("水池的水量:" + Pool2.water); // 调用静态变量
30 System.out.println("水池放水一次。");
31
32 Pool2.outlet(); // 调用静态方法
33
34 System.out.println("水池的水量:" + Pool2.water); // 调用静态变量
35 }
36 }
静态代码块
在类的成员方法之外,用static修饰代码区域可以称之为静态代码块。定义一块静态代码块,可以完成类的初始化操作,在类声明时就会运行
语法如下:
1 package mingri.chapter_6;
2
3 public class StaticTest {
4
5 // 静态代码块
6 static {
7 System.out.println("静态代码块");
8 }
9
10 public static void main(String[] args) {
11 StaticTest st;
12 System.out.println("main主方法");
13 }
14 }
代码块的执行顺序
1 package mingri.chapter_6;
2
3 public class StaticTest {
4
5 static String name;
6
7 // 静态代码块
8 static {
9 System.out.println(name + "静态代码块");
10 }
11
12 public StaticTest(String str){
13 name = str;
14 System.out.println(name + "构造方法");
15
16 }
17
18 public void method() {
19 System.out.println(name + "成员方法");
20 }
21
22 public static void main(String[] args) {
23 StaticTest s1; // 声明变量的时候就已经运行静态代码块了
24 StaticTest s2 = new StaticTest("s2");
25 StaticTest s3 = new StaticTest("s3");
26 s3.method();
27 System.out.println("main主方法");
28 }
29 }
30
31 /*
32 * 输出结果
33 null静态代码块
34 s2构造方法
35 s3构造方法
36 s3成员方法
37 main主方法
38 * */