Java中的静态变量、静态方法与静态代码块

上一篇 / 下一篇  2012-09-11 14:32:58 / 个人分类:Java

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\j8g H3pn5},xVd

ra"nI9f0  可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。51Testing软件测试网!FeZy#a6h(mI1Ig)r&R

FUx)p BKTxw+x:J0  静态变量有两种情况:

1C2{}a_&?)tCS.M051Testing软件测试网i0K'U$^#CbaO

  ● 静态变量是基本数据类型,这种情况下在类的外部不必创建该类的实例就可以直接使用

:erK3j(l8GY#J0

OATYh.?8?4de0  ● 静态变量是一个引用。这种情况比较特殊,主要问题是由于静态变量是一个对象的引用,那么必须初始化这个对象之后才能将引用指向它。因此如果要把一个引用定义成static的,就必须在定义的时候就对其对象进行初始化。

,T${7Nn6\!]}D0
public class TestForStaticObject{
xQl gT/@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[%Ylp x9?0

*o-r r&Et-F4p0  ● 静态方法可以直接使用,而实例方法必须在类实例化之后通过对象来调用。

}Edj6GKy,PR051Testing软件测试网V _*EYc[

  ● 在外部调用静态方法时,可以使用“类名.方法名”或者“对象名.方法名”的形式。实例方法只能使用后面这种方式。51Testing软件测试网,F.L3e)DJ

5J5R;\7y'OU&H0  ● 静态方法只允许访问静态成员。而实例方法中可以访问静态成员和实例成员。51Testing软件测试网y P6U h&K9l;P:K-XF F

Rn1|#C3~'b cZ0  ● 静态方法中不能使用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/hl0}

#i9_"~0_"Nl0  静态代码块主要用于类的初始化。它只执行一次,并在main函数之前执行。

'Q[)i4B[1|QT$d051Testing软件测试网B&rG@&RwwG4g

  静态代码块的特点主要有:

nq6w$z8Lr5V(e0

,jB:o,\i"z0  ● 静态代码块会在类被加载时自动执行。51Testing软件测试网"z'U_*HktTeJm'i

8||uR%z3s!A6g0Nn0  ● 静态代码块只能定义在类里面,不能定义在方法里面。51Testing软件测试网gt@D Mx

51Testing软件测试网B @'mkBg

  ● 静态代码块里的变量都是局部变量,只在块内有效。

}*i4I.i6~7O0

cb1`Iq1U0  ● 一个类中可以定义多个静态代码块,按顺序执行。51Testing软件测试网!S(y.A^"\

R s fu&VcV0  ● 静态代码块只能访问类的静态成员,而不允许访问实例成员。

S&?,Ms @+t9t^VG"@{0

TAG:

 

评分:0

我来说两句

Open Toolbar