右下角那个圈里写的是“类加载”
总结:在JDK8以前,静态变量存放在方法区里;
在JDK8以后,存放在堆里面的这个类对应的对象的最后。
静态变量是被所有的对象所共享的,在类加载时就已经生成了。
注意:类变量 和 实例变量 是两个东西,类变量是类的一个变量,每一个对象都可以用这个变量;
而实例变量是针对每一个对象而言的,它不属于类,属于每一个对象,它们互不干扰。
package com.test;
public class Static {
public static void main(String[] args) {
// 类变量是随着类的加载而创建的,所以没有实例化对象也可以访问
System.out.println(A.name);
}
}
class A {
// 创建一个类变量
public static String name = "小白";
}
Math是一个类,sqrt是Math中的类方法,我们不用实例化一个Math的对象,直接就能够使用当中的sqrt方法了,非常方便。
Q:为什么静态方法只能访问静态成员?
A:静态的内容是随着类的加载而加载的,而非静态的内容是实例化对象后才产生的。
public static void main(String[] args)
中的名为args(argue-争论 + ment-表n. -> n.变量)
的字符串数组,这是专门用于接收命令行参数的。
应用场景:运行该软件的时候必须要提供用户名和密码。