总结的Java基础部分高频的知识(持续更新)
基础
📌什么是面向对象?有什么特性?
面向对象就是把事物给对象化,包括其属性和行为。面向对象又三大特征,分别是:封装、继承、多态。
- 封装: 就是指将对象的实现细节隐藏起来,通过公共的方法向外暴露除该对象的功能。比如我们通过将成员变量设置为私有后通过提供的
getter/setter
方法来访问。 使用封装可以提高安全性,简化操作,实现代码的组件化。 - 继承: 继承是一种提高代码复用的重要手段,当一个子类继承了父类时,就会拥有父类的成员和方法,同时子类还可以自己实现更多的功能。但继承也是一种强耦合关系,父类改变子类也要相应的改变。
- 多态: 多态就是同一类型对象在执行相同行为的情况下会又不同表现形态。 实现多态就要首先实现继承和重写以及向上转型。把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的实现差异,可以降低类之间的耦合度,易于扩展。
📌面向对象和面向过程的区别?
- 面向过程是对于一个问题的解决过程的实现,重点强调的是功能的行为和执行过程。而面向对象是站在某一个对象它可以实现的功能的角度,将不同对象可实现的功能组装起来解决问题。
- 面向过程采用的是自顶向下的设计方式,在设计初期就要考虑到每个模块以及每个函数,所以它的系统的适应性和可扩展性较差。面向对象编程更加符合常规思维,可扩展性好,更加模块化,所以也就拥有更低的耦合。
📌 Java和C++的区别?
- 都是面向对象的编程语言,支持封装、继承和多态
- 指针:Java不提供指针来直接访问内存,程序更安全
- 继承:Java是单继承,C++是多继承,但Java可以实现多个接口
- 内存:Java有自动内存管理机制,不需要程序员手动释放内存
📌JDK、JRE、JVM分别是什么?
- JVM:Java虚拟机,是运行Java字节码的虚拟机,JVM有对于不用系统和的特定实现,以保证可以使用相同的字节码得出相同的结果。Java虚拟机不受平台的约束,实现了“一次编译,到处运行”
- JDK : Java开发工具包,包含了Java虚拟机、Java程序设计语言、Java API类库这三部分
- JRE:Java运行时环境(Java Runtime Environment),包含了JavaSE API 子集以及Java虚拟机这两部分
📌Java有哪些数据类型?
Java中有两类数据类型,分别是:基本数据类型和引用数据类型
- 基本数据类型:包括byte(1)、short(2)、int(4)、long(8)、double(8)、float(4)、char(2)、boolean(1)
- 引用数据类型:包括类、接口、数组等
📌String类为什么设计为不可变的?怎么实现的?
- 将String对象设置为不可变有很大的好处。
(1)首先,由于设计为不可变,所以可以实现字符串常量池,就可以在运行时节约很多堆上的空间。
(2)String设计为不可变也大大提高了安全性,由于很多重要信息比如数据库的用户名密码、网络中的URL和主机名等都是使用String存储,如果String可变,就会引起很多安全问题。
(3)在多线程下时安全的,由于设计为不可变,所以即使多个线程共享一个字符串,也不会造成多线程不同步的问题
(4)因为字符串时是不可变的,所以它创建的时候hashcode就被缓存了,不需要重新计算。这就使得字符串很适合作为Map中的键 - 在实现上,首先String被final关键字修饰,就不能被继承以至于修改。其次String的底层是使用一个char[]实现的,而这个数组也使用了final修饰保证了其不可变性,另外对于String的所有方法都没有将原有的String对象暴露出来,所以别人也就无从修改。至此就保证了String的不可变。