在java当中有很多关键字,static便是其中一个,它很普通但我们经常需要运用到它,所以要了解static是非常有必要的。
鉴于本人知识结构有限,若有错误忘不吝赐教,甚为感谢。
一.static关键字基础
static是静态的意思,这个关键字主要有四种用法:
1)static 修饰在类变量
static修饰在类变量中,代表该类变量属于全局性变量,不跟随类的实例化而生成,可以直接通过类名.变量名直接访问
class MyStatic{ public static int MY_STATIC_INT = 1; public static void main(String[] args) { System.out.println(MyStatic.MY_STATIC_INT); } } // 1
从这段代码可以看出MY_STATIC_INT变量不依赖类的实例化就可以访问,这样的话static关键字可不可以脱离访问修饰符控制对所调用者可见呢?
class MyStatic{ private static int MY_STATIC_INT = 1;//访问修饰设置成private私有 } class TestStatic{ public static void main(String[] args) { System.out.println(MyStatic.MY_STATIC_INT); //编译错误 } }
显然static是无法脱离访问修饰符控制
2)static修饰方法
(1)当static修饰方法时无需实例化类可(类名.方法名)直接访问。
(2)并且static修饰的方法无法使用this,super等关键字。
因为this关键字是指向当前对象的引用,而static修饰符方法是脱离类实例化对象的引用,super关键字是指向当前对象父类实例的引用,同理无法使用
(3)static修饰的方法无法调用非静态方法,非静态方法可以调用静态方法
非静态方法引用依赖于类的实例化对象,如果静态方法直接调用非静态方法,程序编译期就会报错,因为非静态方法根本没有实例化。
class MyStatic{ public static void isStaticMethod(){ System.out.println("isStaticMethod"); } public void unStaticMethod(){ MyStatic.isStaticMethod(); } } class TestStatic{ public static void main(String[] args) { MyStatic myStatic = new MyStatic(); myStatic.unStaticMethod(); } } //isStaticMethod
class MyStatic{ public static void isStaticMethod(){ unStaticMethod();//编译错误 } public void unStaticMethod(){ System.out.println("isStaticMethod"); } }
3)静态代码块
(1)可以在同一类下有多个静态代码块,按顺序执行
(2)静态代码块块在同一类中,只执行一次。
(3)静态代码块中可调用静态方法,不能调用非静态方法
(4)静态代码块先于构造器执行
public class KeyWordStatic extends IsFather{ public static String STATIC_VALUE = "1"; public KeyWordStatic(){ System.out.println("is coming constructor"); } static{ System.out.println("is static block"); System.out.println(STATIC_VALUE); staticMethod(); } public static void main(String[] args) { KeyWordStatic keyWordStatic1 = new KeyWordStatic(); KeyWordStatic KeyWordStatic2 = new KeyWordStatic(); } public static void staticMethod(){ System.out.println("staticMethod"); } } class IsFather{ public IsFather(){ System.out.println("it is father"); } } console: //is static block //1 //staticMethod //it is father //is coming constructor //it is father //is coming constructor
static关键字总结
static关键是在java当中被广泛使用,掌握和理解static基本用法和规则是使用好static关键字的前提,static关键字修饰变量常配合final使用,作为全局性常量存在。