【Java核心面试宝典】Day10、面向对象常见面试题汇总(五)

252 阅读5分钟

这是我参与8月更文挑战的第20天,活动详情查看:8月更文挑战

Hello,你好呀,我是灰小猿!一个超会写bug的程序猿!、 用坚持缔造技术、用指尖敲动未来! 和很多小伙伴们一样,我也是一名奔波在Java道路上的“创造者”。也想靠技术来改未来,改变世界!因为我们坚信每一次敲动键盘都能让生活变得更智能、世界变得更有趣在此专栏《Java核心面试宝典》记录我们备战梦想的【day 10】

在这里插入图片描述

面向对象的方面的相关面试题也和大家总结了好几天了,把其中的内容分成了好几个板块和知识点,今天就来继续和大家分享最后的一部分,

1、聚集关系和组合关系有什么区别?

聚集关系描述两个对象之间的所属关系,模拟具有(has-a)关系,一个对象可以被几个聚集对象所拥有; 如果一个对象被一个聚集对象所专有,该对象和聚合对象之间称为组合

如一个人驾驶一辆汽车,而一辆汽车可以被多个人驾驶,这就是聚集关系 一个人拥有一个身份证,一个身份证也只能被一个人拥有,这就是组合关系

2、什么是“强是关系”和“弱是关系”,对于这两种关系,分别如何在代码中体现?

“强是关系”描述直接继承关系“弱是关系”描述一个类具有某些属性“强是关系”可以用类的继承表示,“弱是关系”可以用接口表示。

3、内聚和耦合的含义是什么?类的设计原则对于内聚和耦合是如何要求的?

内聚指同一个类或模块内部的元素的关联性和紧密程度,耦合指不同类或模块之间的联系紧密程度。 类的设计原则要求高内聚低耦合,即同一个类或模块内部关联性强,不同类或模块之间的关联尽可能少,每个类或模块尽可能独立存在。

4、如何判断两个类之间应该使用继承关系还是聚集关系?

如果两个类之间为“是关系”,则使用继承关系;如果两个类之间为“具有关系”,则使用聚集关系。

如“拉布拉多”是“狗”,则拉布拉多和狗之间就是继承关系, “教室”里面具有“学生”,则教室和学生就是聚集关系

5、如何实现数据域的封装性?

确保类中数据域的封装性的方法是给其增加 private 修饰符隐藏其可见性,避免从外部直接访问数据域。 如果需要从外部读取数据域的值,则提供读取器get方法。如果需要从外部修改数据域的值,提供设置器set方法。 如果一个方法只在类的内部使用,则应该对该方法使用 private 修饰符,避免从外部调用该方法。这就确保了数据域的封装性。

6、序列化和反序列化的含义分别是什么?

对象转化为字节序列的过程称为对象的序列化,把字节序列恢复成对象的过程称为对象的反序列化

7、Serializable接口的作用是什么?这个接口包含哪些信息?

或:如何将一个对象标识成是可被序列化的?

Serializable接口的作用是标识一个对象是否可被序列化,只有当一个类实现了Serializable接口时,这个类的实例才是可序列化的,这个接口是标识接口,不包含任何数据域和方法。

8、关键字transient的作用是什么?

关键字transient的作用是执行数据域不被序列化,当一个数据域不能被序列化,或者不想对一个数据域序列化时,给这个数据域加上关键字transient,在序列化的过程中将忽略这个数据域。

9、Class类的作用是什么?

Class类的作用是在程序运行时保存每一个对象所属的类的信息,在程序运行时分析类。

10、Class类有哪些常用的方法,这些方法的作用分别是什么?

Class 类中最常用的方法是 getName,该方法返回类的名字。 Class 类中还有方法可以返回类中的数据域、方法和构造方法。

其中,方法名不包含 Declared 的方法只返回公有的数据域、方法和构造方法, 方法名包含 Declared 的方法会返回所有的数据域、方法和构造方法。 方法名以 s 结尾的返回所有的数据域、方法和构造方法, 方法名不以 s 结尾的返回单个的数据域、方法和构造方法。

今日总结

今天和大家分享了面向对象的面试题中的最后一部分,这部分的内容主要要掌握的其实就两点,一个是了解序列化和反序列化操作,另一个是熟悉反射机制,其中反射是比较重要的一点,也是之后开发中会经常用到的内容。

到现在,面向对象相关的面试题就暂时和大家总结完了,如果小伙伴们有遇到其他相关的面试题,欢迎在评论区留言提出,我会把大家提出的总结到文章内`, 欢迎小伙伴们一起评论区打卡学习!小伙伴们可也在左方加我好友一起探讨学习!

我是==灰小猿==,我们下期见! 请添加图片描述