**
静态变量
**
变量用static修饰,该变量就是静态变量,静态变量被共享。
public class StaticDemo {
static int x;
int y;
public StaticDemo(int x, int y) {
this.x = x;
this.y = y;
}
public static void main(String[] args) {
StaticDemo a = new StaticDemo(1, 2);
StaticDemo b = new StaticDemo(10, 20);
System.out.println(a.x);
System.out.println(a.y);
System.out.println(b.x);
System.out.println(b.y);
}
输出结果:
由上可知:同一类的不同实例对象,共用同一静态变量,如果一个类将其更改,另一个类静态变量也会更改。
**
静态常量
**
final static double PI = 3.1415926;
fianl static 修饰一个成员变量,这个成员变量就会变成一个静态常量。
静态常量命名时所有字母都要大写
**
静态方法
**
静态方法不需要创建实例化对象,类名直接调用。
**
静态代码块
**
public class StaticDemo02 {
static String name;
// 静态代码块
static {
System.out.println(name + "静态代码块");
}
// 非静态代码块
{
System.out.println(name + "非静态代码块");
}
// 构造方法
public StaticDemo02(String a) {
name = a;
System.out.println(name + "构造方法");
}
// 成员方法
public void method() {
System.out.println(name + "成员方法");
}
public static void main(String[] args) {
StaticDemo02 s1;// 声明的时候就已经运行静态代码块了
StaticDemo02 s2 = new StaticDemo02("s2");// new的时候会运行构造方法
StaticDemo02 s3 = new StaticDemo02("s3");
s3.method();// 只有调用的时候才会运行成员方法
}
}
运行结果:
- 静态代码块由始至终只运行一次
- 非静态代码块,每次创建对象的时候,会在构造方法之前运行。
- 构造方法只有在使用new创建对象的时候才会运行。
- 成员方法只有在使用对象调用的时候才会运行。