你有没有想过这些问题为什么main方法是static的为什么工具类的方法都是static的为什么静态方法里不能直接调用非静态方法今天这篇文章我们就把static关键字彻底讲透。从共享属性到工具类从内存原理到使用规范一篇全搞定。一、static修饰成员变量共享数据什么是静态变量被static修饰的成员变量叫静态变量也叫类变量。它的核心特点是被类的所有对象共享。想象一个班级每个学生都有自己的姓名、年龄独有属性但全班共享同一个班主任共享属性。这个“班主任”就适合用static修饰。public class Student { String name; // 独有属性不加static int age; // 独有属性不加static static String teacherName; // 共享属性加static }静态变量的使用规则加载时机随类的加载而加载优先于对象存在。类被用到时静态变量就已经在内存中了。调用方式推荐用类名调用Student.teacherName也可以用对象名调用但不推荐。共享特性任何一个对象修改了静态变量所有对象访问到的都是新值。// 推荐调用方式 Student.teacherName 小雯老师; // 不推荐但语法允许 stu1.teacherName 阿玮老师;什么时候用静态变量判断标准这个属性是所有对象共享还是每个对象独有共享 → 加static独有 → 不加static比如学生姓名独有不加全班共享的班主任加。二、static修饰成员方法工具方法什么是静态方法被static修饰的成员方法叫静态方法。它多用于测试类和工具类在Javabean实体类中很少使用。静态方法的核心规则静态方法只能访问静态成员静态变量、静态方法非静态方法可以访问所有成员静态方法中没有this关键字为什么因为静态内容随类加载优先于对象存在。静态方法被调用时对象可能还没创建自然无法访问依赖对象的非静态内容也没有this。工具类实战数组工具类工具类是封装通用功能、提高代码复用性的类。它的编写规范类名见名知意一般以Util结尾私有化构造方法禁止外界创建对象所有方法定义为静态方便类名直接调用下面是一个数组工具类的完整实现public class ArrayUtil { // 私有化构造方法禁止创建对象 private ArrayUtil() {} // 格式化打印数组返回字符串 public static String printArr(int[] arr) { String result [; for (int i 0; i arr.length; i) { if (i arr.length - 1) { result arr[i] ]; } else { result arr[i] , ; } } return result; } // 计算数组平均值注意整数除法问题 public static double getAverage(int[] arr) { int sum 0; for (int num : arr) { sum num; } // 关键乘以1.0转为浮点数避免整数除法丢失精度 return sum * 1.0 / arr.length; } }调用示例public class Test { public static void main(String[] args) { int[] arr {1, 2, 3, 4, 5}; // 直接类名调用不需要创建对象 System.out.println(ArrayUtil.printArr(arr)); System.out.println(平均值为 ArrayUtil.getAverage(arr)); } }三、重新认识main方法学完static我们终于能看懂main方法的每个部分了public static void main(String[] args)部分作用public最大访问权限保证JVM能调用staticJVM不需要创建对象直接用类名调用voidmain方法不需要给JVM返回值mainJVM约定的固定入口方法名String[] args接收程序运行时传入的参数四、static知识点速查表维度静态变量静态方法修饰对象成员变量成员方法归属属于类属于类加载时机随类加载随类加载调用方式类名/对象名推荐类名类名/对象名推荐类名访问限制-只能访问静态成员this关键字-不能使用写在最后static的核心就一句话静态的东西属于类不属于对象。静态变量所有对象共享一份数据静态方法工具类的标配不用创建对象就能用静态只能访问静态非静态可以访问所有搞懂这个逻辑static你就拿捏了。