面经学习三

目录

[Java 与 C++ 的区别](#Java 与 C++ 的区别)

面向对象和面向过程的区别

面向对象特性

Java的基本数据类型

深拷贝和浅拷贝

Java创建对象的几种方式

[final, finally, finalize 的区别](#final, finally, finalize 的区别)


Java 与 C++ 的区别

  • Java 是纯粹的面向对象语言,所有的对象都继承自 java.lang.Object,C++ 兼容 C ,不但支持面向对象也支持面向过程。
  • Java 通过虚拟机从而实现跨平台特性, C++ 依赖于特定的平台。
  • Java 没有指针,它的引用可以理解为安全指针,而 C++ 具有和 C 一样的指针。
  • Java 支持自动垃圾回收,而 C++ 需要手动回收。
  • Java 不支持多重继承,只能通过实现多个接口来达到相同目的,而 C++ 支持多重继承。

其中 C++ 依赖于特定的平台原因在于C语言的语法GCC是帮开发者实现了跨平台,但是不同的操作系统和不同CPU提供的接口不一致,所以需要C语言开发者去完成适配工作。

面向对象和面向过程的区别

面向对象和面向过程是一种软件开发思想。

  • 面向过程就是分析出解决问题所需要的步骤,然后用函数按这些步骤实现,使用的时候依次调用就可以了。
  • 面向对象是把构成问题事务分解成各个对象,分别设计这些对象,然后将他们组装成有完整功能的系统。面向过程只用函数实现,面向对象是用类实现各个功能模块。

面向对象特性

面向对象四大特性:封装,继承,多态,抽象。

1、封装就是将类的信息隐藏在类内部,不允许外部程序直接访问,而是通过该类的方法实现对隐藏信息的操作和访问。 良好的封装能够减少耦合。

2、继承是从已有的类中派生出新的类,新的类继承父类的属性和行为,并能扩展新的能力,大大增加程序的重用性和易维护性。在Java中是单继承的,也就是说一个子类只有一个父类。

3、多态是同一个行为具有多个不同表现形式的能力。在不修改程序代码的情况下改变程序运行时绑定的代码。实现多态的三要素:继承、重写、父类引用指向子类对象。

  • 静态多态性:通过重载实现,相同的方法有不同的參数列表,可以根据参数的不同,做出不同的处理。
  • 动态多态性:在子类中重写父类的方法。运行期间判断所引用对象的实际类型,根据其实际类型调用相应的方法。

4、抽象。把客观事物用代码抽象出来。

Java的基本数据类型

|---------|-----------------------------|
| byte | 8 |
| char | 16 |
| short | 16 |
| int | 32 |
| float | 32 |
| long | 64 |
| double | 64 |
| boolean | 只有两个值,true,false,可以用1bit来存储 |

单位:bit

在Java规范中,没有明确指出boolean的大小。在《Java虚拟机规范》给出了单个boolean占4个字节,和boolean数组1个字节的定义,具体 还要看虚拟机实现是否按照规范来,因此boolean占用1个字节或者4个字节都是有可能的。

深拷贝和浅拷贝

浅拷贝:拷⻉对象和原始对象的引⽤类型引用同⼀个对象。

深拷贝:拷贝对象和原始对象的引用类型引用不同的对象。

Java创建对象的几种方式

参考:【Java基础】Java对象创建的几种方式 - 知乎

  • 用new语句创建对象。
  • 使用反射,使用Class.newInstance()创建对象。
  • 调用对象的clone()方法。
  • 运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法。
  • 使用Constructor类的newInstance()方法创建对象。

final, finally, finalize 的区别

  • final 用于修饰属性、方法和类, 分别表示属性不能被重新赋值,方法不可被覆盖,类不可被继承。
  • finally 是异常处理语句结构的一部分,一般以try-catch-finally出现,finally代码块表示总是被执行。
  • finalize 是Object类的一个方法,该方法一般由垃圾回收器来调用,当我们调用System.gc()方法的时候,由垃圾回收器调用finalize()方法,回收垃圾,JVM并不保证此方法总被调用。
相关推荐
起名字真南8 分钟前
【OJ题解】C++实现字符串大数相乘:无BigInteger库的字符串乘积解决方案
开发语言·c++·leetcode
爬山算法13 分钟前
Maven(28)如何使用Maven进行依赖解析?
java·maven
tyler_download19 分钟前
golang 实现比特币内核:实现基于椭圆曲线的数字签名和验证
开发语言·数据库·golang
小小小~20 分钟前
qt5将程序打包并使用
开发语言·qt
hlsd#20 分钟前
go mod 依赖管理
开发语言·后端·golang
小春学渗透21 分钟前
Day107:代码审计-PHP模型开发篇&MVC层&RCE执行&文件对比法&1day分析&0day验证
开发语言·安全·web安全·php·mvc
杜杜的man24 分钟前
【go从零单排】迭代器(Iterators)
开发语言·算法·golang
亦世凡华、24 分钟前
【启程Golang之旅】从零开始构建可扩展的微服务架构
开发语言·经验分享·后端·golang
2401_8574396937 分钟前
SpringBoot框架在资产管理中的应用
java·spring boot·后端
怀旧66638 分钟前
spring boot 项目配置https服务
java·spring boot·后端·学习·个人开发·1024程序员节