Java--关键字--static
static
静态修饰词,修饰成员变量和成员方法
前言
static
关键字可以修饰成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属于某个对象。也就是说,既然属于类,就可以不靠创建对象来调用
定义
当static
修饰成员变量时,该变量成为静态变量。该类的每个对象都共享同一个类变量的值。任何对象都可以更改该类变量的值,但也可以在不创建该类的对象的情况下对该类变量进行操作
静态变量
静态变量:使用static
关键字修饰的成员变量成为静态变量
定义格式:
static 数据类型 变量名;
举例:
static int numberID;
比如说中国人,有姓名,年龄和国籍。只要是中国人,国籍肯定是中国,不必每个对象都存储一份,只需要存储一份,大家共享这一份。
public class Chinese {
String name;
int age;
static String country;
public Chinese() {
}
public Chinese(String name, int age) {
this.name = name;
this.age = age;
}
public void show() {
System.out.println(name + "," + age + "," + country);
}
}
public class Test {
public static void main(String[] args) {
// 类名.静态成员变量名
Chinese.country = "西班牙";
System.out.println(Chinese.country);
Chinese c1 = new Chinese("范冰冰", 20);
c1.country = "中国";
c1.show(); // 范冰冰, 20, 中国
Chinese c2 = new Chinese("李冰冰", 21);
// c2.country = "中国";
c2.show(); // 李冰冰, 25, 中国
Chinese c3 = new Chinese("凤姐", 25);
// c3.country = "中国";
c3.show(); // 凤姐, 21, 中国
c3.country = "美国";
c1.show();
c2.show();
c3.show();
}
}
优点
static
修饰的成员变量会存储在静态区,只有一份,节省内存,可以使用类名调用
静态方法
当static
修饰成员方法时,该方法称为静态方法。静态方法在声明中有static
,建议使用类名来调用,而不需要创建类的对象。调用方式非常简单。
静态方法:使用static
关键字修饰的成员方法,习惯称为静态方法。
定义格式:
修饰符 static 返回值类型 方法名 (参数列表) {
// 执行语句
}
举例:
public static void showNum() {
System.out.println("num:" + numberOfStudent);
}
注意事项:
1. 静态方法可以直接访问静态变量和静态方法
2. 静态方法不能直接访问普通成员变量或成员方法。反之,成员方法可以直接访问静态变量或静态方法
3. 静态方法中,不能使用this关键字
4. 总结:静态方法只能访问静态成员
调用格式
被static
修饰的成员可以并且建议通过类名直接访问。虽然也可以通过对象名访问静态成员
定义格式:
// 访问类变量
类名.类变量名;
// 调用静态方法
类名.静态方法名(参数);
举例:
public class StuDemo2 {
public static void main(String[] args) {
// 访问类变量
System.out.println(Student.numberOfStudent);
// 调用静态方法
Student.showNum();
}
}
图解静态原理
static
修饰的内容:
1. 是随着类的加载而加载的,且只加载一次。
2. 存储于一块固定的内存区域(静态区),所以,可以直接被类名调用。
3. 它优先于对象存在,所以,可以被所有对象共享
如下图所示:
静态代码块
静态代码块:定义在成员位置,使用static修饰的代码块{}
位置:类中方法外
执行:随着类的加载而执行,且各执行一次
定义格式:
public class ClassName {
static {
// 执行语句
}
}
举例:
public class Game {
public static int number;
public static ArrayList<String> list;
static {
// 给类变量赋值
number = 2;
list = new ArrayList<String>();
// 添加元素到集合中
list.add("张三");
list.add("李四");
}
}
总结
static
关键字,可以修饰变量、方法和代码块。在使用的过程中,其主要目的还是想在不创建对象的情况
下,去调用方法。下面将介绍两个工具类,来体现 static
方法的便利。