A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨增坤 于 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

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 Yuan先生 于 2013-9-11 14:00 编辑

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


回复 使用道具 举报
附加:构造代码块
作用:给对象进行初始化
对象一建立就运行,优先于构造函数执行。和构造函数区别:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的函数初始化构造代码块中定义的是不同对象共性的初始化内容.

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
只是去掉了一个访问修饰符private,在本类内部访问都是一样的,输出结果和第一遍的是一样的...
回复 使用道具 举报
本帖最后由 静以修身 于 2013-9-11 16:35 编辑

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

希望能帮到你!!

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马