静态关键字:static

284 阅读3分钟

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

1. static 修饰成员变量 

成员变量可以分为2类:

  1. 静态成员变量 (有static修饰,属于类,内存中加载一次):常表示如在线人数信息,等需要被共享的信息,可以被共享访问。

  2. 实例成员变量 (无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);

    }
}

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

成员方法的分类:

静态成员方法(有static修饰,属于类)建议用类名访问,也可以使用对象访问。

实例成员方法 (无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 修饰,属于类和对象共享)访问格式

类名.静态成员方法。

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

实例成员方法 (无static修饰,属于对象)的访问格式:

对象.实例成员方法。

  1. 每种成员方法的使用场景是什么样的?

表示对象自己的行为的,且方法中需要访问实例成员的,则该方法必须申明成实例方法。

如果该方法是以执行一个通用功能为目的,或者需要方便访问,则可以申明成静态方法。

  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;
    }
}

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