黑马程序员技术交流社区

标题: 本人菜鸟 考试碰到一题 感觉老师说错了 特意请教大神 [打印本页]

作者: 王先荣    时间: 2015-5-9 14:05
标题: 本人菜鸟 考试碰到一题 感觉老师说错了 特意请教大神
题目如下,请各位大神帮忙看下选择什么

下面Java代码的运行结果是(  )。
class Penguin {
        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();
        }
}
        A.        企鹅的名字是null,健康值是10,性别是雄。
        B.        执行构造方法。
            企鹅的名字是null,健康值是0,性别是null。
        C.        企鹅的名字是null,健康值是0,性别是null。
        D.        执行构造方法。
            企鹅的名字是null,健康值是10,性别是雄。
作者: 飒飒    时间: 2015-5-9 14:26
public void Penguin() {
                health = 10;
                sex = "雄";
                System.out.println("执行构造方法。");
        }
不是构造函数,只是一个方法。所以选C


作者: 我爱吃橙子    时间: 2015-5-9 14:31
Penguin()前面有void就说明不是构造函数 没有运行
所以答案选C

作者: 大西洋    时间: 2015-5-9 14:32
本帖最后由 大西洋 于 2015-5-9 14:34 编辑

楼上正解!

构造器不用加 void 修饰符,所以 public void Penguin() 不是构造器,不会被调用,方法中的代码也就不会执行~

因此选 C
作者: 林子俊    时间: 2015-5-9 14:37
构造方法不能写返回值类型,格式为:修饰符  类名(){}
   题目中加了void  所以不是构造方法,所以选C
作者: 方的黑马    时间: 2015-5-9 15:17
楼上的差不多 构造器不加 void 修饰符,public void Penguin() 不是构造器,不被调用,方法中的代码就不会执行~

因此选 C 答案是C
作者: 王先荣    时间: 2015-5-9 16:23
各位 空的构造方法 在创建对象时就不执行构造方法吗
作者: wkz_crystal    时间: 2015-5-9 17:45
飒飒 发表于 2015-5-9 14:26
public void Penguin() {
                health = 10;
                sex = "雄";

严重同意哈!
作者: brouse    时间: 2015-5-9 21:05
看起来没什么难的呀,你说老师错了,你也不说老师说那个是答案
作者: 安逸小弟    时间: 2015-5-9 21:10
顶一下顶一下
作者: bboyXiaoNuo    时间: 2015-5-9 21:10
那个虽然看着像但是不是构造函数
作者: zwuming    时间: 2015-5-9 21:34
我想请教一下,怎么调用这个方法:public void Penguin()
作者: zwuming    时间: 2015-5-9 21:37
原来public void Penguin()可以通过对象来调用,我想请问一下,真正的构造函数是不是无法通过对象调用的?
作者: csu050416    时间: 2015-5-9 21:52
zwuming 发表于 2015-5-9 21:37
原来public void Penguin()可以通过对象来调用,我想请问一下,真正的构造函数是不是无法通过对象调用的? ...

构造函数是给对象初始化的,对象一建立就会调用与之对应的构造函数;建立对象,自动调。
作者: ye646682485    时间: 2015-5-9 22:19
我第一眼也看错了
作者: ddddk    时间: 2015-5-9 22:26
细节问题 学习了
作者: 雪风飞花    时间: 2015-5-9 22:35
考好久了,上面没有构造方法,所以选C
作者: lingdu    时间: 2015-5-9 22:37
学习了,呵呵
作者: 王先荣    时间: 2015-5-9 23:11
老师数选择c的 我觉得选择B 应为构造方法是一定要调的 只是这题构造方法给隐藏了
作者: zwuming    时间: 2015-5-9 23:12
csu050416 发表于 2015-5-9 21:52
构造函数是给对象初始化的,对象一建立就会调用与之对应的构造函数;建立对象,自动调。 ...

我想问,对象建立之后,能不能再手动调用?
作者: 王先荣    时间: 2015-5-9 23:13
雪风飞花 发表于 2015-5-9 22:35
考好久了,上面没有构造方法,所以选C

没有写 不代表没有 不代表不执行 我觉得 选择B
作者: zhuankill    时间: 2015-5-9 23:43
学习了,顶一下
作者: 熊猫宝宝    时间: 2015-5-9 23:45
这个答案,是  C啊,老师没讲错


作者: 雪风飞花    时间: 2015-5-10 00:18
本帖最后由 雪风飞花 于 2015-5-10 00:27 编辑
王先荣 发表于 2015-5-9 23:13
没有写 不代表没有 不代表不执行 我觉得 选择B

有个默认的无参构造方法,是系统在这个类不给任何构造方法时赋给这个类的,这个默认的构造方法里面没有任何的输出语句,你是怎么把那句话加上去的,题目中也没有给出这个无参构造方法,要是你自己给出了这个无参构造方法并且带有这个输出语句,你选B还行,但是没有给,只有系统默认的不带任何东西的构造方法,你去哪里执行“System.out.println("执行构造方法。");”这一句,建议你多回去看看关于构造方法的视频。里面有详细介绍。
作者: 空--格    时间: 2015-5-10 00:18
反正我选的是C
作者: anywayDo    时间: 2015-5-10 00:25
不看楼上,真心做不对呀。。
作者: 熬夜看书    时间: 2015-5-10 00:57
学习下,把Penguin看错成构造函数了,
原来是选c
作者: 懒儿想想    时间: 2015-5-10 01:11
默默的看一遍,自己没选对
作者: 我干阿衰    时间: 2015-5-10 02:11
  当Penguin pgn = new Penguin();
                pgn.print();时,只调用了print()方法,所以选c
作者: 李海明    时间: 2015-5-10 08:54
c,
  1. public void Penguin() {
  2.                 health = 10;
  3.                 sex = "雄";
  4.                 System.out.println("执行构造方法。");
  5.         }
复制代码
这个构造方法下面主函数根本就没有调用,所以不会被执行,答案当然就是c了。
作者: 想要那片海    时间: 2015-5-10 09:04
构造方法不能有返回值
作者: 1017161726    时间: 2015-5-10 09:49
我去,陷阱到处都是,原来那个不是构造函数。
作者: V_nan    时间: 2015-5-10 10:02
学习了,原来还有这样的题目
作者: rose_xiaomei    时间: 2015-5-10 20:57
构造函数函数名与类名想同,不用定义返回值类型。对于七楼,当一个类中没有定义构造函数,那么系统就会给该类加入一个空参数的构造函数,对象一建立就会调用与之相对应的构造函数。
作者: 邓熊财    时间: 2015-5-10 21:23
这不是哥们刚刚考完的卷子吗?
作者: 邓熊财    时间: 2015-5-10 21:25
zwuming 发表于 2015-5-9 21:34
我想请教一下,怎么调用这个方法:public void Penguin()

就当普通方法调用呗!!!
作者: 笑爷    时间: 2015-5-10 21:36
真的很容易看错,看到与类名一样的方法就当作构造方法了,学习了。
作者: Advances    时间: 2015-5-10 21:52
注意一下返回类型就好了
作者: yuanhnu    时间: 2015-5-10 22:05
前天刚考过,public void Penguin() 由于含有void,所以不是构造函数,虽然方法名Penguin不符合书写规范,规范写应该是penguin,但是能编译通过运行。
作者: 马鹏涛    时间: 2015-5-10 22:23
空空空啊
作者: 王先荣    时间: 2015-5-12 10:17
李海明 发表于 2015-5-10 08:54
c,这个构造方法下面主函数根本就没有调用,所以不会被执行,答案当然就是c了。 ...

这已经谈不上构造方法了:)
作者: 王先荣    时间: 2015-5-12 10:20
谢谢以上的同学帮我解决烦恼
作者: cjmjava    时间: 2015-5-12 11:57
c,你这里根本没写构造,所以系统执行的是默认无参构造,变量初始化值未变化
作者: 乘梦而飞    时间: 2015-5-12 21:31
路过看看
作者: Cat    时间: 2015-5-12 21:53
学习一下~
作者: Oh.Ba    时间: 2015-5-12 22:33
上周的试题,答案没啥疑问的
作者: guoyangpeng    时间: 2015-5-12 22:36
默默学习了……
作者: zy18692243338    时间: 2015-5-12 22:38
首先咱说:你是0424班的吧,其次就是那个只是一般方法,它不是构造方法,不会初始化数据的!!!
作者: liya7907    时间: 2015-5-12 22:41
上面没有构造方法,是选C




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