静态关键字:static

这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战

1. static 修饰成员变量 


public class User {
    // 在线人数信息:静态成员变量
    public static int onLineNumber;
    // 实例成员变量
    private String name;
    private int age;

    public static void main(String[] args) {
        //1. 类名,静态成员变量
        User.onLineNumber ++;
        // 注意:同一个类中访问静态成员变量,类名可以省略不写
        System.out.println(onLineNumber);

        // 2. 对象.实例成员变量
        User u1 = new User();
        u1.name = "二师兄";
        u1.age = 30;
        System.out.println(u1.name);
        System.out.println(u1.age);
        // 对象.静态成员变量
        u1.onLineNumber ++;
        System.out.println(u1.onLineNumber);

        User u2 = new User();
        u2.name = "大师兄";
        u2.age = 30;
        System.out.println(u2.name);
        System.out.println(u2.age);
        // 对象.静态成员变量
        u2.onLineNumber ++;
        System.out.println(u2.onLineNumber);
        System.out.println(onLineNumber);

    }
}
复制代码

2. static 修饰 成员变量的 内存原理。

截图中的代码

加载类的同时,也会加载静态成员变量。

3. static 修饰成员方法的基本用法


public class Student {
    private String name;
    private int age;

    // 实例方法: 无static修饰,属于对象的,通常表示对象自己的行为,可以访问对象的成员变量
    public void study(){
        System.out.println(name + "在好好学习,天天向上~~");
    }

    // 静态方法: 有static 修饰,属于类,可以被类和对象共享访问
    public static void getMax(int a, int b){
        System.out.println(a > b? a : b);
    }

    public static void main(String[] args) {
        // 1.类名,静态方法
        Student.getMax(10,100);
        // 注意:同一个类中访问静态成员 可以省略类名不写
        getMax(200,20);
        // 2. 对象.实例方法
        // study(); // 报错的
        Student s = new Student();
        s.name = "全蛋";
        s.study();

        // 3. 对象.静态方法(不推荐)
        s.getMax(10,2);
    }
}
复制代码

  1. static修饰成员方法的内存原理

加载类的时候,同时静态方法会暴露出调用接口,供调用

5. static 实际应用案例:使用静态方法 定义 工具类

public class Login {
    public static void main(String[] args) {
        System.out.println("验证码:"+ VerifyTool.creteCode(5));
    }
}
复制代码


public class VerifyTool {

    // 私有构造器
    private VerifyTool(){
        
    }

    // 静态方法
    public static String creteCode(int n){
        //1. 使用String开发一个验证码
        String chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        //2. 定义一个变量 用于存储5位随机字符作为验证码
        String code = "";
        Random r = new Random();
        for (int i = 0; i<n; i++){
            int index = r.nextInt(chars.length());
            code += chars.charAt(index);
        }
        System.out.println("验证码:"+code);
        return code;
    }
}
复制代码

工具类不需要创建对象,构造器私有化。让调用者使用类名来调用,节约内存。

6. static的注意事项