【Java】Chapter 0——进入Java的世界
Chapter 0:进入Java的世界
序言
初知Java,认为是与C++异曲同工之妙的一款面向对象语言,仅此而已。后来听说其在世界范围内的名声,能与C、C++等众多语言齐头并进,作为世界上最常用的语言之一,想必肯定是有其独特之处,以及受众多程序员青睐的点。
在阅读了一些书籍以及面临学校的Java课程开设之后,对其的看法大有改观。它依旧还是一款面向对象的语言,但是又不那么常规;它有着千万种变化以及用不尽的库,等待人细细品味;我一直认为编程语言是一种艺术,那么Java也会是其中的一大艺术流派之集成。
编程语言的目标是让你写出一个程序并且让其能够在编译器下运行,并且输出到终端——Java对于这一过程的适配堪称非常优秀。
我们去探寻Java的历史,你会发现它的更新是呈指数型增长的;由于它实际上是借鉴过C++的前人之壮举,所以后期发展不说如履平地,但是起码起了一个好头——这才导致它发展愈来愈快愈来愈好。
- Java发展史(关于历史,可看可不看,它仅仅是作为你拓展Java知识面的一个来源):
- 梦开始的地方:Java最开始只是Sun微系统(Sun MicroSystems)公司在1990年12月开始研究的一个内部项目。Sun微系统公司的一个叫做帕特里克·诺顿的工程师被公司自己开发的C++和C语言编译器搞得焦头烂额,因为其中的API极其难用。帕特里克决定改用NeXT,同时他也获得了研究公司的一个叫做**“Stealth计划”**的项目的机会。
- C++的缺陷引发的思考:项目成员发现C++太复杂以至很多开发者经常错误使用。他们发现C++缺少垃圾回收系统,还有可移植的安全性、分布程序设计、和多线程功能。最后,他们想要一种易于移植到各种设备上的平台。
- Java的初命名:最初,高斯林试图修改和扩展C++的功能,他自己称这种新语言为C++ -- [来源请求],但是后来他放弃了。他将要创造出一种全新的语言,被他命名为“Oak”(橡树),以他的办公室外的橡树命名。
- Java名字的诞生:由于商标搜索显示Oak已被一家显卡制造商注册。于是同年,Oak被改名为Java。当使用十六进制编辑器打开由Java源代码编译出的二进制文件(.class文件)的话,最前面的32位将显示为CA FE BA BE,即词组“CAFE BABE”(咖啡屋宝贝)。
- 至于 “Java” 这个名称到底出自谁的灵感 —— 由于留给 OAK 改名的时间非常紧迫,而且 OAK 即将发布新版本,在这样仓促的状态中,没人记得 Java 这个名称是谁提出来的。当时众说纷纭,有说是因为现场有人在喝名为Java的咖啡,也有人说是一名成员想起自己的爪哇岛上喝过Java咖啡,但是并没有很确切的答案。不过,作为一名咖啡爱好者来说,我很喜欢Java这个名字,同时也一直想找个机会品尝一下这名为Java的咖啡到底味道如何,或许我喝拿铁(Latte),也可以创造出一种叫做Latte的编程语言(bushi
自1995月23日Java诞生以来,已有将近30年时间。在这期间,Java从第一个JDK——JDK1.0进化到了如今的Java SE 21,历经数十个版本的更新,Java正在不断改进技术以及对计算机技术的各种匹配和延申。Java是许多软件开发人员用于编写涉及科学计算和数学运算的应用程序的选择之一。这些程序通常被认为是快速和安全的,具有更高的便携性和低维护性。
在这个编程语言横向发展的阶段,像C++、Java这类语言依旧处于独占鳌头的地位——这也说明了它们的重要性,毕竟现代高级语言也或多或少有借鉴以前的高级语言。没有一种编程语言是完美的,或者是不完美也是它们的一部分。就像C++受人诟病的不具备垃圾回收系统,Java有时也会由于其语言特性将简单问题复杂化。这都是独属于它们的属性,而众多优秀的项目、优雅的程序也是基于这些从而写出的。
在接下来的时光,我会详细介绍Java的各类知识,探索其语言乐趣。如何写出第一个“Hello World”?以及如何使用Java写出专属自己的网站项目——笔者也在学习之中,希望各位能同我一起在Java学习感受编程的美好~ (ps:如有疏漏或者错误的点,敬请指出,期待斧正!)
在进入Java世界之前,我们有四看,来探讨其编程思想以及对于深入了解有一个好的开头,分为以下四个“LOOK”:
一瞥:Java中重要的面向对象思想
面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的编程典范,同时也是一种程序开发的抽象方针。“面向对象程序设计语言”的核心之一就是开发者在设计软件的时候可以使用自定义的类型和关联操作。代码和数据的实际集合体叫做“对象”。一个对象可以想象成绑定了很多“行为(代码)”和“状态(数据)”的物体。
或许你听说过类(Class)这个概念,在面向对象程序设计中,类是创建对象的蓝图,也是整个OOP最基本的结构之一;对象指的是类的实例,
二察:Java中的核心概念以及重要组成部分
什么是方法、类、实例变量、源文件、为什么看起来和其他的语言有不同但又类似的结构?
三对:Java中“似曾相识”的事物
Java 和 C/C++同为编程语言,Java和C++更是像师兄弟,共享着许多似曾相识的语法。然而虽然共享了很多相似之处,但它们之间也有显著的不同,否则为什么不直接叫Java为C--呢?(当初设计时确实有这个想法,但咱就是要创造一个新的编程语言!所以当然会有不同之处!)这是异同点,有些是弥补了C/C++的不足,有些又是它的特性,或好或坏,总归是属于Java的,也是独一无二的。
Familiar:
-
基本语法相似:
- Java 和 C/C++ 的基本语法非常相似,例如变量声明、循环(如
for,while), 条件语句(如if,switch)等。很多初学者会发现学习 Java 的语法相对容易,尤其如果有 C 或 C++ 的背景;相反过来,如果学习过Java之后再去学习这两个语言也会有比较好的学习感受。 - 相同的控制结构:
if-else,for,while,do-while等控制流在这三者中几乎一致。
- Java 和 C/C++ 的基本语法非常相似,例如变量声明、循环(如
-
面向对象编程:
- C++ 和 Java 都是面向对象编程(OOP)语言,支持类、对象、继承、多态等概念。尽管 C++ 支持多重继承而 Java 不支持,但二者都提供了强大的面向对象特性。
-
数据类型:
- Java 和 C/C++ 都有相似的基本数据类型,如
int,float,double,char等。
- Java 和 C/C++ 都有相似的基本数据类型,如
-
函数/方法调用方式:
- 三者都使用相似的函数调用机制,参数通过值传递,但 Java 不支持像 C++ 中的引用传递。
Different:
-
平台独立性:
- Java 最大的区别在于它的平台独立性。Java 程序通过编译生成字节码,然后由 JVM(Java 虚拟机)执行,因此它可以在不同操作系统上运行,这个特点使得它可以在各个平台如鱼得水,无需有过多的编译器桎梏。C 和 C++ 是编译型语言,生成的可执行文件依赖于具体的操作系统和硬件。
-
内存管理:
- Java 使用自动内存管理(垃圾回收,Garbage Collection),开发者无需手动管理内存。而在 C 和 C++ 中,开发者需要手动管理内存的分配和释放(通过
malloc/free在 C 中,或new/delete在 C++ 中)——这也是Java创立者当初就想要解决的C++诟病之一。这意味着在 Java 中,常见的内存泄漏和野指针问题较少见。
- Java 使用自动内存管理(垃圾回收,Garbage Collection),开发者无需手动管理内存。而在 C 和 C++ 中,开发者需要手动管理内存的分配和释放(通过
-
指针:
- Java 中没有显式的指针概念,而 C 和 C++ 使用指针来直接操作内存。在 Java 中,所有对象都是通过引用传递的,引用本质上类似于指针,但开发者不能直接操纵它们的地址,这有时可以省很多事,但有时又可能是个缺点。
-
多继承:
- C++ 支持多继承(一个类可以继承多个基类),但这可能会导致复杂的问题(如菱形继承问题)。Java 通过接口(interface)来提供类似多继承的功能,避免了多继承的复杂性。
-
结构和联合:
- C 和 C++ 中有
struct(结构体)和union(共用体),这些用于定义自定义的数据结构。而**在 Java 中没有这类结构,所有数据类型都必须属于某个类。**如果你想要将这两者理解为类似的概念,也不是不行。
- C 和 C++ 中有
-
模板 vs 泛型:
- C++ 支持模板(templates),允许创建通用的函数和类。Java 引入了泛型(Generics),实现类似的功能,但其实现方式不同。Java 的泛型是通过类型擦除实现的,即在运行时,泛型信息被移除,而 C++ 的模板是在编译时展开的。
-
指令和操作:
- Java 是一种完全的面向对象语言,所有的代码都必须写在类中,而 C++ 允许你写不属于任何类的全局函数和变量。C 中则没有面向对象的概念。
-
异常处理:
- Java 有非常完善的异常处理机制,每个异常都是
Throwable类的一个对象。C++ 也支持异常处理,但不像 Java 那样强制使用,C 则完全没有异常处理机制。
- Java 有非常完善的异常处理机制,每个异常都是
-
编译与执行:
- C 和 C++ 代码通过编译器编译为机器码(与平台紧密相关),执行时无需依赖运行时环境。
- Java 则通过编译器先将代码编译为字节码,然后在 JVM 上运行,字节码与平台无关,依赖 JVM 的存在来解释执行。
- 注:这一点同第一点来一起理解,可以看出JVM的使用有时也会导致产生一些问题。
-
性能:
- C 和 C++ 由于直接编译为机器码,通常执行速度更快,而 Java 因为是通过 JVM 解释字节码执行,相对来说速度稍慢。但 Java 的现代 JVM 优化技术(如 JIT 编译)已经大大提高了其执行性能(但还是终究比不过硬件加速的C++)。
Anyway:
抛开它们在实际应用上的异同点来看,Java 更注重安全性、稳定性和跨平台特性,而 C/C++ 则更强调效率和灵活性,尤其在系统编程和底层开发中;所以说各有所长各有所需,编程语言始终只是代码编写者的工具,我们根据特定需求选择合适语言即可。
四望:Java专栏的规划
毫无疑问,专栏的第一篇将会是“如何使用Java写出第一个"Hello World"?”在编程语言学习中,打印可谓是必不可少的初学操作,同时在了解如何打印的同时,你也会对语言的大致语法结构和组成部分有一定的了解。
而后由于笔者学校开展了Java课程,大概率会按照课程的基本设计顺序来进行更新——这只是指顺序,毕竟由浅入深,教材基本是不会出错的;而对于重点、要点、注意以及其他一部分,我会进行规划并在后续的专栏中体现出来。
同时,我会根据Java知识中的多个小知识点进行分类汇总以及分类讲解,从而达到最好的理解效果。
我认为,这个专栏不只是自己笔记的总结和理解,更是对想要了解Java的人的一个初学的宝典——因为我也是初学者。
本专栏参考资料过多,所涉及的资料和代码都会上传至:Javaroastery,读者们有兴趣的可以去查看,觉得有用的还希望可以star一下,感谢各位好homie们的支持!