静态代码块中创建类的对象对类属性的改变

xiaojunjor 2015-11-13 11:04:02
先看一下代码
class Person 
{
private static int age;
private String name;

static{
age = 2; //把该类的默认年龄改为2
new Person(6); //创建一个新的对象并且传入年龄参数6
}

Person(){
System.out.println("A:age="+age+",name="+name);
}

Person(int age){
this.age = age;
System.out.println("B:age="+age+",name="+name);
}
}

class PersonDemo
{
public static void main(String[] args){
Person p1 = new Person();
}
}


输出结果:
B:age=6,name=null
A:age=6,name=null

疑问,为什么第二次输出的age是6呢,静态代码块中的newPerson(6)只是创建了一个对象,为什么会对主函数中新创建的对象p1的age产生改变呢,默认值为什么不是2呢?
...全文
273 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tony4geek 2015-11-13
  • 打赏
  • 举报
回复
你可以加几个打印看看他们的执行顺序 。看看new 之后的启动顺序。
xiaojunjor 2015-11-13
  • 打赏
  • 举报
回复
引用 1 楼 u012171905 的回复:
static变量属于这个类的静态变量,任何实例对象修改这个变量值都会改变所有实例对象中的值
原来是这样...想歪了,跟静态代码块没关系的。多谢多谢
Coder_D 2015-11-13
  • 打赏
  • 举报
回复
static变量属于这个类的静态变量,任何实例对象修改这个变量值都会改变所有实例对象中的值
xiaojunjor 2015-11-13
  • 打赏
  • 举报
回复
引用 3 楼 rui888 的回复:
你可以加几个打印看看他们的执行顺序 。看看new 之后的启动顺序。
嗯,好的。多谢多谢,主要就是注意静态代码块的执行优先性吧。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧