25- static关键字

 

1. static关键字:修饰成员变量

1)被类的所有对象所共享

2)多了一种调用方式,可以通过类名进行调用(更推荐使用类名进行调用)

3)随着类的加载而加载

 

Student01类,该类的school成员变量是非静态的

public class Student01 {
    String name;
    int age;
    String school;
}

Student02类,该类的school成员变量是静态的

public class Student02 {
    String name;
    int age;
    static String school;
}

StudentDemo1类

public class StaticDemo1 {
    /*
    *  static关键字:修饰符,可以修饰成员变量
    *  1.被类的所有对象所共享
    *  2.多了一种调用方式
    *  3.随着类的加载而加载
    *
    * */
    public static void main(String[] args){
        // Student01类,该类的school成员变量是非静态的
        System.out.println("===============Student01类,该类的school成员变量是非静态的==================");
        Student01 s1 = new Student01();
        s1.name = "张三";
        s1.age = 30;
        s1.school = "北京大学";
        System.out.println(s1.name + "\t" + s1.age + "\t" + s1.school); // 张三    30    北京大学

        Student01 s2 = new Student01();
        s2.name = "李四";
        s2.age = 31;
        // s2.school = "北京大学";
        System.out.println(s2.name + "\t" + s2.age + "\t" + s2.school); // 李四    31    null

        // Student02类,该类的school成员变量是静态的
        System.out.println("===============Student02类,该类的school成员变量是静态的==================");
        Student02 s3 = new Student02();
        s3.name = "王五";
        s3.age = 32;
        s3.school = "清华大学";
        System.out.println(s3.name + "\t" + s3.age + "\t" + s3.school); // 王五    32    清华大学

        Student02 s4 = new Student02();
        s4.name = "赵六";
        s4.age = 33;
        // s4.school = "清华大学";
        System.out.println(s4.name + "\t" + s4.age + "\t" + s4.school); // 赵六    33    清华大学


        // 被static修饰的成员变量,可以通过类名进行调用(更推荐使用类名进行调用)
        // 非静态成员变量,必须通过对象名进行调用
        System.out.println("===============被static修饰的成员变量,可以通过类名进行调用==================");
        System.out.println(s3.school); // 清华大学
        System.out.println(Student02.school); // 清华大学

        // 随着类的加载而加载,优先于对象存在
        // 也就是说,静态成员变量,可以在没有对象的情况下进行调用(可以先赋值静态变量,再创建对象)
        System.out.println("===============随着类的加载而加载,优先于对象存在==================");
        Student02.school = "东华理工大学";
        Student02 s5 = new Student02();
        s5.name = "马铃薯";
        s5.age = 26;
        System.out.println(s5.name + "\t" + s5.age + "\t" + s5.school); // 马铃薯    26    东华理工大学
        
    }
}

 

 

static关键字修饰的成员变量,内存图

 

 

2. static关键字:修饰成员方法

1)常用于制作工具类

2)工具类不是描述事物的,而是帮我们完成一些事情的(打工)

3)如果发现一个类中,所有的方法都是 static 所修饰,则可以私有该类的构造方法(为了不再创建对象,直接通过类名调用静态方法)

 

ArrayTools 工具类(该类的所有成员方法是静态的)

public class ArrayTools {

    // 如果一个类中的方法都是静态的,可以将构造方法私有化,这样就不可以创建对象了
    private ArrayTools() {
    }

    // 获取数组最大值方法
    public static int getMax(int[] arr) {
        int max = arr[0];
        for (int i = 1; i < arr.length; ++i) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        return max;
    }

    // 获取数组最小值方法
    public static int getMin(int[] arr) {
        int min = arr[0];
        for (int i = 1; i < arr.length; ++i) {
            if (arr[i] < min) {
                min = arr[i];
            }
        }
        return min;
    }

    // 打印数组方法
    public static void printArray(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length - 1; ++i) {
            System.out.print(arr[i] + ", ");
        }
        System.out.println(arr[arr.length - 1] + "]");
    }

}

Test 类

public class Test {
    public static void main(String[] args){

        int[] arr = {1, 2, 3, 4, 5};

        // 这里注意,ArrayTools类中的构造方法是私有的,所以不用创建对象,直接通过类名调用静态方法即可
        // ArrayTools tools = new ArrayTools();

        // 调用ArrayTools类中的方法
        int max = ArrayTools.getMax(arr);
        System.out.println("数组中的最大值是:" + max);

        int min = ArrayTools.getMin(arr);
        System.out.println("数组中的最小值是:" + min);

        ArrayTools.printArray(arr);
    }
}

 

posted @ 2024-01-02 10:09  马铃薯1  阅读(4)  评论(0编辑  收藏  举报