JAVA 基础核心面试问题分析,看懂了轻

文章目录

    • 如何理解面向对象编程?
    • JDK 和 JRE 有什么区别?
    • 如何理解JAVA中封装,继承、多态特性?
    • 如何理解Java中的字节码对象?
    • 你是如何理解Java中的泛型的?
    • 说说泛型应用在什么场景呢?
    • 如何理解Java中的泛型通配符?
    • 说说什么是泛型类型擦除?
    • 我们为什么要学习JVM?
    • 市场上有哪些主流的JVM呢?
    • JVM的体系结构是怎样的?
    • 你知道JVM有哪些运行模式吗?
JAVA编程基础如何理解面向对象编程?面向对象编程强调的是一种编程的思想,它是将客观存在的一切事物都理解为计算机中的对象,当我们通过编写程序的方式去解决一些业务问题时,应该首先想到的是用什么对象去解决这个问题,其次是才是解决这个问题的步骤 。例如将大象放冰箱,不能先想到的是打开门,放大象,关门这个步骤,这只是一种面向过程编程而已 。而面向对象编程,强调的是你要放的是一个什么样的大象,你是否有可以放下这个大象的冰箱,然后由谁将大象放到冰箱 。也就是说面向对象的重点是对象 。再比如说我要去上海,首先想到的应该是交通工具,然后才是先到哪里,再到哪里 。总而言之,面向对象编程编程更符合人们看待事务的基本规律,这种思想也非常适合解决一些大型的业务问题,例如让你做一航母,你应该想到的是这个航母的构成,而不是构建这个航母的基本步骤 。让你去做一个电商项目,你应该想到的是这个项目中系统服务对象的构成,例如商品服务,推荐服务,订单服务,库存服务,配送服务,优惠券服务,知识问答服务等等,这就是面向对象编程 。
JDK 和 JRE 有什么区别?JDK: Java Development Kit 的简称,Java开发工具包,提供了Java的开发环境和运行环境 。
JRE: Java Runtime Environment的简称,Java运行环境,为Java的运行提供了所需环境 。
实际上我们在安装JDK时,它会包含一个Jre,同时还包含了编译Java源码和运行Java 类文件的一个开发、调试和分析的工具 。简单点说,假如你需要运行Java程序,只需要安装Jre就可以了,如何你需要编写,调试Java程序,需要安装JDK 。
如何理解Java中封装,继承、多态特性?封装特性:
个人认为封装特性应该是面向对象编程中最难的一个特性 。大到一个系统的构成,比方说这个系统应该有多少个服务,每个服务应该有哪些模块,每个模块应该有哪些对象,这里其实强调的是一个系统边界划分的问题,当然也是封装问题 。还有,小到一个对象应该有哪些属性,哪些方法,这些对象,属性和方法分别使用什么样的访问修饰符进行定义,它们的可见范围是怎样的,这都是封装特性 。生活中大到国家有多个省份,每个省份有多少个地市,每个地市有多少个区县 。小到一个公司有多少个事业部,每个事业部有哪些成员,每个成员都有什么特征(个头高,帅气,漂亮),什么行为(做事,说话,跳舞,唱歌),这也都是封装 。在Java编程过程中,我们知道MyBatis实现了对JDBC操作数据库这个过程的封装,Spring封装了对象的创建,依赖注入的过程,SpringBoot封装了很多的基础配置,实现了开箱即用的特性,Spring Cloud 封装了一种服务治理的思想,例如如何实现服务注册,发现,调用,配置等 。当然程序中的每个对象也都有自己的特性和行为,例如线程对象封装了执行任务的的特性和方法,IO对象封装了读写内存,磁盘,网络数据方式等等,这些都是封装特性 。
继承特性:
Java中的继承特性是程序中实现代码的复用的一种方式,也是它最大的优势,实际编程中我们通常将共性写到父类中,特性写到子类中,当然子类也可以进行自己的扩展 。这种继承关系可以看成是一种is a的关系,例如class Circle extends Shape{}表示圆形(Circle)是一个图形(Shape),class Dog extends Animal{}表示狗(Dog)是一个动物(Animal) 。在Java中类的继承可以是多层,但不能是多重,即一个子类不能有多个直接的父类,子类可以继承父类所有属性和方法,但私有属性和方法不能直接访问 。子类可以基于业务重写父类可见方法,以实现功能拓展 。我们也可以在子类构造方法内部通过super(参数列表)调用父类构造方法和super.xxx的方式调用父类的成员 。在实际应用中继承关系是一种强耦合关系,继承关系层次最好不要多于三层,否则可能难于维护 。


推荐阅读