《Java程序员面试秘笈》—— 面试题7 理解成员

  1. 云栖社区>
  2. 博客>
  3. 正文

《Java程序员面试秘笈》—— 面试题7 理解成员

异步社区 2017-05-02 03:24:00 浏览1141

本节书摘来异步社区《Java程序员面试秘笈》一书中的第1章,第1.7节,作者:常建功,更多章节内容可以访问云栖社区“异步社区”公众号查看。

面试题7 理解成员

下面关于实例成员的哪一种说法是正确的?

(a)实例成员也被称为静态成员。

(b)实例成员总是变量。

(c)实例成员从不是方法。

(d)实例成员隶属于实例,但不隶属于整个类。

(e)实例成员总是代表着运算。

考点:考察求职者对于实例成员的理解。

出现频率:

【面试题解析】

1.实例成员
对象是以类为蓝本创建的类的实例。在类中,一般都定义了类的成员(变量和方法),在创建类的对象时,对象都会拥有类中所定义变量的副本,对象的变量也被称为实例变量。对象的实例变量的值代表了该对象的状态,例如ak47对象,其中gun_type的对象变量表明了该对象为“ak47”类型的Gun。如果一个类的两个对象处于同一个状态,则它们的某个实例变量应该是相同的。

对象的方法定义了该对象的行为,一般被称为实例方法。实例方法属于该类的每个对象,而方法的实现是有所有的类实例共享的。求职者应该加以区别。

隶属于对象的实例变量和实例方法合称为对象的实例成员。值得注意的是,应与类的静态成员相区别,静态成员只是隶属于类,而不隶属于对象。

2.静态成员
静态成员隶属于类,而不属于任何该类生成的对象,当类加载时就会初始化静态变量;同样,静态方法也是隶属于类的,而不是对象。静态变量和静态方法合称为静态成员。例如,类Gun中可以增加gunAmount静态变量和getGunAmount()静态方法,如图1.3所示。

4e34d0205bf383039c384239ff737d0a778c44e3

根据图1.3所示的UML模型,修改后的Gun类代码如下所示:

public class Gun {
   // 定义枪的口径
  public Double caliber;
  // 定义枪的长度
  public Double length;
  // 定义枪的类型
  public String gun_type;
  //定义静态变量
  public static int gunAmount;
  // 构造方法
  public Gun() {
    gunAmount++;
  }
  // 带参数的构造方法
  public Gun(String name) {
    gunAmount++;
  }
  // 开火的方法
  public void fire() {
    System.out.println(gun_type +" is firing");
  }
  // 维护的方法
  public Boolean maintenance() {
    return true;
  }
  //获得静态变量值
  public static int getGunAmount(){
    return gunAmount;
  }
}

测试方法代码如下所示:

……
public static void main(String[] args) {
    //建立Gun类对象,即Gun类的实例ak47
    Gun ak47=new Gun();
    //使用带参数的构造方法
    Gun m16=new Gun("M16 Gun");
    //打印类的静态变量值
    System.out.println("Zhe Gun Amount is:"+Gun.gunAmount);
    //定义ak47的口径
    ak47.caliber=7.6;
    //定义ak47的长度
    ak47.length=57.8;
    //定义ak47的类型
    ak47.gun_type="AK47";
    //调用fire方法
    ak47.fire();
  }
……

运行该测试方法,结果如下:

Zhe Gun Amount is:2
AK47 is firing

可见,静态成员只隶属于类,而不是对象。表1.3给出了类成员的相关解释。

221a82bb09fc2ecab9afdc35edc4ff6c7053fe38

参考答案:(d)。