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

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

cJ t D/u-I/y.c7d!g0  我们知道类的生命周期分为装载、连接、初始化、使用和卸载的五个过程。

0v4\:X(?3?#c_0

"Rjwt4G8y`gw0  其中静态代码在类的初始化阶段被初始化。而非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化。51Testing软件测试网Ix v;^]zNS9m-iL

9~-gV'oSBa4`0  静态变量

/WZ^Jx\K051Testing软件测试网t'DzY;\-?&_

  可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。

3?Y#f7]3cWc|Q y051Testing软件测试网3uc-J_4Z,I6u2Jwh

  静态变量有两种情况:51Testing软件测试网[8F.jdS7{

51Testing软件测试网9u |M%d9Y

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

v$c_2}(N ^Nza(z051Testing软件测试网[G ou#j

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

u2q pod4tCU_ZI0C0
public class TestForStaticObject{
X)R _v,P_&l0static testObject o = new testObject (); //定义一个静态变量并实例化
mC1r~[]#h3G/LX0public static void main(String args[]){
0n-c+^ yS0//在main中直接以“类名.静态变量名.方法名”的形式使用testObject的方法51Testing软件测试网 D4V HU8L M~
}51Testing软件测试网%xzm*^$mD6pK+m a
}
51Testing软件测试网0~EifO u,n7U

  静态方法51Testing软件测试网O8["V:S;[r:j

51Testing软件测试网8~ `&Tk#A?;ae%F

  与类变量不同,方法(静态方法与实例方法)在内存中只有一份,无论该类有多少个实例,都共用一个方法。

f H2Es d'N_0

P P3`b?0u A0  静态方法与实例方法的不同主要有:

Qw6a HG {0

!|/kwx-T-LN.R0  ● 静态方法可以直接使用,而实例方法必须在类实例化之后通过对象来调用。

w xe9anPN[0

ah hp6o0@^!L0w&F0  ● 在外部调用静态方法时,可以使用“类名.方法名”或者“对象名.方法名”的形式。实例方法只能使用后面这种方式。

2^ \!z J O6Ie\051Testing软件测试网k W Qo _9l+j"U4Si

  ● 静态方法只允许访问静态成员。而实例方法中可以访问静态成员和实例成员。51Testing软件测试网5T1q4v$V cwGu

51Testing软件测试网{X!f#`Nx:M0g

  ● 静态方法中不能使用this(因为this是与实例相关的)。51Testing软件测试网-h-I g.G.@q2Bo V

51Testing软件测试网 r7V@"^@ h)\;o:qx

  静态代码块51Testing软件测试网a:r2zF:o8`3C9U

z&W/U x2Sbd1m0  在java类中,可以将某一块代码声明为静态的。

{ zsGl3B7U!|0
static {51Testing软件测试网;Y)i8Y$w.Y`/u.H.J6A
//静态代码块中的语句
y#v'A2O~j8[0}
51Testing软件测试网E/hWUJ

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

P(H"c"y0KU5g051Testing软件测试网 a]7v1kZ+~

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

(~Cxp5|2[u/w4g W%y051Testing软件测试网 O/rl!h9r&n

  ● 静态代码块会在类被加载时自动执行。

$~WD(Uie j0

o4TwL5x0  ● 静态代码块只能定义在类里面,不能定义在方法里面。51Testing软件测试网Fb(Y$q:[4^/R

51Testing软件测试网F:]`.aO"Ptb6xST

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

,f_2Y%V ]+@:O-xL{0

w,f*diqG(`*_0  ● 一个类中可以定义多个静态代码块,按顺序执行。

%Rg#@ R:H~G ~0

8c3TbJn.]'N^0  ● 静态代码块只能访问类的静态成员,而不允许访问实例成员。51Testing软件测试网QD~x tS;i{X


TAG:

 

评分:0

我来说两句

Open Toolbar