java中的static关键字主要用于内存管理。
使用范围:java static关键字可以用在变量、方法、代码块和嵌套类中。
作用范围:static关键字属于类,而不是类的实例。
类的成员变量可以分为以下两种:
静态变量与实例变量的区别如下:
1)静态变量
2)实例变量
静态变量在类中的作用如下:
同成员变量,成员方法也可以分为以下两种:
静态方法与实例方法的区别:
静态方法,属于类,而不属于类的对象。
实例方法,可直接访问所属类的静态变量、静态方法、实例变量和实例方法。
静态方法与静态变量好处:
静态方法与静态变量缺点:
静态方法与静态变量适用场景:
定义:静态代码块,是 Java 类中的 static{ } 修饰的代码。
作用:用于类初始化时,为类的静态变量赋初始值,提升程序性能。
静态代码块的特点如下:
静态代码块,有点类似于一个方法,但不可以存在于任何方法体内。
静态代码块,可以置于类中的任何地方,类中可以有多个静态初始化块。
Java 虚拟机在加载类时执行,将只需要进行一次初始化的操作放在 static 代码块。
类中含多个静态代码块,Java虚拟机将按它们在类中出现的顺序依次执行,且都执行一次。
同静态代码块与静态,不能直接访问类的实例变量和实例方法,需通过类的对象访问。
java中一个类要被声明为static的,只有一种情况,就是静态内部类(内嵌类)。如在外部类声明为static的,程序会编译都不会通过。
可用于实现单例模式。
public class StaticSingleton { /** * 只有当显式调用getInstance()方法之后,这里的静态内部类SingletonHolder才会被加载 * 从而将INSTANCE初始化 * 因此,通过静态内部类实现的单例模式是懒汉式的 */ private static class SingletonHolder { // 通过静态内部类持有实例 private static final StaticSingleton INSTANCE = new StaticSingleton(); } private StaticSingleton() { } // 用private隐藏构造方法 public static StaticSingleton getInstance() { return SingletonHolder.INSTANCE; } }
方法区是被所有线程共享,所有字段和方法字节码,以及一些特殊方法,如构造函数,接口代码也在此定义,简单说,所有定义的方法的信息都保存在该区域,此区域属于共享区间。
静态变量(static)、常量(final)、类信息(构造方法、接口定义)(Class)、运行时的常量池存在方法区中,但是实例变量存在堆内存中,和方法区无关。