static表示全局或静态的意思,用来修饰成员变量和成员方法,被static修饰的成员变量和方法独立于该类的任何对象。
只要这个类被加载,java虚拟机就能根据类名在运行时数据区的方法区内找到他们,因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象时,不生产static变量的副本,而是类的所有实例共享同一个static变量。
用private修饰的static变量,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用,但是不能再其他类中通过类名来直接引用。
①:static变量
被static修饰过的变量叫静态变量或类变量,另一种是没有被static修饰过的变量,叫实例变量。
区别:对于静态变量在内存中只有一个拷贝,JVM只为静态分配一次内存,在加载类的过程中完成静态变量的分配。对于实例变量,每创建一个实例就会动态的为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响。
因此一般只有在实现以下两个功能时使用静态变量,一、在对象之间共享值时,二、方便访问变量时。
②:静态方法
静态方法可以直接通过类名调用,因此静态方法中部能用this和super关键字,不能直接访问所属类的实例变量和实例方法{非static修饰的成员变量和方法},只能访问所属类的静态成员变量和成员方法,因为static方法独立于任何实例,因此static方法必须实现,而不能是抽象的abstarct。
③:静态代码块
static代码块也叫做静态代码块,是在类中独立于类成员的static语句块,可以有多个而且位置也随便放,它不在任何的方法体内,JVM加载类时会直接执行这些静态的代码块,如果有多个静态代码块,JVM会按照先后顺序执行,每个代码块只会被执行一次。还记得当年的那个helloworld是怎么打印出来的吗...public static void main{ *-* }
④:static和final搭配使用
static final用来修饰成员变量和成员方法,可简单理解为全局变量,对于变量,表示一旦给值就不可修改,可以通过类名直接访问。对于方法,表示不可覆盖,并且可以通过类名直接调用。