简单来说,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 面向过程和面向对象
同学们需要记住,Java 是一门面向对象的编程语言,面向过程和面向对象的概念如下:
1.1 从概念角度讲
面向过程是一种以过程为中心的编程思想,简称 POP,强调事件的流程、顺序,如 C 语言。
面向对象是一种以对象为中心的编程思想,简称 OOP,强调事件的角色、主体,如 Java、C#。
1.2 从应用角度讲:
张三下班乘坐公交车到家后,打开电脑,运行英雄联盟开始打游戏。
面向过程角度:
- 回家
- 开电脑
- 打游戏
面向对象角度:
- 对象:张三、公交车、电脑、游戏
- 电脑可以做什么:开机、运行游戏
- 张三可以做什么:乘坐公交车、打开电脑
- …
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 的知识。