Java static关键字 解析

112 阅读1分钟
  • static 修饰成员 或者 方法
    • 类对象共享
    • 生命周期长 随着类的加载产生 类销毁时释放 和类生成的对象无关
  • static 不能修饰外部类(内部类可以加)
  • static 不能修饰局部变量
public class Person {
  // 静态成员 类成员 
  // 无论有多少实例成员都共用这一个成员
  public static String name = "p"

  // 静态代码块
  // 会比构造代码块先执行
  // 和类一起加载 与对象无关
  static{

  }
  
  // 构造代码块
  // 会比构造方法先执行
  {

  }
  
  // 构造方法
  public Person(){
  }
  
  // 静态方法 类方法
  public static void eat(){
    // 静态方法无法访问同一个类中的非静态成员 只能直接调用同一个类中静态成员
    // run();
    // 但是可以通过实例化这个类 在调用这个类中的成员
    Person p2 = new Person();
    p2.run();
    p2.name = "p2";
    System.out.println("吃饭");
  }

  public void run(){
    // 成员方法可以调用静态方法 
    eat();
    System.out.println("跑");
  }
}

// 直接类名.静态成员 访问(推荐)
Person.name = "person";
Person.eat();

// 对象名.静态成员
Person p1 = new Person();
p1.name = "p1";
p1.eat();