Java基础面试题汇总

☆* o(≧▽≦)o *☆嗨~我是小奥🍹
📄📄📄个人博客:小奥的博客
📙📙📙Github:传送门
📅📅📅面经分享(牛客主页):传送门
🍹文章作者技术和水平有限,如果文中出现错误,希望大家多多指正!
📜 如果觉得内容还不错,欢迎点赞收藏关注哟! ❤️

Java基础面试题汇总

概述

说一下对Java的了解

(1)首先,Java是由sun公司开发一种面向对象的编程语言,Java语言的作为面向对象的三大特征是封装、继承、多态。

(2)封装,就是将对象的属性和行为特征包装到类中,把实现的细节隐藏起来,通过对外部提供的公共方法来展示类对外提供的功能。

(3)继承,简单来说就是对原有类的拓展,新类的定义可以增加新的数据或者新的功能,也可以使用父类的功能,但是不能选择性的继承父类,通过继承,可以快速创建新的类,提高代码的复用性。

(4)多态,表示为一个对象具有多种状态,具体表现为父类的引用指向了子类的实例。

(5)Java的基本特点有面向对象 、平台无关性 、简单性、解释执行、多线程、分布式、高性能、安全性等。

JVM、JRE、JDK

(1)JDK是Java开发工具包,是功能齐全的SDK,它包含JRE,提供了编译、运行Java程序所需要的各种工具(编译工具javac、打包工具jar)和资源,是整个Java的核心。

(2)JRE是Java运行时环境,它是运行已经编译的Java程序所需要的所有内容的集合,包含JVM以及Java核心类库。

(3)JVM是Java虚拟机,是整个Java实现跨平台的核心部分,负责解释执行字节码文件,是可运行Java字节码文件的虚拟计算机。

JDK包括JRE,JRE包含JVM。

为什么Java代码可以实现一次编译,到处运行

Java虚拟机(JVM)是Java跨平台的关键。

在程序运行之前,Java源代码(.java)需要经过编译器编译字节码(.class),在程序运行时,JVM负责将字节码翻译成特定机器下的机器码并运行,也就是说,只要在不同的平台上安装对应的JVM,就可以运行字节码文件。

Java源代码能在不同的平台上运行,它不需要做出任何改变,并且只需要编译一次。而编译好的字节码,是通过JVM实现跨平台的,JVM是与平台相关的软件,它能将统一的字节码翻译成该平台的机器码。

注意:

  • 编译的结果是产生字节码,而不是机器码。字节码不能直接运行,必须要通过JVM翻译成机器码才能运行。
  • 跨平台的是Java程序,而不是JVM,JVM是用c/c++开发的软件,不同平台下需要安装不同的版本。

什么是字节码?使用字节码的好处是什么?

在Java中,JVM可以理解的代码就叫做字节码(即扩展名为.class文件),它不面向任何特定的处理器,只面向虚拟机。

字节码是一种中间状态的二进制代码,是由源码编译过来的,可读性没有源码高,而且cpu也不能直接读取字节码,在Java中,字节码需要经过JVM虚拟机转译成机器码之后,cpu才能够读取并运行。

好处:Java语言通过字节码的方式,在一定程序上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点,而且字节码并不转对一种特定的机器,因此,Java程序无须重新编译就可以在不同平台运行。

注:机器码就是cpu能够直接读取并且运行的代码,用二进制编码表示,也叫做机器指令码。

为什么说Java语言 “编译与解释并存”

(1)编译型:编译型语言会通过编译器将源代码一次性翻译成可被平台执行的机器码。编译语言的执行速度比较快,开发效率比较低。常见的编译型语言有c、c++、go

(2)解释型:解释型语言会通过解释器一句一句的将代码解释为机器码后再执行。解释型语言开发效率比较快,执行速度比较慢。常见的解释型语言有python、JavaScript

(3)因为Java语言既有编译型语言的特征,也具有解释型语言的特征。因为Java程序要先经过编译,后解释两个步骤,由Java编写的程序需要先经过编译步骤,生成字节码(.class)文件,这种字节码必须由Java解释器来解释执行。

对面向对象和面向过程的理解

(1)面向对象

面向对象就是将现实问题构建关系,然后抽象成类,给类定义属性和方法后,再将类实例化成实例,通过访问实例的属性和调用方法来解决问题。

(2)面向过程

面向过程就是一种以过程为中心的编程思想。面向过程是具体化的,把问题分解成一个个步骤,每个步骤用函数实现,需要一步一步调用解决。

(3)区别

两者主要区别在于解决问题的方式不同:

  • 面向过程把解决问题的过程拆分成一个个方法,通过一个个方法的执行解决问题。
  • 面向对象会先抽象出对象,然后用对象执行方法的方式解决。

(4)优缺点

面向对象:

  • 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态的特性,可以设计出更加低耦合的系统,使系统更加灵活,更加易于维护。
  • 缺点:性能比面向过程差。

面向过程:

  • 优点:性能比面向对象高,因为类的调用需要实例化,性能开销比较大。
  • 缺点:没有面向对象易维护、易复用、易扩展。

面向对象的三大特征

封装

封装,就是将对象的属性和行为特征包装到类中,把实现的细节隐藏起来,通过对外部提供的公共方法来展示类对外提供的功能。Java中实现封装的关键字是private、protected和public。

封装的好处:

(1)封装提高了代码的可维护性和可重用性,因为内部实现可以随时更改而不会影响外部调用者。

(2)封装可以保护对象的状态,防止外部非法访问和修改对象的状态。

(3)封装可以控制对象的访问级别,通过公共接口来控制对象的访问和修改,实现了数据的隐藏和保护。

继承

继承,简单来说就是对原有类的拓展,一个类可以派生出一个或者多个子类,子类继承父类的属性和方法,并且可以增加自己的属性和方法,通过继承,可以快速创建新的类,提高代码的复用性。Java中实现继承的关键字是extends。

继承的好处:

(1)继承可以提高代码的可重用性和可维护性,减少重复的代码。

(2)继承可以实现类之间的层次关系,提高代码的抽象程度和灵活性.

(3)子类可以继承父类的属性和方法,同时也可以根据需要增加自己的属性和方法。

多态

多态,表示为一个对象具有多种状态,即一个对象在不同的情况下会有不同的体现。多态通过继承和接口实现的,子类可以重写父类的方法,从而使得同一个方法在不同的对象上表现出不同的行为。

多态的好处:

(1)多态可以提高代码的可扩展性,不需要修改原有的代码就可以添加新的子类。

(2)多态可以让程序编写更加灵活,由于多态的存储,可以编写适用于多个对象的代码,从而提高了代码的灵活性和可重用性。

Java和C++的区别

相同:Java和C++都是面向对象的语言,都支持封装、继承、多态。

不同:

  • Java不提供指针来直接访问内存,程序内存更加安全
  • Java的类只能是单继承的,C++支持多重继承;虽然Java的类不可以多继承,但是接口可以多继承
  • Java有自动内存管理垃圾回收机制(GC),不需要程序员手动释放无用内存
  • C++同时支持方法重载和操作符重载,但是Java只支持方法重载

项目中哪里体现了面向对象的特点

(1)**对象的封装:**将店铺、服务等核心模型封装成一个对象,通过对外提供的方法实现信息的隐藏和数据保护。

(2)**继承和多态:**使用继承和多态来减少重复代码,实现代码的可维护性和可扩展性。比如视频项目中电影和电视剧可以继承共同的一个父类,实现共同的属性和方法。

(3)**接口定义:**为了使不同对象之间更好的协同工作,我们定义了接口,实现不同对象之间的解耦,例如,定义视频接口来规范视频的所有操作。

(4)**多层架构:**采用多层架构的设计模式,将应用程序分为表现层、业务逻辑层和数据访问层,以达到高内聚低耦合的目的。

数据类型

介绍一下Java的数据类型

Java的数据类型包括基本数据类型和引用数据类型。

(1)基本数据类型

基本数据类型有8个,可以分为4个小类。分别是整数类型(byte/short/int/long)、浮点类型(float/double)、字符类型(char)、布尔类型(boolean)。

  • 6 种数字类型:
    • 4 种整数型:byteshortintlong
    • 2 种浮点型:floatdouble
  • 1 种字符类型:char
  • 1 种布尔型:boolean

这 8 种基本数据类型的默认值以及所占空间的大小如下:

基本类型 位数 字节 默认值 取值范围
byte 8 1 0 -128 ~ 127
short 16 2 0 -32768(-215) ~ 32767(215 - 1)
int 32 4 0 -2147483648 ~ 2147483647
long 64 8 0L -9223372036854775808(-263) ~ 9223372036854775807(263 -1)
char 16 2 ‘u0000’ 0 ~ 65535(216 - 1)
float 32 4 0f 1.4E-45 ~ 3.4028235E38
double 64 8 0d 4.9E-324 ~ 1.7976931348623157E308
boolean 1 false true、false

byteshortintlong能表示的最大正数都减 1 了。这是为什么呢?这是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值