Java面向对象系列(12)- Static关键字讲解
场景一:静态变量
package oop.demo07; public class Student { private static int age;//静态的变量 一般多线程用的比较多 private double score;//非静态变量 public static void main(String[] args) { Student s1 = new Student(); System.out.println(Student.age); //static静态变量,可以通过类直接调用 System.out.println(s1.age); System.out.println(s1.score); } }
场景二:静态方法
package oop.demo07; public class Student { public void run(){ System.out.println("Run"); go(); //可以直接调用静态方法 } public static void go(){ System.out.println("go"); } public static void main(String[] args) { Student.go(); //静态方法可以通过类直接调用 go(); //同时静态方法还支持直接调用 new Student().run();//非静态方法,需要先new进行实例,才能调用 } }
Static修饰的含义隶属于类,而不是对象,是一个公共的存储内存的空间
场景三:代码块
package oop.demo07; public class Student { /* { //代码块(匿名代码块) 创建对象的时候就创建了匿名代码块,而且在构造器之前 } static { //静态代码块 常用于加载一些初始化的数据 类一加载就执行,永久只执行一次 } */ //第二个执行 { System.out.println("匿名代码块"); } //第一个执行 static { System.out.println("静态代码块"); } //第三个执行 public Student() { System.out.println("构造器(构造方法)"); } public static void main(String[] args) { Student student = new Student(); } }
Static代码块只执行一次,匿名代码块和构造器new一次,执行一次
场景四:静态导入包
常规
package oop.demo07; public class Student { public static void main(String[] args) { System.out.println(Math.random()); System.out.println(Math.PI); } }
静态导入包,调用方法更简洁
package oop.demo07; //静态导入包 import static java.lang.Math.random; import static java.lang.Math.PI; public class Student { public static void main(String[] args) { System.out.println(random()); System.out.println(PI); } }