static 关键字
如果一个成员变量使用了static关键字,那么这个变量不再属于对象自己,而是属于所在的类。多个对象共享同一份数据。
static修饰成员变量
Student类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| package com.tipdm.demo05;
public class Student { private String name; private int age; private int id; static String room; private static int idCounter = 0;
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public Student(String name, int age) { this.name = name; this.age = age; this.id = ++idCounter; }
public Student() { this.id = ++idCounter; } }
|
调用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| package com.tipdm.demo05;
public class demo1 { public static void main(String[] args) { Student one = new Student("郭靖", 19); one.room = "101"; System.out.println("姓名:" + one.getName() + ",年龄:" + one.getAge() + ",学号:" + one.getId() + ",教室:" + one.room); Student two = new Student("黄蓉", 16); System.out.println("姓名:" + two.getName() + ",年龄:" + two.getAge() + ",学号:" + two.getId() + ",教室:" + one.room); } }
|
1 2 3 4
| 姓名:郭靖,年龄:19,学号:1,教室:101 姓名:黄蓉,年龄:16,学号:2,教室:101
进程已结束,退出代码0
|
static修饰成员方法
MyClass类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| package com.tipdm.demo05;
public class MyClass { int num; static int numStatic;
public void method(){ System.out.println("这是一个普通的成员方法。"); System.out.println(num); System.out.println(numStatic); }
public static void methodStatic(){ System.out.println("这是一个普通的静态成员方法");
System.out.println(numStatic);
} }
|
调用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| package com.tipdm.demo05;
public class demo2 {
public static void main(String[] args) { MyClass obj = new MyClass(); obj.method();
obj.methodStatic(); MyClass.methodStatic();
myMethod(); }
public static void myMethod(){ System.out.println("自己的方法!"); }
}
|
1 2 3 4 5 6 7 8 9 10
| 这是一个普通的成员方法。 0 0 这是一个普通的静态成员方法 0 这是一个普通的静态成员方法 0 自己的方法!
进程已结束,退出代码0
|
静态代码块
静态代码块的格式:
1 2 3 4 5
| public class 类名称{ static { } }
|
特点:
- 当【第一次】用到本类时,【静态代码】块执行唯一的一次。
- 静态内容总是优先于非静态。所以静态代码块比构造方法先执行。
静态代码块的典型用途:
Person类:
1 2 3 4 5 6 7 8 9 10 11 12 13
| package com.tipdm.demo05;
public class Person {
public Person(){ System.out.println("构造方法执行"); }
static{ System.out.println("静态代码块执行!"); }
}
|
调用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| package com.tipdm.demo05;
public class demo4 { public static void main(String[] args) { Person one = new Person(); Person two = new Person(); } }
|
1 2 3 4 5
| 静态代码块执行! 构造方法执行 构造方法执行
进程已结束,退出代码0
|