关于java静态代码块的详细运行过程问题
classChinese{privatestaticintcount=0;static{count=2;System.out.println("staticcode");...
class Chinese
{
private static int count =0; static
{
count =2;
System.out.println("static code");
} private Chinese()
{
System.out.println(++count);
}static void sing()
{
System.out.println("啊!");
}
void singOurCountry()
{
System.out.println(country);
}
}class TestChinese
{
public static void main(String [] args)
{ System.out.println("begin");
Chinese.sing();
System.out.println("end");
new Chinese().sing();
new Chinese().singOurCountry();
new Chinese(); }}此段代码的运行结果为:beginstatic code啊!end3啊!4中国5 不明白为什么运行到Chinese.sing();时输出了static code望高手指点啊···· 展开
{
private static int count =0; static
{
count =2;
System.out.println("static code");
} private Chinese()
{
System.out.println(++count);
}static void sing()
{
System.out.println("啊!");
}
void singOurCountry()
{
System.out.println(country);
}
}class TestChinese
{
public static void main(String [] args)
{ System.out.println("begin");
Chinese.sing();
System.out.println("end");
new Chinese().sing();
new Chinese().singOurCountry();
new Chinese(); }}此段代码的运行结果为:beginstatic code啊!end3啊!4中国5 不明白为什么运行到Chinese.sing();时输出了static code望高手指点啊···· 展开
4个回答
2013-08-22
展开全部
废话,静态块先执行,类加载的时候就执行,一个类要想运行,首先被Java虚拟机将class文件内部字节码指令读取至内存并且包装成一个Class类型的对象,这个过程称为类加载,Class类的一个对象是对某一个类的一个描述!
不是说运行到Chinese.sing();时输出了static code,Chinese.sing();是什么?是方法调用,Chinese是类,sing是该类的静态方法,你要想调用sing方法,首先第一步就是类加载,类都没加载,Java虚拟机都不认识他,运行个屁呀!
所以第一步是类加载,注意!static块,也就是静态块,在类加载的时候就执行了,而且只执行一次,因为不可能进行第二次类加载,从这个意义上说,静态的成员是第一时间执行的,然后才轮到别人!
不是说运行到Chinese.sing();时输出了static code,Chinese.sing();是什么?是方法调用,Chinese是类,sing是该类的静态方法,你要想调用sing方法,首先第一步就是类加载,类都没加载,Java虚拟机都不认识他,运行个屁呀!
所以第一步是类加载,注意!static块,也就是静态块,在类加载的时候就执行了,而且只执行一次,因为不可能进行第二次类加载,从这个意义上说,静态的成员是第一时间执行的,然后才轮到别人!
展开全部
static 块仅在该类被加载时执行一次
class UseStatic {
static int a = 3;
static int b;
static void meth(int x) {
System.out.println("x = " + x);
System.out.println("a = " + a);
System.out.println("b = " + b);
}
static {
System.out.println("Static block initialized.");
b = a * 4;
}
public static void main(String args[]){
meth(42);
}
}
一旦UseStatic 类被装载,所有的static语句被运行。首先,a被设置为3,接着static 块执行(打印一条消息),最后,b被初始化为a*4 或12。然后调用main(),main() 调用meth() ,把值42传递给x。3个println ( ) 语句引用两个static变量a和b,以及局部变量x 。 注意:在一个static 方法中引用任何实例变量都是非法的。
下面是该程序的输出:
Static block initialized.
x = 42
a = 3
b = 12
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-08-22
展开全部
静态块在实例化类 自动调用 而不要自己写代码调用 同时他只调用一次
当没有在实例化的时候 只要你调用任何静态方法 或者是静态的属性 都会自动调用静态块、
调用的机制也是一样 只调用一次 在调用静态的任何对象之前调用
当没有在实例化的时候 只要你调用任何静态方法 或者是静态的属性 都会自动调用静态块、
调用的机制也是一样 只调用一次 在调用静态的任何对象之前调用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-08-22
展开全部
static
{
count =2;
System.out.println("static code");
}
这是首先执行啊!没写方法名,就像在一条分叉路口,不管你选择哪条路(方法)你总要在分叉口经过吧!
{
count =2;
System.out.println("static code");
}
这是首先执行啊!没写方法名,就像在一条分叉路口,不管你选择哪条路(方法)你总要在分叉口经过吧!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询