在Java中,比较常见的static的使用场景是类的静态属性、静态方法,静态块和静态内部类。
1. 类的静态属性和静态方法被static关键字修饰的属性和方法,被成为类的静态属性和静态方法。在Java中,关于静态属性和方法,是存在约束的。
静态方法可以直接使用该类的静态属性,但是不能使用该类的非静态属性。
静态方法可以直接使用该类的静态方法,但是不能使用该类的非静态方法。
可以看到,在类的静态方法中使用非静态属性和非静态方法,是会报错的。
2. 静态块静态块,就是用static关键字修饰的代码块{}。在执行顺序上,静态块会优先于普通代码块。并且静态块只执行一次。
首先介绍一下普通内部类。内部类即是在类的内部定义的类。内部类方法可以访问外围类的数据(包含私有数据),内部类可以对同一个包中的其他类隐藏。经过编译之后,包含内部类的类会生成多个class文件,内部类对应的class文件的命名格式为外围类$内部类.class
。在内部类中,默认访问内部类自己的方法或者属性。如果需要访问外围类的同名属性或者方法,需要使用this关键字。内部类对象的初始化语法是内部类 对象名 = 外部类.new 内部类();
。
静态内部类与内部类的区别很简单,是静态的,所以不存在this关键字。所以如果内部类中不需要引用外围类的对象的话,就可以将这个内部类定义为静态的。静态内部类的初始化语法与普通类相同。