[java学习笔记] static关键字

标签 : Java static关键字


static关键字

  • 一个类中声明为static的成员变量或方法不会和该类的任何实例联系在一起。因此不用创建该类的对象也可以访问static的方法或变量。所以可以通过类名访问变量或方法。
  • 通过实例访问static变量也是合法的,但是容易产生误解。
  • static变量只占用一份存储空间。
  • static变量被该类所有实例共享

static变量初始化

  • static变量只被初始化一次,只有在第一次创建该类实例或访问static数据时才进行初始化,之后的实例创建和访问都不再自动初始化。
  • static在任何对象创建之前完成初始化
  • static在任何static方法执行前之前完成初始化

为什么static环境不能直接访问非static变量

调用static方法不需要创建任何实例,static方法是在无关任何实例的情况下执行的。而非static变量必须和某一实例联系在一起(必须指定和它一起运行的对象)。static方法中如果访问某个非static变量,编译器不知道要访问的是哪个实例的变量,所以不能通过编译。

为什么static方法不能被覆盖

因为override是运行时动态绑定的,static方法是静态绑定的
覆盖:子类和父类存在相同的方法,子类的这个方法就覆盖了与父类相同的方法
方法的绑定:对象调用方法的时候,与方法所在的类关联起来,选择哪一个方法去调用
静态绑定:程序执行前方法已经被绑定
动态绑定:根据运行时的实际类型进行绑定,在编译的时候不知道对象实际类型,只知道申明的类型。在运行时才知道对象的实际类型。java有它自己的机制去找到正确的方法。