1、static关键字

  • static 是静态的意思,可以修饰成员变量和成员方法

1. static 修饰成员变量表示该成员变量只在内存中只存储一份,可以被共享访问、修改。

访问格式:

  • 类名. 静态成员方法(推荐)

  • 对象. 静态成员方法(不被推荐)

static访问注意事项

  • 静态方法只能访问静态的成员,不可以直接访问实例成员。

  • 实例方法可以访问静态的成员,也可以访问实例成员。

  • 静态方法中是不可以出现 this 关键字。

比如如下代码:

  • System.out.println(name); 这行会报错

  • System.out.println(onlinNumber); 这行可以正常执行。

public class Test {
    /**
     * 静态成员变量
     */
    public static int onlinNumber=10;

    /**
     * 实例成员变量
     */
    private String name;
    /**
     * 实例成员方法
     */
    public void run(){
        System.out.println(name+"run...");
    }
    /**
     * 静态测试方法
     * 1. 静态方法只能访问静态成员变量和静态成员方法,静态方法不能访问实例成员变量和实例成员方法
     */
    public static void test(){
        System.out.println(onlinNumber);
        System.out.println(name);
    }
}

1.1、static修饰成员变量示例

static 静态调用示例

public static void main(String[] args) {
        // 通过对象访问静态成员变量(不推荐)
        User u1 = new User();
        System.out.println(u1.onlieNumber);
        // 通过类名访问静态成员变量(推荐)
        System.out.println(User.onlieNumber);
    }

User 实体类

public class User {

    public static  int onlieNumber=161;
    public String name;
    public int age;

    public static void main(String[] args) {
        // 创建用户对象并初始化基本信息
        User u1 = new User();
        u1.name="张三";
        u1.age=18;

        // 输出用户的基本信息
        System.out.println(u1.name);
        System.out.println(u1.age);
        System.out.println(u1.onlieNumber);

        // 增加在线人数统计
        u1.onlieNumber++;
        System.out.println(onlieNumber);

    }
}

输出结果:

1.2、static修饰成员方法示例

public class Student {
    private String name;

      /**
     * 获取两个整数中的最大值
     * @param a 第一个整数
     * @param b 第二个整数
     * @return 返回a和b中较大的那个整数
     */
    public static int getMax(int a, int b) {
        return a > b ? a : b;
    }

    /**
     * 实例方法:属于对象、只能用对象触发访问
     */
    public void study() {
        System.out.println(name + "正在学习");
    }
    public static void main(String[] args) {
        //注意:同一个类中,访问静态方法,类名可以省略不写
        System.out.println(getMax(10, 20));
        //1、类名.静态成员方法
        System.out.println(Student.getMax(10, 20));

        //2、对象.静态成员方法
        Student s = new Student();
        s.name = "李四";
        s.study();
    }
}