黑马程序员技术交流社区

标题: 大神帮解释!! [打印本页]

作者: zhenfei    时间: 2014-7-28 20:52
标题: 大神帮解释!!
classPenguin {
    private String name=null; // 名字
    private int health=0; // 健康值
    private String sex=null; // 性别
    public void Penguin() {
          health = 10;
          sex = "雄";
          System.out.println("执行构造方法。");
    }
    public void print() {
          System.out.println("企鹅的名字是" + name +
                     ",健康值是" + health + ",性别是" + sex+ "。");
    }
    public static void main(String[] args) {
          Penguin pgn = new Penguin();
          pgn.print();
    }
}
这是我们今天的小测试 我编译的结果是:企鹅的名字是null,健康值是0,性别是null。 他为什么不输出“执行构造方法”呢?不是说子类构造器里面默认有super 吗!!


作者: star5603    时间: 2014-7-28 21:44
classPenguin这两个你有没有写错?
作者: 江苏孙浩    时间: 2014-7-28 21:51
本帖最后由 江苏孙浩 于 2014-7-28 21:53 编辑

构造函数:    public void Penguin()  -- 把void去掉;构造函数没有返回类型的
貌似也没有对name进行初始化

作者: 洛漠O_o    时间: 2014-7-28 22:06
本帖最后由 洛漠O_o 于 2014-7-28 22:22 编辑
  1. class Penguin {
  2.     private String name=null; // 名字
  3.     private int health=0; // 健康值
  4.     private String sex=null; // 性别
  5.   //这个是一个方法,不是类的构造方法。类的无参构造方法是public Penguin(){},但是默认的是有这个。
  6.   //Penguin pgn = new Penguin();这句你能new出来,就是说是有默认构造方法的
  7.         public void Penguin() {
  8.           health = 10;
  9.           sex = "雄";
  10.           System.out.println("执行构造方法。");
  11.     }
  12.     public void print() {
  13.           System.out.println("企鹅的名字是" + name +
  14.                      ",健康值是" + health + ",性别是" + sex+ "。");
  15.     }
  16.     public static void main(String[] args) {
  17.              Penguin pgn = new Penguin();
  18.          pgn.print();
  19.          //-------------------------------
  20.          System.out.println("-----让health、sex有值。因为你没给name赋值所以name还为空--------");
  21.          pgn.Penguin();
  22.          pgn.print();
  23.     }
  24. }
复制代码
编译结果:
企鹅的名字是null,健康值是0,性别是null。
-----让health、sex有值。因为你没给name赋值所以name还为空--------
执行构造方法。
企鹅的名字是null,健康值是10,性别是雄。


作者: 花花公子    时间: 2014-7-28 22:09
洛漠O_o 发表于 2014-7-28 22:06
编译结果:
企鹅的名字是null,健康值是0,性别是null。
-----让health、sex有值。因为你没给name赋值所以n ...

类是不带小括号的吧

作者: 花花公子    时间: 2014-7-28 22:13
本帖最后由 花花公子 于 2014-7-28 22:15 编辑

public void Penguin() {
          health = 10;
          sex = "雄";
          System.out.println("执行构造方法。");
这个不是构造函数吧。这算是一个方法。

  1. Penguin(String name,int health,String sex)
  2. {
  3.       this.name=name;
  4.       this.sex=sex;
  5.       this.health=health;
  6. }
复制代码
主函数中new对象的时候把参数写进去。
作者: 洛漠O_o    时间: 2014-7-28 22:21
花花公子 发表于 2014-7-28 22:09
类是不带小括号的吧

类的构造方法……呵呵,写错了。。。。qiu了
作者: 青偆丶易逝〃    时间: 2014-7-28 22:40
你的构造函数带了返回值类型, 所以程序运行的是默认的构造函数,所以没有打印System.out.println("执行构造方法。");  




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