使用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 * */