欢迎光临
我们一直在努力

【从零开始学Java | 第六篇】 Static修饰符

目录

前言

一、什么是Static修饰符

二、Static核心用法

三、Static的注意事项


前言

        从本篇开始,Java的学习就进入了进阶篇,内容相对来说比较晦涩且难理解,希望大家能够多动手,“纸上得来终觉浅,绝知此事要躬行”

一、什么是Static修饰符

        通常情况下,类里面的属性(变量)和行为(方法),必须在 new 出一个具体的对象后才能使用。每个对象都有自己独立的一份数据。

        但是,有时候我们希望某个属性或方法被所有对象共享,或者不创建对象就能直接使用。这时候,static 就登场了。

        被 static 修饰的成员,不再属于某一个具体的对象,而是属于这个类本身。

二、Static核心用法

①静态变量(共享属性)

        假设我们定义一个 Student 类,所有学生都属于同一所大学。如果把大学名字设为普通变量,每次 new 对象都要存一遍,太浪费内存。如果设为 static,大家就共享同一个名字。

        静态变量推荐直接用【类名.变量名】赋值

创建一个学生类:

public class Student {
String name;
int age;

public static String schoolName;
}

使用测试类来测试静态变量的使用:

public class Test {
public static void main(String[] args) {
Student.schoolName = "清华大学";

Student s1 = new Student();
s1.name = "张三";

Student s2 = new Student();
s2.name = "李四";

System.out.println(s2.name + " 就读于 " + s2.schoolName);

}
}

运行结果:

静态变量的特点

  • 被该类所有对象共享
  • 不属于对象,属于类
  • 随着类的加载而加载,优先于对象存在

②静态方法(工具方法)

        如果一个方法内部不需要用到对象的实例变量,我们就可以把它设为静态方法。它的好处是不用 new 对象,直接用类名就能调用。

补充知识

  • JavaBean类:用来描述一类事物的类。比如,Student,Teacher等
  • 测试类:用来检查其他类是否书写正确,带有main方法的类,是程序的入口
  • 工具类:不是用来描述一类事物的,而是提供一些工具以便我们使用的
  • 应用场景:

    请按照如下要求编写一个数组的工具类:ArrayUtil

    • 提供一个工具类方法printArr,用于返回整数数组的内容。返回的字符串格式如:[10, 20, 55, 99]
    • 提供这样一个工具方法getAverage,用于返回平均分。
    • 定义一个测试类TestDemo,调用该工具类的工具方法,并返回结果

    首先定义ArrayUtil工具类

    public class ArrayUtil {

    //首先私有化构造方法,防止创建工具类对象
    private ArrayUtil(){};

    //printArr方法,使用static修饰方便调用
    public static String printArr(int[] arr){
    StringBuilder sb = new StringBuilder();
    sb.append("[");
    for (int i = 0; i < arr.length; i++) {
    if(i == arr.length – 1){
    sb.append(arr[i]);
    }else{
    sb.append(arr[i] + ",");
    }
    }
    sb.append("]");
    String result = sb.toString();
    return result;
    }

    public static double getAverage(double[] arr){
    double sum = 0;
    for (int i = 0; i < arr.length; i++) {
    sum += arr[i];
    }
    double average = sum / arr.length;
    return average;
    }
    }

    使用测试类TestDemo测试该工具类中的方法:

    public class TestDemo {
    public static void main(String[] args) {
    int[] arr = {1, 10, 100, 1000};
    String result = ArrayUtil.printArr(arr);
    System.out.println(result);

    double[] arr2 = {1.3, 2.4, 5.6, 6.7};
    double result2 = ArrayUtil.getAverage(arr2);
    System.out.println(result2);
    }
    }

    运行结果如下:

    三、Static的注意事项

  • 静态方法只能访问静态变量和静态方法
  • 非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法
  • 静态方法中是没有this关键字的
  • 以下代码方便大家理解记忆:

    public class StaticRulesDemo {

    // 1. 静态变量(属于类,全类共享)
    static String schoolName = "Java大学";

    // 2. 非静态成员变量(属于对象,也就是实例变量)
    String studentName = "张三";

    /**
    * 知识点 1 & 3:静态方法的限制
    */
    public static void staticMethod() {
    // ✅ 成功:静态方法可以访问静态变量
    System.out.println("学校名称:" + schoolName);

    // ✅ 成功:静态方法可以调用其他静态方法
    anotherStaticMethod();

    // ❌ 编译报错:静态方法不能访问非静态变量
    // System.out.println(studentName);
    // 原因分析:静态方法随着类加载就存在了,此时可能还没有 new 任何对象,所以找不到属于对象的 studentName。

    // ❌ 编译报错:静态方法不能调用非静态方法
    // nonStaticMethod();

    // ❌ 编译报错:静态方法中没有 this 关键字!
    // System.out.println(this.schoolName);
    // 原因分析:this 代表"当前调用该方法的对象"。既然静态方法不依赖于对象,自然就没有 this 的概念。
    }

    public static void anotherStaticMethod() {
    System.out.println("执行了另一个静态方法…");
    }
    }

    赞(0)
    未经允许不得转载:171主机测评 » 【从零开始学Java | 第六篇】 Static修饰符
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址