回答这些复习问题

时间:2015-03-03 22:15:48

标签: java

我有一个java测试,这个java教授正试图和我争吵,因为我说我知道我的东西。

这个特定的问题引发了大声咒骂的交换。

    1. Suppose that c1 and c2 are reference variables of type Clock. 
    What is the effect of each of the following statements?

    a. c1= new Clock();

    Answer
    a. It creates the object c1, and the instance variables hr, min,
    and sec are initialized to 0.

我的回答是它使用默认或无参数构造函数来实现Clock对象。但是,不,他的答案是它将所有实例变量设置为0.

我的问题是你会如何回答这个问题?我怎么知道变量在那里?我问我的教授,他回答说,"如果我发布代码,它将长达3页。"他不能把小时,小时,秒;对于第一行?!

2 个答案:

答案 0 :(得分:6)

声明

c1 = new Clock();

使用其no args构造函数创建类Clock的新实例,并将其分配给局部变量c1。在不知道Clock的实现或其无args构造函数的实现的情况下,无法知道实例c1的内部状态在构造时是什么。成员变量可能已由构造函数或静态初始化设置。你的猜测和我的一样好。

我认为值得注意的是,如果没有看到Clock的实现,你就不知道Clock()是默认的no args构造函数还是没有args的定义构造函数。

答案 1 :(得分:0)

有些人喜欢表明他们是如何“聪明”和受过教育的。也许(只是也许)那是你教授的情况。


查看语句c1= new Clock();,唯一可以说的是使用其无参数构造函数创建类Clock的新实例,并分配对创建的实例的引用到名为c1的变量,该变量必须先前已声明(该变量可能已经初始化,也可能尚未初始化)。实例化包括初始化类字段,如果定义了默认值,例如, private int myField = 4711;,否则使用基元的默认值(int默认为0 s)。

在没有看到类实现的情况下,您只是无法知道哪些字段已初始化以及如何。

Clock可以以不同的方式存储其状态 - 这就是封装的含义。例如,它可以存储 timestamp - 自纪元以来的毫秒数。或者从一天开始。当然,它也可以存储小时+分钟+秒,但你无法知道,你应该猜测任何东西。


自1.8以来,Java中也有class Clock。也许你的教授意味着这门课 - 我不知道,因为我不知道背景。