Java面试指南:Java基础介绍

这是《Java面试指南》系列的第1篇,本篇主要是介绍Java的一些基础内容:

1、Java语言的起源

2、Java EE、Java SE、Java ME介绍

3、Java语言的特点

4、Java和C++的区别和联系?

5、面向对象和面向过程的比较

6、Java面向对象的三大特性:封装、继承、多态

7、Java如何做到“一次编译,到处执行”?

8、JVM、JRE、JDK的区别和联系是什么?

01、Java语言的起源

这Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名,Java的标识也正是一杯正冒着热气的咖啡。

1990年代初,Sun公司的詹姆斯·高斯林(Java之父)等人开发了Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言,应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。

随着之后互联网的发展,Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,由于Oak已经被其他公司注册了,Sun公司于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。2009年,Sun公司由于经营问题,以74亿美元的价格卖身给了Oracle,Java语言也一起归属了Oracle。


02、Java EE、Java SE、Java ME介绍

随着Java的发展,Sun公司给Java分成了3个版本:

1、Java SE (Java Standard Edition) 标准版

2、Java EE (Java Enterprise Edition) 企业版

3、Java ME(Java Micro Edition) 微型版

三者的关系如下:

Java SE是标准版,主要用于桌面应用软件的编程,包含了Java的核心类库。Java EE是企业版,在Java SE的基础上加上了大量的API和库,主要用于分布式的网站的开发。Java EE和Java SE使用相同的虚拟机。

Java ME和Java SE不同,它是一个针对嵌入式设备的“瘦身版”,Java SE的标准库无法在Java ME上使用,Java ME的虚拟机也是“瘦身版”。在智能手机还未普及的时候,功能手机上有很多Java小游戏,这个就是使用Java ME开发。Java的初衷就是做这一块的开发。注意:Android手机有自己的开发组件,不使用J2ME进行开发。


03、Java语言的特点

1、面向对象开发

2、代码可移植:一次编译,到处执行

3、支持多线程

4、支持网络编程

关于这些特点的特性,我们会在随后的篇幅中逐步展开描述。


04、Java和C++的区别和联系?

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

2、Java不提供指针操作,更安全;C++支持指针,更灵活

3、Java中只支持单继承,C++支持多重集成

4、Java支持自动内存管理,C++需要主动释放无用内存

5、Java代码在编译成class文件后,可以在各个平台的JVM里运行。C++代码在每个平台里都需要编译后才能运行。


05、面向对象和面向过程的比较

1、面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;

2、面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

面向过程

优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源,比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。

缺点:没有面向对象易维护、易复用、易扩展

面向对象

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

缺点:性能比面向过程低


06、Java面向对象的三大特性:封装、继承、多态

封装是一个划分抽象的结构和行为的过程,它将抽象到的数据组合到一块,形成一个整体,将该隐藏的数据进行保护,只对外暴露这些数据的访问的方法。

封装代码有两个好处:

1、代码使用者无需考虑实现细节就能直接使用它,别人不能随便修改内部结构

2、在外部接口保持不变的情况下,自己可以修改内部实现

继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承我们能够非常方便地复用以前的代码。

多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。

因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。多态分为编译时多态(方法的重载)和运行时多态(多态)。


07、Java如何做到“一次编译,到处执行”?

“一次编译,到处执行”,是指应用程序生成的二进制文件后,可以直接在其他的支持 Java 的平台上运行,换句话说叫二进制兼容。与之对应的是源代码兼容,也就是在目标机器上重新编译源代码,生成新的二进制文件,才可以运行,换句话说就是“编译多次,到处运行”。

Java实现“一次编译,到处执行”是通过JVM和字节码技术来实现的。


08、JVM、JRE、JDK的区别和联系是什么?

三者之间存在包含关系:

JRE = JVM + 核心类库

JDK = JRE + Java开发工具(javac/java等)

JVM是Java Virtual Machine,即Java虚拟机。

我们编写的Java代码是无法直接在计算机上执行的,我们需要将Java代码编译成字节码(class文件),运行在JVM上。它针对于不同的系统有特定的实现,可以保证使用相同的字节码都可以运行出相同的结果,这样就保证了Java“一次编译,到处执行”的跨平台特性。

JRE是Java Runtime Environment,即Java运行环境。

JRE包含JVM标准实现及Java核心类库。光有JVM,还不能完成class的执行,因为在解释class的时候,JVM需要调用对应的核心类库,才能保证Java运行。

JDK是Java Development Kit,即Java开发工具包。

JDK包括了Java运行环境和一堆Java开发工具(javac/java/jdb等)。有了JDK,我们才能开发和编译程序。



结尾

整个Java基础相关知识点如下图,我们会在后续的文章中逐步展开。



喜欢的朋友记得点赞、收藏、关注哦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/895731.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GitLab 老旧版本如何升级?

极狐GitLab 正式对外推出 GitLab 专业升级服务 https://dl.gitlab.cn/cm33bsfv! 专业的技术人员为您的 GitLab 老旧版本实例进行专业升级!服务详情可以在官网查看详细解读! 那些因为老旧版本而被攻击的例子 话不多说,直接上图&a…

QT实现校园导航

导航是地图类项目实战中经常会遇到了。看上去貌似没头绪&#xff0c;其实是有模板遵循的。我们直接根据图看代码。 //MainWidget.h#ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include "mapwidget.h" #include <QToolButton> #in…

比较相同机器上 redis和mysql分别单独承载的 最大连接数量

在相同的机器上&#xff0c;Redis 和 MySQL 的最大连接数量会受到硬件配置&#xff08;如 CPU、内存、网络等&#xff09;、配置参数和应用场景的影响。以下是对 Redis 和 MySQL 在单机环境下最大连接数的比较&#xff1a; Redis 最大连接数量 默认配置&#xff1a; Redis 默…

【动手学深度学习】7.3 网络中的网络(NiN)(个人向笔记)

LeNet&#xff0c;AlexNet和VGG都有一个共同的设计模型&#xff1a;通过一系列卷积层和汇聚层来提取空间结构特征&#xff0c;然后通过全连接层对特征的表征进行处理AlexNet和VGG对LeNet的改进主要是在于如何扩大和加深这两个模块网络中的网络(NIN)提出了&#xff1a;在每个像素…

视频云存储/音视频流媒体视频平台EasyCVR视频汇聚平台在欧拉系统中启动失败是什么原因?

视频监控/视频集中存储/磁盘阵列EasyCVR视频汇聚平台具备强大的拓展性和灵活性&#xff0c;支持多种视频流的外部分发&#xff0c;如RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、WebRTC、fmp4等&#xff0c;这为其在各种复杂环境下的部署提供了便利。 安防监控EasyCVR视频汇聚平…

【含开题报告+文档+PPT+源码】贫困儿童一对一扶贫帮扶系统设计与实现

开题报告 根据《中华人民共和国慈善法》第五十八条规定&#xff0c;慈善组织确定慈善受益人&#xff0c;应当坚持公开、公平、公正的原则&#xff0c;不得指定慈善组织管理人员的利害关系人作为受益人[2]。以上所列举的平台基本没有做到公开、公平、公正的原则&#xff0c;例如…

OpenAI Canvas用户反馈:并不如外界传言般“炸裂”,更不是“AGI的终极交互形态” | LeetTalk Daily...

“LeetTalk Daily”&#xff0c;每日科技前沿&#xff0c;由LeetTools AI精心筛选&#xff0c;为您带来最新鲜、最具洞察力的科技新闻。 Canvas作为一个独立的界面&#xff0c;通过与ChatGPT的结合来提升用户的协作能力和创作效率。尽管用户对其独立性与现有工具的整合存在不同…

大模型常见算子定义

本文将汇总大模型常用的算子定义&#xff0c;方便快速根据定义公式评估其计算量。 LayerNorm 这是在BERT、GPT等模型中广泛使用的LayerNorm&#xff1a; RMSNorm RMSNorm(root mean square)发现LayerNorm的中心偏移没什么用(减去均值等操作)。将其去掉之后&#xff0c;效果几乎…

如何将LiDAR坐标系下的3D点投影到相机2D图像上

将激光雷达点云投影到相机图像上做数据层的前融合&#xff0c;或者把激光雷达坐标系下标注的物体点云的3d bbox投影到相机图像上画出来&#xff0c;都需要做点云3D点坐标到图像像素坐标的转换计算&#xff0c;也就是LiDAR 3D坐标转像素坐标。 看了网上一些文章都存在有错误或者…

【Maven】一篇带你了解Maven项目管理工具

目录 项目管理工具Maven初识Maven什么是Maven为什么使用MavenMaven功能什么是项目构建什么是依赖管理Maven应用场景Maven项目结构Maven特点Maven模型 Maven安装安装准备Maven安装目录分析环境变量配置 创建Maven项目通过IDEA创建手动创建手动引入依赖 配置Maven仓库Maven仓库概…

工业物联网关-TCP透传

TCP透传功能提供类似于DTU(Data Transmit Unit)的功能&#xff0c;用户在网络端使用TCP协议连接网关&#xff0c;与串口通道绑定&#xff0c;建立起TCP与串口的通道&#xff0c;网关相当于一个中转点。 菜单选择"数据上行-tcp透传"&#xff0c;查看当前透传通道列表&…

《知道做到》

整体看内容的信息密度较低。绿灯思维、积极心态、反复练习值得借鉴。 引言 行动是老子&#xff0c;知识是儿子&#xff0c;创造是孙子&#xff01;行是知之始&#xff0c;知是行之成。 前言 工作中最让你失望的事情是什么&#xff1f; 一个人行为的改变总是先从内心想法的转…

【设计模式系列】装饰器模式

目录 一、什么是装饰器模式 二、装饰器模式中的角色 三、装饰器模式的典型应用场景 四、装饰器模式在BufferedReader中的应用 一、什么是装饰器模式 装饰器模式是一种结构型设计模式&#xff0c;用于在不修改对象自身的基础上&#xff0c;通过创建一个或多个装饰类来给对象…

TrickMo 安卓银行木马新变种利用虚假锁屏窃取密码

近期&#xff0c;研究人员在野外发现了 TrickMo Android 银行木马的 40 个新变种&#xff0c;它们与 16 个下载器和 22 个不同的命令和控制&#xff08;C2&#xff09;基础设施相关联&#xff0c;具有旨在窃取 Android 密码的新功能。 Zimperium 和 Cleafy 均报道了此消息。 …

【Router】路由器中NAT、NAPT、NPT是什么?

参考链接 NAT vs. NAPT: What’s the Difference? IPv6 Network Prefix Translation (NPt) | pfSense Documentation (netgate.com) 趣谈NAT/NAPT的原理&#xff0c;这篇不可不读&#xff01; - 知乎 (zhihu.com) NAT (Network Address Translation) NAT说明 NAT&#x…

c++应用网络编程之十一Linux下的epoll模式基础

一、epoll模式 在前面分析了select和poll两种IO多路复用的模式&#xff0c;但总体给人的感觉有一种力不从心的感觉。尤其是刚刚接触底层网络开发的程序员&#xff0c;被很多双十一千万并发&#xff0c;游戏百万并发等等已经给唬的一楞一楞的。一听说只支持一两千个并发&#x…

【Linux】Linux进程地址空间

1.程序地址空间分配回顾 在前⾯C语⾔以及C部分介绍过⼆者的内存分配如下图所示&#xff1a; 全局变量区和未初始化全局变量区也被称为数据区&#xff0c;数据区中除了有全局变 量&#xff0c;还有静态变量和常量 使⽤下⾯的代码演示不同的内容所处的地址&#xff1a; #includ…

Element-ui官方示例(Popover 弹出框)

Element-ui官方示例&#xff08;Popover 弹出框&#xff09;&#xff0c;好用的弹出框。 使用 vue-cli3 我们为新版的 vue-cli 准备了相应的​Element 插件​&#xff0c;你可以用它们快速地搭建一个基于 Element 的项目。 使用 Starter Kit 我们提供了通用的项目模版&#…

深入探讨C++多线程性能优化

深入探讨C多线程性能优化 在现代软件开发中&#xff0c;多线程编程已成为提升应用程序性能和响应速度的关键技术之一。尤其在C领域&#xff0c;多线程编程不仅能充分利用多核处理器的优势&#xff0c;还能显著提高计算密集型任务的效率。然而&#xff0c;多线程编程也带来了诸…

Redis应用高频面试题

Redis 作为一个高性能的分布式缓存系统,广泛应用于后端开发中,因此在后端研发面试中,关于 Redis 的问题十分常见。 本文整理了30个常见的 Redis 面试题目,涵盖了 Redis 的源码、数据结构、原理、集群模式等方面的知识,并附上简要的回答,帮助大家更好地准备相关的面试。 …