静态:static关键字
static关键字可以修饰的元素
- 属性
- 只能修饰属性,不能修饰局部变量
- 方法
- 代码块
public class Chinese {
String name;
static String country; //修饰属性,
String age;
static { //代码块
System.out.println("你好");
}
static void sing() { //方法
System.out.println("北京欢迎你!");
}
}
- static修饰属性
- 所有对象共享,称为静态变量或类变量
- 不用static修饰的属性称为实例变量
- 所有对象共享,称为静态变量或类变量
- static修饰方法
- 不需要实例化,可以直接访问,称为静态方法或类方法
- static修饰语句块:
- 类中由static关键字修饰的,不包含在任何方法体中的代码块,称为静态代码块
静态属性
- 用static修饰的属性,他们在类被载入时创建,只要类存在,static变量就存在。
- 静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
- 两种方式访问
- 直接访问:类名.属性
- 实例化后访问:对象名.属性(不推荐使用)
public class Employee {
private static int a;
private int b;
public static void main(String[] args) {
Employee.a = 20;//静态属性可以直接访问
Employee employee1 = new Employee();
Employee employee2 = new Employee();
System.out.println(employee1.a); //输出20
employee1.b = 30;
System.out.println(employee2.b);//输出0
}
}
静态方法不需要实例化,可以直接访问,访问方式:
- 直接访问:类名.方法名()
- 实例化后访问: 对象名.方法名()(不建议使用)
public class Employee {
public static void add() {
}
public static void main(String[] args) {
Employee.add();//直接调用静态方法
Employee emp = new Employee();
emp.add();//可以,但不建议使用
}
}
静态语句块
- 一个类中由static关键字修饰的,不包含在任何方法体中的代码块
- 当类被载入时,静态代码块被执行,且只被执行一次
- 静态块经常用来进行类属性的初始化