• 在类中,用static声明的成员变量为静态成员变量 ,或者叫做: 类属性,类变量.
• 它为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化,
• 对于该类的所有对象来说,static成员变量只有一份。被该类的所有对象共享!!
- 优先于对象存在,随着类的加载而加载
• 可以使用”对象.类属性”来调用。不过,一般都是用“类名.类属性”
• static变量置于方法区中!
如果一个类中所有的成员都是静态的。那么它的构造函数应该设置成 private 的,这样以避免 这个类 被创建成对象
• 用static声明的方法为静态方法
• 不需要对象,就可以调用(类名.方法名)
• 在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员。只能访问静态成员变量和静态成员方法;
而非静态方法,既可以访问静态成员也可以访问非静态成员
• 静态方法不能以任何方式引用this和super关键字;(随着类加载而加载,而this是随着对象的创建而存在)
public class TestStatic { int a; static int width; static void gg(){ System.out.println("gg"); } void tt(){ System.out.println("tt"); } public static void main(String[] args){ TestStatic hi = new TestStatic(); TestStatic.width = 2; TestStatic.gg(); //gg(); hi.gg(); //通过引用也可以访问static变量或static方法。不过,一般还 是使用类名.static成员名来访问。 gg(); } }
静态初始化块
• 如果希望加载后,对整个类进行某些初始化操作,可以使用static初始化块。
• 类第一次被载入时先执行static代码块;类多次载入时,static代码块只执行一次;Static 经常用来进行static变量的初始化。
• 是在类初始化时执行,不是在创建对象时执行。
• 静态初始化块中不能访问非static成员。
public class TestStaticBlock { static { System.out.println("此处,可执行类的初始化工作!"); } public static void main(String[] args) { System.out.println("main方法中的第一句"); } }