十九、static关键字
1.1、概述
static是静态修饰符,一般修饰成员。static修饰的成员被多个对象共享,所以会影响每一个对象。被static修饰的成员又叫类成员,不叫对象的成员。
static是修饰成员为静态,让实例出来的对象都能共享static静态成员。
1.2、static特点
- 被static修饰的成员,被所在类的所有对象共享
- 静态成员可以通过对象调用,也可以通过类名调用,建议使用类名调用。
- 静态成员随着类的加载而加载,优先于对象存在
1.3、定义和使用格式
类变量定义
定义格式:
static 数据类型 变量名;
举例:
static String room;
比如说,同学们来xx学校学习,那么我们所有同学的学校都是xx学生, 不因每个同学不同而不同。所以,我们可以这样定义一个静态变量school,代码如下:
public class Student {
private String name;
private int age;
// 类变量,记录学生学习的学校
public static String school = "xx学校";
public Student(String name, int age){
this.name = name;
this.age = age;
}
// 打印属性值
public void show() {
System.out.println("name=" + name + ", age=" + age + ", shool=" + shool );
}
}
public class StuDemo {
public static void main(String[] args) {
Student s1 = new Student("张三", 23);
Student s2 = new Student("李四", 24);
Student s3 = new Student("王五", 25);
Student s4 = new Student("赵六", 26);
s1.show(); // Student : name=张三, age=23, shool=xx学校
s2.show(); // Student : name=李四, age=24, shool=xx学校
s3.show(); // Student : name=王五, age=25, shool=xx学校
s4.show(); // Student : name=赵六, age=26, shool=xx学校
}
}
静态方法定义
定义格式:
修饰符 static 返回值类型 方法名(参数列表){
// 执行语句
}
举例:在Student类中定义静态方法
public static void showNum() {
System.out.println("num:" + numberOfStudent);
}
变量与方法调用
被static修饰的成员可以并且建议通过类名直接访问。虽然也可以通过对象名访问静态成员,原因即多个对象均属于一个类
格式:
// 访问类变量
类名.类变量名;
// 调用静态方法
类名.静态方法名(参数);
调用演示,代码如下:
public class StuDemo2 {
public static void main(String[] args) {
// 访问类变量
System.out.println(Student.numberOfStudent);
// 调用静态方法
Student.showNum();
}
}
1.4、类内部静态方法调用的注意事项
- 静态方法直接访问本类中其他成分时,只能访问静态成分(类成分),不能访问非静态成分(实例成分)。
- 静态方法中,不能使用this关键字(因为this属于实例)。
- 反之,非静态方法可以访问本类中的静态和非静态成分。
1.5、问题:
如果想要在静态方法中调用非静态成员能不能做到?
- 创建对象调用!!!
面向对象中为什么方法不设置static?
- 因为面向对象共享不合理。而且static 声明周期长,占用内存
static 使用场景
- 一般用于工具类中,可以通过类名直接调用

浙公网安备 33010602011771号