static 关键字是静态的意思,是Java中的一个修饰符,可以修饰成员方法,成员变量
被static修饰的成员变量,一般叫做静态变量
被static修饰的成员方法,一般叫做静态方法
被static 修饰的成员,会该类的所有对象所(共享)
被static 修饰的成员,会随着类的加载而加载,优于对象存在
多了一种调用方式,可以通过类名.进行调用
static 修饰的特点
被类的所有对象共享
是我们判断是否使用静态关键字的条件
随着类的加载而加载,优先于对象存在
对象需要类被加载后,才能创建
可以通过类名调用
也可以通过对象名调用
推荐使用类名调用
静态随着类的加载而加载,优先于对象存在
非静态需要在创建对象之后,才可以进行使用
1.静态方法中,只能访问静态成员(成员变量,成员方法)
2.非静态方法中,可以使用静态成员,也可以使用非静态成员
静态方法中,没有this关健宁 this:当前对象的引用
this需要在创建对象之后,才会存在,静态存在的时候,对象可能还没有被创建
用static 标识符修饰的变量,它们在类被载入时创建,只要类存在,static 变量就存在。由于静态成员变量能被各实例对象所共享,所以我们可以用它来实现一些特殊效果,如我们想统计在程序中一共产生了多少某个类的实例对象
类的静态成员经常被称作“类成员”(class members),对于静态成员变量,我们叫叫类属性(class attributes),对于静态成员方法,我们叫类方法(class methods)。采用static关键字说明类的属性和方法不属于类的某个实例对象,在前面的多个例子程序中反复用到的System.out.println0语句,其中,System 是一个类名,out是 System 类的一个静态成员变量,println0)方法则是out 所引用的对象的方法。System.gc()语句中的gc()也是 System类的一个静态方法。
在使用类的静态方法时,要注意以下几点:
(1)在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。
(2)静态方法不能以任何方式引用 this 和 super 关键字super 关键字在第4 章讲解)与上面的道理一样,因为静态方法在使用前不用创建任何实例对象,当静态方法被调用时this 所引用的对象根本就没有产生。
(3)main0)方法是静态的,因此JVM 在执行main 方法时不创建 main方法所在的类的实例对象,因而在 mmain0方法中,不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员,这种情况,在以后的例子中会多次碰到。
一个类中可以使用不包含在任何方法体中的静态代码块(static block),当类被载入时静态代码块被执行,且只被执行一次,静态块经常用来进行类属性的初始化。
所谓类的单态设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。