【JavaSE专栏1】Java的介绍、特点和历史

news2024/11/16 1:28:05

作者主页:Designer 小郑
作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云课认证讲师,全栈领域优质创作者。热爱技术、专注业务、开放合作、乐于分享,期待你我共同成长!
主打方向:Vue、SpringBoot、微信小程序

Java是一种编程语言,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的“形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种“以对象为导向”的方式。

简单来说,Java 是一门编程语言,用来开发各类应用程序,是后端程序员的开发利器。

就比如这样:

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

JavaSE(Java2 Platform Standard Edition,java平台标准版)

JavaEE(Java 2 Platform,Enterprise Edition,java平台企业版)

JavaME(Java 2 Platform Micro Edition,java平台微型版)

在这里插入图片描述


目录

      • 1 面向过程和面向对象
        • 1.1 从概念角度讲
        • 1.2 从应用角度讲:
        • 1.3 面向过程和面向对象小结
      • 2 编译型和解释型
        • 2.1 编译型
        • 2.2 解释型
      • 3 Java 和 C++ 的区别
        • 3.1 执行性能
        • 3.2 内存安全
        • 3.3 指针功能
        • 3.4 执行方式
        • 3.5 Java 和 C++ 哪个更好
      • 4 编程语言的发展历史
        • 4.1 机器语言
        • 4.2 汇编语言
        • 4.3 高级语言
      • 5 Oracle JDK 和 OpenJDK 的区别
      • 6 Java的历史
      • 7 课时小结


1 面向过程和面向对象

同学们需要记住,Java 是一门面向对象的编程语言,面向过程和面向对象的概念如下:

1.1 从概念角度讲

面向过程是一种以过程为中心的编程思想,简称 POP,强调事件的流程、顺序,如 C 语言。

面向对象是一种以对象为中心的编程思想,简称 OOP,强调事件的角色、主体,如 Java、C#。

1.2 从应用角度讲:

张三下班乘坐公交车到家后,打开电脑,运行英雄联盟开始打游戏。

面向过程角度

  1. 回家
  2. 开电脑
  3. 打游戏

面向对象角度

  1. 对象:张三、公交车、电脑、游戏
  2. 电脑可以做什么:开机、运行游戏
  3. 张三可以做什么:乘坐公交车、打开电脑

1.3 面向过程和面向对象小结

从不同的角度去看待一件事情,就会有不同的分析方案。

面向过程的方案是循序渐进,逐步完成每一件事情,最后全部完成。

面向过程优点:逻辑简单,逐步拆分执行,对简单的事件处理效率高。

面向过程缺点:只关注眼前的事件执行,复杂事件执行效率不高。

面向对象的方案首先定义事件的全部角色对象,列出对象的全部属性和功能,每次使用只需实例化即可,其内部也是面向过程的实现。

面向对象优点:扩展性高、保密性好、可复用、不仅关注眼前实现,也关注未来可能需要实现的业务,支持继承、封装、多态。

面向对象缺点:对于较为简单的业务,处理起来比较繁琐,不利于小白开发者入门。

在这里插入图片描述


2 编译型和解释型

当前用编译型、解释型对编程语言进行分类,其实不太合适了,但还是有必要学习两者的概念和区别。

同学们需要记住,Java 是一门一种半编译,半解释执行的语言,编译和解释的概念如下:

在这里插入图片描述

2.1 编译型

我们编写的Java代码(高级语言)是人类语言,自己能够轻松理解,但是对于计算机硬件(CPU)来说,无法识别且无法执行,计算机只能识别某些特定的二进制指令,所以在程序真正运行之前,必须将源代码转换成二进制指令。

简单来说,编译型需要将高级编程语言,编译为计算机可识别的二进制代码,然后执行

在 Java 中,编译器先将先将其编译成 class文件,也就是字节码,然后将字节码交由 jvm(java虚拟机)解释执行,所以 Java 是一种编译型语言。

特点:每次修改必须重新编译,但执行效率高

2.2 解释型

解释型的语言,将代码一句一句直接运行,不需要像编译语言一样,经过编译器先行编译为机器代码,之后再运行。它不会一次把整个程序翻译出来,而是每翻译一行程序叙述就立刻运行,然后再翻译下一行,再运行,如此不停地进行下去。

这种编程语言需要利用解释器,在运行期,动态将代码逐句解释为机器代码,或是已经预先编译为机器代码的的子程序,之后再运行。

简单来说,解释型语言边解释边执行,更新代码后无需重新编译,但需要依赖解释器

特点:跨平台性好,通过不同的解释器,将相同的源代码解释成不同平台下的机器码。但一边执行一边转换,效率很低。

Java首先由编译器编译成.class类型的文件,这个是java自己类型的文件,然后再通过虚拟机 (JVM)从.class文件中读一行解释执行一行,所以 Java 也是一种解释型语言,具有较好的跨平台性


3 Java 和 C++ 的区别

C++是一种计算机高级程序设计语言,C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计,C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。

简单来说,C++ 执行速度比 Java 块,更偏向于硬件级应用程序,另外还支持游戏开发

C++更接近机器语言,因此其软件运行速度更快且能够直接与计算机内存、磁盘、CPU或者其它设备进行协作。

3.1 执行性能

Java 代码需要通过 JVM 解释才能运行,执行性能一般。

但 C++ 会被编译为机器语言,因此其能够立即运行且速度更快。

3.2 内存安全

Java是一种内存安全型语言,由 JVM 负责内存的管理。

C++则是通过 new 和 delete 语句实现手动的内存管理,比较灵活,但如果不处理内存,容易引起错误,导致程序崩溃。

3.3 指针功能

Java不支持指针,但可以使用值引用的方式进行值传递。

C++ 支持指针,允许直接在内存空间中进行值管理。

3.4 执行方式

Java 项目代码通过编译器生成 .class 文件,不能在电脑直接运行,必须通过 JVM 环境解释才能运行,可以实现一处编译,多处运行

而 C++ 通过 IDE 编译链接生成机器语言代码,在特定的编译器生成的特定的代码,只能在特定的操作系统环境下运行,不具备移植性。

3.5 Java 和 C++ 哪个更好

Java 与 C++ 都是程序员的利器,没有哪个更好,只有哪个更合适。

Java 语言更倾向于服务器端的开发,注重 Web 开发和 Android 开发。

C++ 语言更倾向于硬件和游戏的开发。

在这里插入图片描述


4 编程语言的发展历史

4.1 机器语言

机器语言是最底层的计算机语言。在用机器语言编写的程序中,每一条机器指令都是二进制形式的代码,即由一连串的二进制数符0和1组合起来的编码。程序中的每一条指令规定了计算机要完成的一个操作。在指令代码中,一般包括操作码和地址码,其中操作码告诉计算机做何种操作,即“干什么”,地址码则指出被操作的对象存放在什么位置。用机器语言编写的程序,计算机硬件可以直接识别。

由于机器语言程序是由二进制数符0和1组成的系列,所以用它编写的程序直接针对计算机硬件,执行效率高,能充分发挥计算机的速度和性能,这也是机器语言的优点。

但是由于二进制数序列难学、难记、难写、难检查、难调试,编写起来非常繁琐,而且用机器语言编写的程序完全依赖于机器,程序的可移植性差,所以一般不用机器语言编写程序

4.2 汇编语言

人们用一些容易记忆和辨别的有意义的符号来表示机器指令,如用指令助记符表示机器语言指令代码中的操作码,用地址符号表示地址码。这样用一些符号表示机器指令的语言就是汇编语言,也称为符号语言。

汇编语言与机器语言逐一对应,依赖于机器硬件,移植性不好,但执行效率比较高。

针对计算机特定硬件而编制的汇编语言程序,能准确发挥计算机硬件的功能和特长,程序精练而质量高,所以至今仍是一种常用而强有力的软件开发工具

4.3 高级语言

高级语言是一种更接近于自然语言的计算机语言,包括Fortran、Basic、Pascal、Cobol及C语言等。高级语言源程序主要由语句构成,语句是要计算机完成指定任务的命令。高级语言有各自的语法,独立于具体机器,移植性好。

为了使高级语言编写的程序能够在不同的计算机系统上运行,首先必须将程序翻译成运行程序的计算机特有的机器语言。

在高级语言和机器语言之间执行这种翻译任务的程序叫做编译器。

在这里插入图片描述

5 Oracle JDK 和 OpenJDK 的区别

在学习Oracle JDK 和 OpenJDK 的区别之前,首先要了解什么是 JDK

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Oracle JDK 是官方发行的 JDK,每 6 个月发行一次主要版本,经过严格的测试和错误修复而比较稳定,性能更高,但并不是完全开源的,有些功能是收费的。

OpenJDK 可以理解为 JDK 的社区版本,是一个开源的参考模型,不定期更新。

所以大家在学习 Java 时,建议使用 Oracle JDK 17 版本,因为这个版本是免费的长期维护版,无需授权即可使用。

有关 JDK、JRE、JVM 的知识,将在下一节的课时中进行讲解。

在这里插入图片描述

6 Java的历史

由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。Java语言是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由当时任职太阳微系统的詹姆斯·高斯林(James Gosling)等人于1990年代初开发,它最初被命名为Oak。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

你需要了解:

  • Java 于 1995 年推出。
  • Java 最初的名字为 Oak。
  • Java 由 C++ 改造而来,去掉了复杂的指针。

7 课时小结

在本节课时中,我们学习了 Java 的简介、面向对象和面向过程的区别、编译型语言和解释型语言的区别、Java 和 C++ 的区别、编程语言的发展历史、Oracle JDK 和 OpenJDK 的区别和 Java 的历史。在下一节课时中将学习 JDK、JRE 和 JVM 的知识。

在这里插入图片描述

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

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

相关文章

Python ·保险理赔分析:数据分析

介绍 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 在本笔记本中,我们将仔细研究保险索赔,并弄清一些有关血压、BMI、糖尿病、吸烟、年龄和性别等条件如何影响索赔价值的事实。 我们将使用散点图、饼图、直…

IDEA必装插件-Gyro

前言用SpringBootTest运行单测的时候,是不是每运行都需要重新启动Spring容器?大型应用启动一次会浪费大量的时间,导致效率比较低。Gyro插件可以解决你的问题。Gyro介绍它是一个IDEA插件,安装之后,用Gyro Debug运行你的…

一起自学SLAM算法:7.4 基于贝叶斯网络的状态估计

连载文章,长期更新,欢迎关注: 在7.2.4节中,讨论了表示机器人观测与运动之间依赖关系的概率图模型,主要是贝叶斯网络(实际应用在机器人中的是动态贝叶斯网络)和马尔可夫网络(实际应用…

fpga实操训练(lcd字符显示)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 用fpga编写屏幕显示,和c语言编写有很大的不同。用c语言开发,很大程度上是遵循soc ip提供的规范进行编写。而用fpga开发的话,则需要考虑不同信号的时序关系。但是,用fpga开发也有…

c++ 优先级队列priority_queue的使用

c priority_queue是对其他容器元素顺序的调整包装; 堆的原理 1.定义 priority_queue<Type, Container, Functional> q; 其中&#xff0c;Type是数据类型&#xff0c;Container是低层容器&#xff0c;如vector, stack, deque等. Functional是比较函数&#xff1b;默认可…

day25-类加载器反射

1.类加载器 1.1类加载器【理解】 作用 负责将.class文件&#xff08;存储的物理文件&#xff09;加载在到内存中 1.2类加载的过程【理解】 类加载时机 创建类的实例&#xff08;对象&#xff09;调用类的类方法访问类或者接口的类变量&#xff0c;或者为该类变量赋值使用反…

NodeJS 之 HTTP 模块(实现一个基本的 HTTP 服务器)

NodeJS 之 HTTP 模块&#xff08;实现一个基本的 HTTP 服务器&#xff09;参考描述HTTP 模块搭建 HTTP 服务器http.createServer()监听检测服务器端口是否被占用终端Error Code超时处理处理客户端的请求request 事件http.IncomingMessagehttp.ServerResponse中文乱码问题问题解…

Java EE之线程编(进阶版)

这些锁策略能适用于很多中语言&#xff0c;博主是学Java的&#xff0c;所以下面的代码会用Java去写&#xff0c;请大家见谅&#xff0c;但是处理的方法是大差不差的。 一、常见锁和锁策略&#xff1a; (一)、乐观锁和悲观锁 1、何为乐观锁和悲观锁呢&#xff1f; 答&#…

Linux服务器常见运维性能测试(3)CPU测试super_pi、sysbench

Linux服务器常见运维性能测试&#xff08;3&#xff09;CPU测试常见性能测试软件CPU测试&#xff1a;super_pi &#xff08;计算圆周率&#xff09;CPU测试&#xff1a;sysbench&#xff08;CPU功能测试部分&#xff09;下载安装sysbench综合测试功能执行CPU测试最近需要测试一…

Java面试题含答案,最新面试题(1)

Java 中 InvokeDynamic指令是干什么的&#xff1f; JVM字节码指令集一直比较稳定&#xff0c;一直到Java7中才增加了一个InvokeDynamic 指令&#xff0c;这是JAVA为了实现『动态类型语言』支持而做的一种改进&#xff1b;但是在Java7中并没有提供直接生成InvokeDynamic 指令的…

自定义类型:结构体,枚举,联合

目录一、结构体内存对齐二、位段2.1 什么是位段2.2 位段内存分配规则2.3 位段的跨平台问题三、枚举四、联合体4.1 联合类型的定义4.2联合的特点4.3 联合大小的计算4.4 练习一、结构体内存对齐 struct s {char c1;int i;char c2; }; int main() {printf("%d\n", size…

【Hadoop】HDFS体系结构分析

文章目录1. NameNode2. Secondary NameNode3. DataNodeHDFS主要包含NameNode、Secondary NameNode和DataNode三部分&#xff0c;且这三部分在分布式文件系统中分属不同的机器&#xff0c;其中Secondary NameNode不是必须的&#xff0c;在HA架构中Standby NameNode可以替代它。 …

【深度学习】详解 SimCLR

目录 摘要 一、引言 二、方法 2.1 The Contrastive Learning Framework 2.2. Training with Large Batch Size 2.3. Evaluation Protocol 三、用于对比表示学习的数据增广 3.1 Composition of data augmentation operations is crucial for learning good representa…

5-2中央处理器-指令周期的数据流

文章目录一.指令周期二.数据流向1.取指周期2.间址周期3.执行周期4.中断周期三.指令执行方案1.单指令周期2.多指令周期3.流水线方案一.指令周期 指令周期&#xff1a;CPU从主存中每取出并执行一条指令所需的全部时间。 此处&#xff1a;取指周期取指令指令译码 指令周期常用若…

SSM整合(Spring + SpringMVC + MyBatis)

SSM Spring SpringMVC MyBatis 准备数据库 SET FOREIGN_KEY_CHECKS0; DROP TABLE IF EXISTS user; CREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT,username varchar(20) NOT NULL COMMENT 用户名,password varchar(255) NOT NULL COMMENT 密码,real_name varchar(…

Linux常用命令——startx命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) startx 用来启动X Window 补充说明 startx命令用来启动X Window&#xff0c;实际上启动X Window的程序为xinit。 语法 startx(参数)参数 客户端及选项&#xff1a;X客户端及选项&#xff1b;服务器及选项&a…

[LeetCode周赛复盘] 第 329 场周赛20230122

[LeetCode周赛复盘] 第 329 场周赛20230122 一、本周周赛总结二、 [Easy] 6296. 交替数字和1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6297. 根据第 K 场考试的分数排序1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6298. 执行逐位运算使字符串相等1. 题目描述2. 思路…

深入理解 OpenMP 线程同步机制

深入理解 OpenMP 线程同步机制 前言 在本篇文章当中主要给大家介绍 OpenMP 当中线程的同步和互斥机制&#xff0c;在 OpenMP 当中主要有三种不同的线程之间的互斥方式&#xff1a; 使用 critical 子句&#xff0c;使用这个子句主要是用于创建临界区和 OpenMP 提供的运行时库…

连续系统的数字PID控制仿真-1

被控对象为一电机模型传递函数&#xff1a;式中&#xff0c;J 0.0067;B0.10。采用M函数的形式&#xff0c;利用ODE45的方法求解连续对象方程&#xff0c;输入指令信号为yd(k)0.50sin(2*3.14*t)&#xff0c;采用PID控制方法设计控制器&#xff0c;其中kp20.0 ,kd0.50。PID正弦跟…

12个开源的后台管理系统

1. D2admin 开源地址&#xff1a;https://github.com/d2-projects/d2-admin 文档地址&#xff1a;https://d2.pub/zh/doc/d2-admin/ 效果预览&#xff1a;https://d2.pub/d2-admin/preview/#/index 开源协议&#xff1a;MIT 2. vue-element-admin 开源地址&#xff1a;htt…