static
成员变量分为两种,一个是实例变量,一个是静态变量。
static:静态的
1)静态变量:
1.1)由static修饰
1.2)属于类的,存在方法区中,只有一份
1.3)常常通过类名 . 来访问
1.4)何时使用:所有对象的属性都一样的时候使用
2)静态方法:
2.1)由static修饰
2.2)属于类的,存在方法区中,只有一份
2.3)常常通过类名 . 来访问
2.4)没有隐式的this传递(没有this就意味着没有对象,而实例变量必须通过对象点来访问,所以静态方法中,不能直接去访问实例成员)
2.5)何时用:方法的操作仅与参数相关,而与对象无关时使用
!!!注意:
《Java编程思想》中这样提到“只有普通的方法调用可以是多态的”。
也就是说Java中,静态方法是没有重写规则的。一旦有发生父子类方法重名,方法签名相同的情况,那不能称之为重写,子类此时将父类的方法完全覆盖了。简单来说,父子类的静态方法之间是没有关系的。调用哪个方法,具体看调用方法的引用类型!
上面的案例当中,采用了向上造型,但是仍然取决于引用的类型来看对应的结果。
无法重写的原因在于,重写发生在“运行期”绑定,而静态方法在“编译期”即可加载,所以从理论上就没法完成重写过程。
每个人看待多态的角度不同,有些人认为多态只是重写过程,有的人认为重载同样也属于多态,各位自己斟酌。
3)静态块 static块:属于类的代码块,在类加载期间执行的代码块,只执行一次,可以用来在软件中加载静态资源。
3.1)由static修饰
3.2)属于类的,类被加载期间自动执行,类只被加载一次,所以静态块也只执行一次
3.3)何时用:常常用于加载静态资源(图片,音频,视频)