本节书摘来异步社区《Java程序员面试秘笈》一书中的第1章,第1.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)。