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

    xiaoxiao2024-01-15  154

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

    面试题7 理解成员

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

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

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

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

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

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

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

    出现频率:

    【面试题解析】

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

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

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

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

    根据图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给出了类成员的相关解释。

    参考答案:(d)。

    最新回复(0)