Static

开发工具与关键技术:Java、myEclipse
作者:吴晓佩
撰写时间:2019年4月23日

static:关键字,是一个修饰符,用于修饰成员,成员变量又包含成员变量和成员函数(成员方法)。
static的特点:
1、 优先于对象存在:只要类加载了,被static修饰的成员就已经存在了,而在实例化之前要存在类,对象需要被实例出来才可以调用。
2、 随着类的加载而加载。
3、 被所有对象所共享。共享对象可以节省资源,方便调用。
4、 可以直接被类名所调用,也可以被对象调用 ,可以说,静态的成员多了一种调用方式。 调用格式(类名 . 静态方式) 。

简单例子演示:
Static
Static的弊端:
1、 在使用static的时候要明确该对象是否是共享对象。有些数据是对象特有的,是不可以被静态修饰的,不然数据就会变成共享数据,这样对事物的描述就会出现问题。
2、 静态方法只能访问静态成员,不可以访问非静态成员。 因为静态方法加载时,优先于对象存在,所以没有办法访问对象中的成员。
3、 静态方法中不能使用 this ,super 关键字。 因为 this 代表对象,而静态在时,有可能没有对象,所以 this 无法使用。
4、 Static的修饰的方法不能被重写。

判断是否需要用static修饰成员变量:
该成员变量的数据是否是所有对象都一样,如果是,该变量则需要被静态修饰。如果不是,该变量是对象特有的数据,无需static(静态)修饰,要储存到对象中。

判断是否需要用static(静态)修饰成员函数(方法):
可根据该函数内是否访问了对象中的特有数据,如果有,方法不能被static(静态)修饰。如果没有,这个方法需要被static(静态)修饰。

静态代码块:static{…}
作用:可以完成类的初始化。 静态代码块随着类的加载而执行, 而且只执行一次 (new 多个对象就只执行一次) 。 如果和主函数在同一类中,优先于主函数执行。