public class demo{
static String str = "aaaa";
static{
System.out.println(str);
System.out.println("bbb");
}
demo(){
str = "cccc";
System.out.println(str);
}
public static void main(String a[]){
System.out.println(str);
demo mydemo = new demo();
}
}
输出什么结果,高手可以来解释一下静态初始化器是怎么工作的?是不是先与构造函数执行????
static String str = "aaaa";
static{
System.out.println(str);
System.out.println("bbb");
}
demo(){
str = "cccc";
System.out.println(str);
}
public static void main(String a[]){
System.out.println(str);
demo mydemo = new demo();
}
}
输出什么结果,高手可以来解释一下静态初始化器是怎么工作的?是不是先与构造函数执行????
解决方案 »
- statement.executeUpdate()执行返回0,sql语句放在plsql里面是正确的
- 用Java Socket请求网页数据,遇到301永久重定向问题
- 并发访问数据库问题??
- 是我变傻了还是怎么的?
- 在java中如何实现分页打印阿?
- 在线等待
- 网络间文件传输问题。这应该是老大难问题了,不用bean和rmi怎么才能传得快,这个连老师也无法解决。有没有高人?
- 请教,SQL Server中的nvarchar在JDBC中映射为什么类型?
- 停在断点后AppletViewer不能再继续了……
- 哪里有VisualAge下载。。
- jtable添加数据,
- java 打印日历 大家帮忙看看有没有什么问题?
bbb
aaaa
cccc
静态初始化器是针对类的构造函数是针对对象的当然是现有类,再有对象所以静态初始化器先于构造函数。
static 与实例无关,哪怕你创建实例后,你在销毁实例后,static里面的东西依然存在,直到线程over
JAVA在执行程序的时候首先装载类,然后找mian()
所以,在装载类的时候,遇到static马上执行,
因此,public class demo{
static String str = "aaaa";
static{
System.out.println(str);
System.out.println("bbb");
}
demo(){
str = "cccc";
System.out.println(str);
}
public static void main(String a[]){
System.out.println(str);
demo mydemo = new demo();
}
}首先执行static String str="aaaa";
接着执行static{
System.out.println(str);
System.out.println("bbb");
}
然后装载完毕,进入main()
执行System.out.println(str);
接着执行demo mydemo = new demo();
打印结果为:
aaaa
bbb
aaaa
cccc
如果不明白,你可以去看看我发的那个“测试下你是否真的理解JAVA运行机制和执行顺序 ”
static String str = "aaaa";
static{
System.out.println(str);//即使没有任何对象,静态初始化器都要执行,所以前两行输出是aaaa,bbb
System.out.println("bbb");
}
demo(){
str = "cccc";
System.out.println(str);
}
public static void main(String a[]){
System.out.println(str);//这里的输出要看构造函数的执行情况,这种情况本句输出的是aaaa,如果构造函数先执行,
//则修改了str变量,System.out.println(str)将输出cccc,下面的那种情况!
demo mydemo = new demo();
//但是要注意一点,无论demo mydemo = new demo()与System.out.println(str)位置如何,都是System.out.println(str)先执行,也就是先输出的意思,可以试一下
//具体原因还在研究中,不知道为啥是这样!!!
public class demo{
static String str = "aaaa";
static{
System.out.println(str);
System.out.println("bbb");
}
demo(){
str = "cccc";
System.out.println(str);
}
public static void main(String a[]){
demo mydemo = new demo();
System.out.println(str);//这种情况本句输出的是cccc,因为构造函数修改了静态变量str
}
}
static String str = "aaaa";
static{
System.out.println(str);
System.out.println("bbb");
}
Demo(){
str = "cccc";
System.out.println("构造函数执行~~~~~"+str);
}
public static void main(String a[]){
System.out.println("构造函数执行之前:str="+str);
Demo mydemo = new Demo();
System.out.println("构造函数执行之后:str="+str);
}
}
这个可以看的很清楚!!!!