51Testing软件测试网#k:o:?l/i;? 我们知道类的生命周期分为装载、连接、初始化、使用和卸载的五个过程。
sw
r^8kz051Testing软件测试网3fM4OC vq1i d 其中静态代码在类的初始化阶段被初始化。而非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化。51Testing软件测试网yB+Y1C({] T,j
51Testing软件测试网n
Q)g7Af Y)j.Z 静态变量51Testing软件测试网a7\j8gH3pn5},xVd
ra"nI9f0 可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。51Testing软件测试网!FeZy#a6h(mI1Ig)r&R
FU x)p
BKTxw+x:J0 静态变量有两种情况:
1C2{}a _&?)tCS.M051Testing软件测试网i0K'U$^#CbaO ● 静态变量是基本数据类型,这种情况下在类的外部不必创建该类的实例就可以直接使用
:erK3j(l8GY#J0OATYh.?8?4de0 ● 静态变量是一个引用。这种情况比较特殊,主要问题是由于静态变量是一个对象的引用,那么必须初始化这个对象之后才能将引用指向它。因此如果要把一个引用定义成static的,就必须在定义的时候就对其对象进行初始化。
,T${7Nn6\!]}D0public class TestForStaticObject{ xQlgT/@2}'n0static testObject o = new testObject (); //定义一个静态变量并实例化51Testing软件测试网k:D+@a3}W"a public static void main(String args[]){ 6U'D ~1NsT0//在main中直接以“类名.静态变量名.方法名”的形式使用testObject的方法51Testing软件测试网 @7F4Py
z^X Hu4mlJ } 3||&V(b7l'[I_;uP0} |
51Testing软件测试网B`3Y C Ol*Y5WSU6S 静态方法
x\
RXrM)DI3?Z)l051Testing软件测试网#fl.P'jn 与类变量不同,方法(静态方法与实例方法)在内存中只有一份,无论该类有多少个实例,都共用一个方法。51Testing软件测试网 m `/faxA/@"sz*I!R
51Testing软件测试网2J4o6L
n$xg 静态方法与实例方法的不同主要有:
6[%Ylpx9?0*o-r
r&Et-F4p0 ● 静态方法可以直接使用,而实例方法必须在类实例化之后通过对象来调用。
}Edj6GKy,PR051Testing软件测试网V _*EYc[ ● 在外部调用静态方法时,可以使用“类名.方法名”或者“对象名.方法名”的形式。实例方法只能使用后面这种方式。51Testing软件测试网,F.L3e)DJ
5J5R;\7y'OU&H0 ● 静态方法只允许访问静态成员。而实例方法中可以访问静态成员和实例成员。51Testing软件测试网y
P6Uh&K9l;P:K-XF
F
Rn1|#C3~'bcZ0 ● 静态方法中不能使用this(因为this是与实例相关的)。51Testing软件测试网\ Y,l0l?P
2u:R"Ud3D9X
E0 静态代码块
2\5za7\b
ro051Testing软件测试网R"Hkj6t0g 在java类中,可以将某一块代码声明为静态的。51Testing软件测试网IOdd g!Tv0f$N]
static {51Testing软件测试网;uN!a0dddZ,]5I.@ //静态代码块中的语句 z |$XYp&Ul/h l0} |
#i9_"~0_"Nl0 静态代码块主要用于类的初始化。它只执行一次,并在main函数之前执行。
'Q[)i4B[1|QT$d051Testing软件测试网B&rG @&RwwG4g 静态代码块的特点主要有:
nq6w$z8Lr5V(e0,jB:o,\i"z0 ● 静态代码块会在类被加载时自动执行。51Testing软件测试网"z'U_*H ktTeJm'i
8||uR%z3s!A6g0Nn0 ● 静态代码块只能定义在类里面,不能定义在方法里面。51Testing软件测试网gt@D
Mx
51Testing软件测试网B
@'mkBg ● 静态代码块里的变量都是局部变量,只在块内有效。
}*i4I.i6~7O0
cb1`Iq1U0 ● 一个类中可以定义多个静态代码块,按顺序执行。51Testing软件测试网!S(y.A^"\
Rs fu&VcV0 ● 静态代码块只能访问类的静态成员,而不允许访问实例成员。
S&?,Ms @+t9t^VG"@{0