黑马程序员技术交流社区

标题: 构造代码块初始化 和构造函数初始化。。。 [打印本页]

作者: 张红伟    时间: 2013-9-11 13:43
标题: 构造代码块初始化 和构造函数初始化。。。
本帖最后由 杨增坤 于 2013-9-11 17:16 编辑

class Person{
  private String name="haha";
  private int age;
  private static String country="CN";
  Person(String name,int age){
    this.name=name;
    this.age=age;
    }
  {
    System.out.println(name+".."+age);
}
  public void setName(String name){
   this.name=name;
  }
    public  void speak(){
    System.out.println(this.name+".."+this.age);
    }
   public static void showCountry(){
      System.out.println("country="+country);
   }
}
  class PersonDemo{
     public static void main(String[] args){
       Person p=new Person("zhangsan",20);
     }
  }

         输出结果是  haha..0,  
上面的 private String name="haha";
  private int age;
改为  String name="haha";
      int age;
   结果会怎么样呢?还是 haha..0


作者: Yuan先生    时间: 2013-9-11 13:52
本帖最后由 Yuan先生 于 2013-9-11 14:00 编辑

楼主是想问什么呢?private只是一个修饰符,把变量私有化,只能在本类内部访问



作者: 李锡碧    时间: 2013-9-11 13:58
附加:构造代码块
作用:给对象进行初始化
对象一建立就运行,优先于构造函数执行。和构造函数区别:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的函数初始化构造代码块中定义的是不同对象共性的初始化内容.

作者: lonely_zb    时间: 2013-9-11 15:38
只是去掉了一个访问修饰符private,在本类内部访问都是一样的,输出结果和第一遍的是一样的...
作者: 静以修身    时间: 2013-9-11 16:30
本帖最后由 静以修身 于 2013-9-11 16:35 编辑

首先你要清楚刚开始的输出结果为什么是haha..0,那你就得先弄懂Person p=new Person("zhangsan",20);在内存中做了什么事情?它先进行属性的空间分配,并进行了默认初始化,然后对空间中的属性进行显示初始化,再进行实体的构造代码块初始化,最后调用该实体对应的构造函数,进行构造函数初始化。所以输出结果是执行了构造代码块这一块:
{
    System.out.println(name+".."+age);
}所以输出的name是属性显示初始化的值haha,age是默认初始化的值,因为没有显示初始化,所以输出结果是haha..0。
引用上一楼主说的:去掉了一个访问修饰符private,在本类内部访问都是一样的,输出结果和第一遍的是一样的。

希望能帮到你!!





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2