黑马程序员技术交流社区
标题:
执行结果和你想的一样吗
[打印本页]
作者:
请备注
时间:
2014-4-4 00:02
标题:
执行结果和你想的一样吗
class StaticCode
{
StaticCode()
{
System.out.println("c");
}
static
{
System.out.println("a");
}
}
public class StaticDemo
{
static
{
System.out.println("b");
}
public static void main(String[] args)
{
new StaticCode();
new StaticCode();
System.out.println("over");
}
}
执行结果 b
a
c
c
over
作者:
Up↑Lee↗
时间:
2014-4-4 08:27
你程序里有静态代码块:
static
{
静态代码块中的执行语句。
}
<font color="#ff00ff">特点:随着类的加载而执行,只执行一次,并优先于主函数(优先于对象)。</font>
用于给类进行初始化的。
复制代码
所以先执行StaticDemo类的static。然后执行上边的static,然后才会到主函数
作者:
muma
时间:
2014-4-4 08:34
不一样 我想的结果是
b
a
c
a
c
over
作者:
松毛
时间:
2014-4-4 08:45
muma 发表于 2014-4-4 08:34
不一样 我想的结果是
b
a
静态代码块是给类初始化的,所以它只会执行一次。
static
{
System.out.println("a");
}
复制代码
虽说new了两个对象,但它只执行了一次。
作者:
muma
时间:
2014-4-4 08:49
奥 对我想起来了 对 是这样的 谢谢
作者:
郭黎明
时间:
2014-4-4 08:57
public class StaticDemo
{
static
{
System.out.println("b"); //jvm先找main函数,然后加载它所在的类,
// 所以当加载StaticDemo时就加载了静态
// 代码块,所以首先会打印出b
}
public static void main(String[] args)
{
new StaticCode(); //在类中静态代码块的优先级高于构造函数,
//所以先打印a,然后才是构造函数中c
new StaticCode(); //在类中静态代码块只加载一次以后就不再加载了,
//所以这里只加载构造函数打印c
System.out.println("over");//最后打印over
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2