面试题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)。
时间: 2024-10-31 18:09:04