1.这是什么意思
Java中没有全局变量的概念,但是我们可以实现一个“伪全局”的概念,在Java中它的意思是“全局”或“静态”,用于修改成员变量和成员方法,当然还有代码块。
Java将内存分为栈内存和堆内存。 堆栈内存用于存储一些基本类型的变量、数组和对象引用。 堆内存主要存储一些对象。 当JVM加载一个类时,如果该类修改了成员变量和成员方法,就会在固定的位置为这些成员变量和成员方法开辟一块固定大小的内存区域。 有了这些“固定”的特性,JVM就可以非常方便地访问它们。 同时,如果静态成员变量和成员方法超出范围,它们的句柄将保持不变。 同时,“静态”的概念意味着它是不可逆的,也就是说,如果你在那个地方修改它,它不会回到原来的状态,如果你清理它,它也不会再回来。
同时,所修饰的成员变量和成员方法是独立于类的,不依赖于具体的实例变量,也就是说,是被类的所有实例所共享的。 所有实例的引用都指向同一个地方,任何一个实例的修改都会引起其他实例的变化。
2. 使用方法
可以用来修改成员变量和成员方法,我们称之为静态变量和静态方法,直接通过类名来访问。
。
.(…)
修改后的代码块表示静态代码块。 当JVM加载一个类时,这段代码就会被执行,这是非常有用的。 (这几天关于代码块的使用介绍,请关注)
2.1. 变量
修改的变量称为静态变量,未修改的变量称为实例变量。 它们之间的区别是:
静态变量在类加载时初始化。 它在内存中只有一个,JVM只会为它分配一次内存。 同时,类的所有实例共享静态变量,可以通过类名直接访问静态变量。
但实例变量不同。 它附有实例。 每次创建实例时,都会生成一个实例变量,它与实例一起生存和消亡。
所以我们一般在这两种情况下使用静态变量:对象之间共享数据,方便访问。
2.2. 方法
修改后的方法称为静态方法,我们直接通过类名来调用。 由于它在类加载时就存在,不依赖于任何实例,所以该方法必须是实现的,也就是说不能是抽象方法。
方法是类中的特殊方法,我们仅在真正需要时才声明方法。 Math 类的所有方法都是静态的。
2.3、代码块
修改后的代码块称为静态代码块。 静态代码块会随着类的加载一起执行,并且可以随意放置,可以存在于任何它该存在的地方。
三、局限性
确实,功能很多,但也存在一些缺陷。
1. 只能调用变量。
2. 只能调用方法。
3. this 和 super 不能以任何形式引用。
4、变量在定义时必须初始化,且初始化时间早于非静态变量。
总结:无论是变量、方法还是代码块,只要修改了,在类加载时就“准备好了”,即可以使用或者已经执行,不需要对象也可以执行。 反之,如果没有,则必须依赖于对象实例。