Java面试指南:Java基础介绍

news2024/11/26 11:41:33

这是《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基础相关知识点如下图,我们会在后续的文章中逐步展开。



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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云计算-----单机LNMP结构WordPress网站

LNMP结构 博客网站 day1 小伙伴们,LNMP结构在第一二阶段浅浅的学习过,这里我们可以离线部署该结构。L指(虚拟机)服务器,nginx(前端代理服务器)mysql数据库,最后基于php建设动态…

AlDente Pro for Mac电脑 充电限制保护工具 安装教程【简单,轻松上手】

Mac分享吧 文章目录 AlDente Pro for Mac 充电限制保护工具 安装完成,软件打开效果一、AlDente Pro for Mac 充电限制保护工具 Mac电脑版——v1.28.41️⃣:下载软件2️⃣:安装软件,将安装包从左侧拖入右侧文件夹中,等…

Halcon实战——基于NCC模板匹配的芯片检测(附源码)

Halcon实战——基于NCC模板匹配的芯片检测(附源码) 关于作者 作者:小白熊 作者简介:精通python、matlab、c#语言,擅长机器学习,深度学习,机器视觉,目标检测,图像分类&am…

Java | Leetcode Java题解之第493题翻转对

题目&#xff1a; 题解&#xff1a; class Solution {public int reversePairs(int[] nums) {Set<Long> allNumbers new TreeSet<Long>();for (int x : nums) {allNumbers.add((long) x);allNumbers.add((long) x * 2);}// 利用哈希表进行离散化Map<Long, Int…

linux 效率化 - 输入法 - fcitx5

安装 Fcitx5 1. 卸载 ibus 框架 由于 ibus 和 fcitx 可能会冲突&#xff0c;先卸载 ibus&#xff08;暂未确认原因&#xff09; sudo apt remove --purge ibus2. 安装 fcitx5 输入法框架 sudo apt update sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk…

深入理解Nest的REQUEST范围和TRANSIENT范围

深入理解Nest的REQUEST范围和TRANSIENT范围 单例模式REQUEST范围控制器的REQUEST范围REQUEST范围的冒泡特性场景 TRANSIENT范围例外场景 总结 单例模式 单例模式是指在整个程序执行期间&#xff0c;程序内的类都会实例化&#xff0c;且与应用程序生命周期直接相关&#xff0c;…

javax.el.PropertyNotFoundException: Property ‘XXX‘ not found on type XXX(类的路径)

捣鼓了半小时的bug 在网上找了好多方案,都没有解决 其中一个佬的解决方案:异常&#xff1a;javax.el.PropertyNotFoundException: Property xxx not found on type java.lang.String-CSDN博客 但是还是没有解决我的问题 最终解决方法,在jsp文件头部导入了类包(第三行我导入…

【Nginx系列】Nginx配置超时时间

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

MySQL日期类型选择建议

我们平时开发中不可避免的就是要存储时间&#xff0c;比如我们要记录操作表中这条记录的时间、记录转账的交易时间、记录出发时间、用户下单时间等等。你会发现时间这个东西与我们开发的联系还是非常紧密的&#xff0c;用的好与不好会给我们的业务甚至功能带来很大的影响。所以…

深入拆解TomcatJetty(二)

深入拆解Tomcat&Jetty&#xff08;二&#xff09; 专栏地址&#xff1a;https://time.geekbang.org/column/intro/100027701 1、Tomcat支持的IO模型和应用层协议 IO模型&#xff1a; NIO&#xff1a;非阻塞 I/O&#xff0c;采用 Java NIO 类库实现。NIO2&#xff1a;异…

Cyber RT 之 Timer Component 实践(apollo 9.0)

实验内容 Component 是 Cyber RT 提供的用来构建功能模块的基础类&#xff0c;Component 有两种类型&#xff0c;分别为 Component 和 TimerComponent。 相较于 Component&#xff0c;TimerComponent 不提供消息融合&#xff0c;也不由消息触发运行&#xff0c;而是由系统定时…

UE5 gameplay学习 蓝图0 level blueprint

首先在左上角这个位置可以创建一个这个蓝图 我理解这个蓝图适合做全局事件规划啥的 在场景选中一个物体&#xff0c;右侧面板拿到他&#xff0c;直接拖入蓝图&#xff0c;就能操作他了 这里获取到了这个物体&#xff0c;在gamebegin的时候把Z加了500 执行播放的时候能看见他从…

Windows API 一 ----起步

目录 1.介绍主函数入口参数。 2. 简单介绍 Windows.h 这个头文件 小结&#xff0c;也聊一聊 1.介绍主函数入口参数。 第一个参数: HINSTANCE 类型的 参数&#xff0c; 称为“实例句柄“&#xff0c;这个参数唯一标志了我们写的这个程序。 第二个参数&#xff1a; HINSTANCE…

poisson过程——随机模拟(Python和R实现)

Python实现 exponential()使用&#xff0c;自动poisson过程实现。 import numpy as np import matplotlib.pyplot as plt# Parameters lambda_rate 5 # rate parameter (events per time unit) T 10 # total time# Generate Poisson process times np.random.exponential(…

k8s系列-Rancher 上操作的k8s容器网络配置总结

Rancher 上操作的k8s容器网络配置总结 要在 Rancher 中配置Spring Boot 应用 ykhd-zhjgyw-xpwfxfjfl 服务&#xff0c;正确的配置方式如下&#xff1a; 1. 应用程序监听端口 在 application.yaml 文件中&#xff0c;配置的应用监听端口是 10001&#xff0c;并且应用的上下文…

Mycat 详细介绍及入门实战,解决数据库性能问题

一、基本原理 1、数据分片 &#xff08;1&#xff09;、水平分片 Mycat 将一个大表的数据按照一定的规则拆分成多个小表&#xff0c;分布在不同的数据库节点上。例如&#xff0c;可以根据某个字段的值进行哈希取模&#xff0c;将数据均匀的分布到不同的节点上。 这样做的好处…

美摄科技云服务解决方案,方案成熟,接入简单

美摄科技作为视频处理领域的先锋&#xff0c;凭借其强大的技术实力和深厚的行业经验&#xff0c;推出了成熟的云服务解决方案&#xff0c;为轻量化视频制作开辟了全新的道路。 一、成熟方案&#xff0c;接入无忧 美摄科技云服务解决方案的最大亮点在于其成熟度和易用性。我们…

RabbitMQ 入门(四)SpringAMQP五种消息类型(Work Queue)

一、WorkQueue(工作消息队列) Work queues&#xff0c;也被称为&#xff08;Task queues&#xff09;&#xff0c;任务模型。简单来说就是让多个消费者绑定到一个队列&#xff0c;共同消费队列中的消息。 当消息处理比较耗时的时候&#xff0c;可能生产消息的速度会远远大于…

react里实现左右拉伸实战

封装组件&#xff1a; 新建一个resizeBox.tsx文件写上代码如下&#xff1a; import React, { ReactNode, useState, useEffect, useRef } from react; import styles from "./resizeBox.less"; interface ResizableBoxProps {/*** 盒子的宽度*/widthNum?: number;…

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

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