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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhenfei 初级黑马   /  2014-7-28 20:52  /  1141 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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 吗!!

7 个回复

倒序浏览
classPenguin这两个你有没有写错?
回复 使用道具 举报
本帖最后由 江苏孙浩 于 2014-7-28 21:53 编辑

构造函数:    public void Penguin()  -- 把void去掉;构造函数没有返回类型的
貌似也没有对name进行初始化
回复 使用道具 举报
本帖最后由 洛漠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,性别是雄。

回复 使用道具 举报
洛漠O_o 发表于 2014-7-28 22:06
编译结果:
企鹅的名字是null,健康值是0,性别是null。
-----让health、sex有值。因为你没给name赋值所以n ...

类是不带小括号的吧
回复 使用道具 举报
本帖最后由 花花公子 于 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对象的时候把参数写进去。
回复 使用道具 举报
花花公子 发表于 2014-7-28 22:09
类是不带小括号的吧

类的构造方法……呵呵,写错了。。。。qiu了
回复 使用道具 举报
你的构造函数带了返回值类型, 所以程序运行的是默认的构造函数,所以没有打印System.out.println("执行构造方法。");  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马