Java高频面试题—Java基础

Java高频面试题—Java基础

1. 面向对象可以解释下吗?都有哪些特性?

答:面向对象是一种思想,可以将复杂的问题简单化,让我们从执行者变为指挥者。面向对象的三大特征:封装继承多态

  • 封装:将事务封装成一个类,减少耦合,隐藏细节。保留特定的接口与外界联系,当接口内部发生改变时,不影响外部的调用方。
  • 继承:从一个已知的类中派生出另一个新的类,但新的类拥有已知类的属性和方法,并且可以通过覆盖/重写来增强已知类的能力。
  • 多态:多态的本质就是一个程序中出现多个同名的不同方法,主要通过三种方式体现:
    • 通过子类对父类的覆盖来实现
    • 通过一个类中对方法的重载来实现
    • 通过将子类对象作为父类对象使用来实现

关于封装

封装主要是为了增加程序的可读性,解耦合并隐藏部分实现细节。

关于继承

首先要明确的是Java中只存在单继承,是不允许多继承的。
另外Java中的构造函数是不能被继承的,如果构造函数被私有化(即被private修饰),是不可以被继承的。
具体原因需要我们先理解子类实例化时的执行顺序:
	1.初始化父类的静态成员变量和静态代码块
	2.初始化子类的静态成员变量和静态代码块
	3.初始化父类的普通成员变量和代码块,在执行父类的构造方法
	4.初始化子类的普通成员变量和代码块,在执行子类的构造方法
从这个执行顺序可以看出来,如果父类的构造方法被private修饰后,子类初始化是不可以被执行的,因此被private修饰的构造函数的类是不可以被继承的。
子类是其父类派生产生的,子类有什么特点呢?
	1.子类拥有父类非private的属性和方法
	2.子类可以添加自己的属性和方法,即对父类进行扩展
	3.子类可以重新定义父类的方法,即方法的覆盖/重写

子类可以通过方法的覆盖/重写以及方法的重载来重新定义父类中的方法,那覆盖/重写与重载又有什么区别呢?

覆盖(Override):

覆盖也叫重写,是指父类与子类之间方法的一种关系,子类可以重新声明定义父类中的存在的同名方法,并重写方法体,我们就可以称子类覆盖/重写了父类中的方法,父类中的方法叫做被重写方法,子类中的方法叫做重写的方法。其中子类中重写的方法的方法名返回值类型以及形参列表必须与父类中完全相同,且权限修饰符不小于父类中被重写的方法·。

重载

重载是指在一个类中(包括父类)存在多个同名的不同方法,且这些方法的参数个数、顺序以及类型不同,均可以构成方法的重载。

关于多态

通过方法的覆盖/重写和重载可以实现多态,同时也可以通过将子类对象当做父类对象使用来实现多态。

把不同的子类对象都当做父类对象来看,可以屏蔽不同子类对象之间的差异,写出通用代码,做出通用的编程。

对象的引用型变量具有多态性,因为一个引用型变量可以指向不同形式的对象,即子类的对象作为父类的对象来使用。在这里涉及到了向上转型和向下转型。

向上转型

子类对象转为父类对象

向下转型

父类对象转为子类对象

2. JDK、JRE和JVM的区别与联系有哪些?

答:三者的基本概念如下:

  • JDK(Java Development Kit):Java开发工具包,是Java开发环境核心组件,并且提供编译、调试和运行一个Java程序需要的所有工具。
  • JRE(Java Runtime Environment):Java运行时环境,是JVM的实现,提供了运行Java程序的平台。JRE包括JVM,但是不包括Java编译器/调试器之类的开发工具
  • JVM(Java Virtual Machine):Java虚拟机,当我们运行一个Java程序时,JVM负责将字节码转换为特定的机器代码,JVM提供了内存管理/垃圾回收和安全机制等。

区别与联系

  • JDK是开发工具包,用来开发Java程序,而JRE是Java的运行时环境。
  • JDK和JRE中都包含了JVM。
  • JVM是Java编程的核心,独立于硬件和操作系统,具有平台无关性。而这也是Java一次编译,多出执行的原因。

Java语言的平台无关性是如何实现的?

  • JVM屏蔽了操作系统和底层硬件的差异
  • Java面向JVM编程,先编译成字节码文件,然后交给JVM解释称机器码执行
  • 通过规定基本数据类型的取值范围和行为

Java是编译型语言还是解释性语言?

Java的执行经历了编译和解释的过程,是一种先编译,后解释执行的语言。不可以简单的归到编译型或解释型语言的类别中。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java基础高频面试题包括以下内容: 1. 你是怎么理解面向对象的? 2. String、StringBuilder、StringBuffer的区别是什么? 3. ==与equals的区别是什么? 4. 什么是反射? 5. Java支持多继承吗? 6. 进程和线程的区别是什么? 7. 不考虑数据库的隔离性会发生什么? 8. 数据库的隔离级别有哪些? 9. 面向对象的三个基本特征是什么? 10. 访问修饰符public、private、protected以及不写时的区别是什么? 11. 给出一些代码块,判断是否能正常编译和执行。 12. 给出一些代码块,预测输出结果。 13. 如何用最有效率的方法计算2乘以8? 14. &和&&的区别是什么? 15. String是Java基本数据类型吗? 16. String类可以继承吗? 以上是一些Java基础高频面试题的例子,希望对你有帮助。 #### 引用[.reference_title] - *1* [Java基础高频面试题](https://blog.csdn.net/qsw1364941774/article/details/124499655)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Java高频面试题及答案整理(会持续更新)](https://blog.csdn.net/qq_44867340/article/details/112879620)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【吐血整理】2022年Java 基础高频面试题及答案(收藏)](https://blog.csdn.net/m0_67698950/article/details/126549157)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值