Java 中可以基于一个类创建多个对象,这些对象之间是相互独立的,他们拥有自己的成员。但是有时候我们需要使其共享同一个成员,可以很方便的操作,于是出现了我们的static。
static 可以修饰变量、方法和代码块
一、static 修饰的变量
static 修饰的变量称为静态变量或者类变量,他属于某各类所有,并不是某个对象独有的,类的所有对象均可对其修改。比如,野外的一颗柿子树上的柿子,凡是经过的人均可采摘,并且后去的人看到的结果都是先去的人采摘后的结果,这便是static 的柿子。
static 的变量可以使用类去访问,也可以使用对象去访问,由于它的特殊性,所以我们推荐使用类访问。
下面是一个静态变量的例子
运行的结果如下:
这就是当一个对象修改了静态变量的值后其他对象调用的结果是被修改后的,实现了共享变量。
当private修饰static变量时同样该类中的对象和类也可以对其进行各种操作
package Web; /** * 测试私有静态变量的使用; * 得出的结论是:私有的静 * 态变量是对象和类都可以 * 访问的,不能存在访问私 * 有静态变量编译报错的问 * 题 */ public class Main{ private static int x = 100; public static void main(String[] args){ Main m1 = new Main(); m1.x++; Main m2 = new Main(); m2.x++; m1 = new Main(); m1.x++; Main.x--; System.out.println("x="+x); } }
二、static 修饰的方法
a.静态方法中可以调用静态变量,但是不能调用非静态变量
如果想要调用非静态变量,可以创建类的对象来访问
main方法是一个静态方法
b.静态方法中可以调用静态方法,但是不可以调用非静态方法,和上面的变量是一样的,创建对象访问非静态方法
c.普通方法中可以访问非静态变量、非静态方法、静态变量和静态方法
总结一句话:凡是静态的都是大家的(都可以去访问),凡是非静态的都是私有的(除了人家的对象,谁也别想访问)
三、static 修饰代码块
java中的代码块可以给变量初始化和赋值
在创建实例时可以顺序执行这些代码块,static 修饰的代码块称为静态初始化块
静态初始化块在类加载的时候会执行一次,后期不会再执行,并且只会给静态变量初始化,不能给非静态变量初始化
上面的代码可以看出来构造方法、普通的代码块、静态初始化块之间的关系:a).第一次创建对象时会依次执行代码块,但是执行的顺序是静态初始化块---->普通的代码块------>构造方法 b)静态代码块只执行一次
以上就是对static 的一些使用方法,在此总结一下。