static
一,基本知识
1,所有static关键字修饰的都是类相关的,类级别的。
2,所有static修饰的都是采用 “类名. ” 的方式访问。
3,static修饰的变量:静态变量。
4,static修饰的方法:静态方法。
变量的分类:
变量根据声明的位置进行划分:
在方法体当中声明的变量为:局部变量。
在方法体为声明的变量为:成员变量。
成员变量又可以分为:
实例变量
静态变量
实例的,都是对象相关的,访问时采用 “引用. ” 的方式访问,需要先new
静态的,都是类相关的,访问时采用 “类名. ” 的方式访问,不需要new
二,何时使用static
程序的加载机制
1,JVM大概分为栈,堆,方法区这三块存储空间。最开始时,先在方法区加载各种 .class文件,方法都加载在栈里面(不论是静态、实例、构造方法)。在栈里面调用构造方法创建对象后,声明的变量指向堆里面的对象(类),而对象(类)中的各个实例变量自然存储在堆中。(局部变量存储在栈中)
2,静态变量存储在方法区内存中,其初始化跟.class文件一起执行。(不像实例变量是在对象创建的时候执行的)
某个变量是所属类(可化成的所有对象)的共同属性则用static
一个类可以定义出多个对象,每个对象属性(变量)的赋值不完全相同,这些变量是成员变量,跟对象存储在堆内存中,若某个属性在类定义出的所有对象中都一样,则可以声明为静态变量(static),因为若在每个对象的成员变量中都定义一遍,将在堆内存中的每个对象中占一份存储空间,将其定义在方法区--声明为静态变量,则可以节省空间。
对于方法来说,方法一般都是描述了一个行为,如果说这个行为需要对象去触发,那么该方法定义为实例方法(因为访问对象里面的实例变量需要“引用. ”方式)。当这个方法体中直接访问了实例变量,这个方法一定是实例方法。
注意
用“引用. ”的方式也能访问静态变量,只是不建议用此方式。
三,静态代码块
静态代码块:类加载时机,只执行一次。
1,使用static关键字可以定义静态代码块
2,语法:
static{
java语句;
}
静态代码块在类加载时执行,并只执行一次,在main方法前执行,一般是自上而下的执行。
四,实例代码块
1,实例语句的语法:
{
java语句;
}
2,什么时候执行?
在构造方法执行之前执行。