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

简介: 对象是以类为蓝本创建的类的实例。在类中,一般都定义了类的成员(变量和方法),在创建类的对象时,对象都会拥有类中所定义变量的副本,对象的变量也被称为实例变量。对象的实例变量的值代表了该对象的状态,例如ak47对象,其中gun_type的对象变量表明了该对象为“ak47”类型的Gun。

本节书摘来异步社区《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)。

相关文章
|
10月前
|
缓存 Java 关系型数据库
2025 年最新华为 Java 面试题及答案,全方位打造面试宝典
Java面试高频考点与实践指南(150字摘要) 本文系统梳理了Java面试核心考点,包括Java基础(数据类型、面向对象特性、常用类使用)、并发编程(线程机制、锁原理、并发容器)、JVM(内存模型、GC算法、类加载机制)、Spring框架(IoC/AOP、Bean生命周期、事务管理)、数据库(MySQL引擎、事务隔离、索引优化)及分布式(CAP理论、ID生成、Redis缓存)。同时提供华为级实战代码,涵盖Spring Cloud Alibaba微服务、Sentinel限流、Seata分布式事务,以及完整的D
514 1
|
10月前
|
存储 安全 Java
常见 JAVA 集合面试题整理 自用版持续更新
这是一份详尽的Java集合面试题总结,涵盖ArrayList与LinkedList、HashMap与HashTable、HashSet与TreeSet的区别,以及ConcurrentHashMap的实现原理。内容从底层数据结构、性能特点到应用场景逐一剖析,并提供代码示例便于理解。此外,还介绍了如何遍历HashMap和HashTable。无论是初学者还是进阶开发者,都能从中受益。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
390 3
|
7月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
9月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
598 0
|
9月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
393 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
10月前
|
存储 安全 Java
2025 最新史上最全 Java 面试题独家整理带详细答案及解析
本文从Java基础、面向对象、多线程与并发等方面详细解析常见面试题及答案,并结合实际应用帮助理解。内容涵盖基本数据类型、自动装箱拆箱、String类区别,面向对象三大特性(封装、继承、多态),线程创建与安全问题解决方法,以及集合框架如ArrayList与LinkedList的对比和HashMap工作原理。适合准备面试或深入学习Java的开发者参考。附代码获取链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
5386 50
|
7月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
10月前
|
算法 架构师 Java
Java 开发岗及 java 架构师百度校招历年经典面试题汇总
以下是百度校招Java岗位面试题精选摘要(150字): Java开发岗重点关注集合类、并发和系统设计。HashMap线程安全可通过Collections.synchronizedMap()或ConcurrentHashMap实现,后者采用分段锁提升并发性能。负载均衡算法包括轮询、加权轮询和最少连接数,一致性哈希可均匀分布请求。Redis持久化有RDB(快照恢复快)和AOF(日志更安全)两种方式。架构师岗涉及JMM内存模型、happens-before原则和无锁数据结构(基于CAS)。
269 5
|
10月前
|
Java API 微服务
2025 年 Java 校招面试全攻略:从面试心得看 Java 岗位求职技巧
《2025年Java校招最新技术要点与实操指南》 本文梳理了2025年Java校招的核心技术栈,并提供了可直接运行的代码实例。重点技术包括: Java 17+新特性(Record类、Sealed类等) Spring Boot 3+WebFlux响应式编程 微服务架构与Spring Cloud组件 Docker容器化部署 Redis缓存集成 OpenAI API调用 通过实际代码演示了如何应用这些技术,如Java 17的Record类简化POJO、WebFlux构建响应式API、Docker容器化部署。
489 5