static关键字我理解为“类级别的修饰符”,其实就是你可以理解为,只要是用static修饰的变量、属性、内部类、代码块等,都是类级别的,不与某个对象关联,是整个类共有的。所以在使用的时候也不需要通过对象,只需要通过类名点静态属性就可以。
1、static修饰类
static关键字修饰类只有一种情况,就是静态内部类。静态内部类其实与普通类没有什么区别,只是静态内部类在顶级类(外层的类,这种类的类名必须与文件名一致)的内部已定义。使用静态内部类的时候与不同类一样,也需要创建对象。静态内部类与内部类一样可以访问外部类的属性包括private修饰的私有属性。
2、static修饰变量和方法
static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问,访问语法为:类名.静态方法名(参数列表…)/类名.静态变量名
静态方法只能访问静态成员,实例方法可以访问静态和实例成员。之所以不允许静态方法访问实例成员变量,是因为实例成员变量是属于某个对象的,而静态方法在执行时,并不一定存在对象。静态方法中也不能使用关键字this。
静态变量则是类级别的变量所以在一个对象中修改会影响到其他使用的对象。
3、static修饰代码块
用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块也就是说被静态代码块包围的代码会在类被JVM加载的时候调用(可以进行一些特殊需求的操作),当然,静态代码块内部的代码只能使用静态属性。
4、static和final一块用表示什么
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
对于方法,表示不可覆盖,并且可以通过类名直接访问。