static

成员变量分为两种,一个是实例变量,一个是静态变量。

static:静态的

1)静态变量:

    1.1)由static修饰

    1.2)属于类的,存在方法区中,只有一份

    1.3)常常通过类名 .  来访问

    1.4)何时使用:所有对象的属性都一样的时候使用

static

2)静态方法:

    2.1)由static修饰

    2.2)属于类的,存在方法区中,只有一份

    2.3)常常通过类名 .  来访问

    2.4)没有隐式的this传递(没有this就意味着没有对象,而实例变量必须通过对象点来访问,所以静态方法中,不能直接去访问实例成员)

    2.5)何时用:方法的操作仅与参数相关,而与对象无关时使用


!!!注意:

《Java编程思想》中这样提到“只有普通的方法调用可以是多态的”。

也就是说Java中,静态方法是没有重写规则的。一旦有发生父子类方法重名,方法签名相同的情况,那不能称之为重写,子类此时将父类的方法完全覆盖了。简单来说,父子类的静态方法之间是没有关系的。调用哪个方法,具体看调用方法的引用类型!

static

上面的案例当中,采用了向上造型,但是仍然取决于引用的类型来看对应的结果。

无法重写的原因在于,重写发生在“运行期”绑定,而静态方法在“编译期”即可加载,所以从理论上就没法完成重写过程。

每个人看待多态的角度不同,有些人认为多态只是重写过程,有的人认为重载同样也属于多态,各位自己斟酌。


3)静态块   static块:属于类的代码块,在类加载期间执行的代码块,只执行一次,可以用来在软件中加载静态资源。

    3.1)由static修饰

    3.2)属于类的,类被加载期间自动执行,类只被加载一次,所以静态块也只执行一次

    3.3)何时用:常常用于加载静态资源(图片,音频,视频)

static