- 类变量/静态变量
- 基本定义:用static定义的属性(public static int a;);它是同一类的所有对象共享的属性;是在类加载的时候就生成的(所以没有创建对象实例也可以访问,这点听上去不错,会省去一行代码)
- 访问方式:类名.类变量名;或对象名.类变量名(推荐前者)
- 在内存中的布局:在jdk8以前,类变量存储在方法区的静态域中;jdk8以后位于堆的class对象尾部
- 其它:(1)与实例变量/普通变量/非静态变量的区别,它们是对象独享的(2)类变量的访问必须遵守相关的访问权限(3)随着类的消亡而销毁,不是随着对象的消亡而消亡
- 类方法/静态方法
- 如果希望不创建实例,就可以使用某个方法,这个方法可以当作工具来使用,这时可以把方法作为静态方法,比如工具类中的方法utlis,Math类,Arrays类,Collections类
- 存储位置:随着类的加载而加载,将结构信息存储在方法区
- 不能使用this参数,因为this是与对象有关的
- 类方法中可以直接调用类变量,但是需要创建对象才能调用实例变量,示例代码如下(来源于Kimi):
public class Example { private static int staticVar = 10; // 类变量 private int instanceVar = 20; // 实例变量 public static void staticMethod() { // 直接访问类变量 System.out.println(staticVar); // 通过实例访问实例变量 Example example = new Example(); System.out.println(example.instanceVar); } public void instanceMethod() { // 在实例方法中可以直接访问实例变量 System.out.println(instanceVar); } }
- 静态方法只能访问静态成员,访问非静态成员时需要创建对象;普通方法既可以访问静态成员,也可以访问非静态成员(必须遵守访问权限)。
- main方法
- main方法是java虚拟机调用,所以该方法的访问权限必须是public
- main方法执行时不必创建对象,所以该方法必须为static
- 该方法接收String类型的形参args
- 可以直接调用main方法所在类的静态成员,但是必须先创建对象才能调用本类的非静态成员。