一、简介
文章参考 |java static 详解
通常,我们编写一个类并创建对象时,不同对象之间的实例变量互不影响。
但我们有时候希望某些特定的数据在类中可以共享。
例如:所有中国人都属于同一个国家,这时候就希望分配一个共享变量存储国家名称,而不是为每一个中国人的对象单独分配一个代表国家名称的实例变量。
二、作用范围
static关键字通常用来修饰成员变量、方法、代码块。
1.修饰变量
static修饰的变量被称为静态变量、类变量
使用说明:
- 静态变量随着类的加载而加载,要早于非静态变量的加载
- 静态变量可以通过"类名.静态变量名"或者"对象.静态变量名"进行调用,通常使用前者。
- 由于类只会加载一次,则静态变量在内存中也只会存在一份
- static不能修饰局部变量
代码如下:
public class Test {
public static void main(String[] args) {
Person.nationName="中国";
Person p1 = new Person();
p1.name="路人甲";
Person p2 = new Person();
p2.name="路人乙";
System.out.println(p1.nationName);//中国人
System.out.println(p2.nationName);//中国人
System.out.println(p1.name);//路人甲
System.out.println(p2.name);//路人乙
}
}
class Person {
public static String nationName;
public String name;
}
2.修饰方法
static修饰的方法被称为静态方法、类方法
使用说明:
- 静态方法随着类的加载而加载,可以通过"类名.静态方法"或"对象名.静态方法"调用
- 静态方法只能调用静态的方法或变量;非静态方法可以调用所有的方法或变量
- 静态方法中,不能使用 this 关键字、super 关键字
代码如下:
public class Test {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person();
Person.display();//我是中国人
p1.display();//我是中国人
p2.display();//我是中国人
}
}
class Person {
public static String nationName;
public String name;
public static void display(){
System.out.println("我是中国人");
}
}
3.修饰代码块
static修饰的代码块被称为静态代码块
使用说明:
- 每个静态代码块只会在类加载的时候执行一次
- 静态代码块只能调用静态变量或静态方法
- 通常用于一次性操作
public class Test {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person();
//我是中国人
}
}
class Person {
public static String nationName;
public String name;
static {
System.out.println("我是中国人");
System.out.println(nationName);
System.out.println(name);//编译不通过
}
}
三、总结
本文仅仅简单介绍了static的基本使用,后续将补充static使用注意点。