这篇文章很基础,为大家介绍了一些计算机基础和Java背景,让刚接触Java的小白能对它有更深的理解,更方便更快的入门。这是本人写的第一篇博客,如有错误,请指出。
计算机语言发展史及未来方向
为什么担心软件开发人员饱和是多余的?
Java语言介绍
Java语言特性和优势
JDK/JVM/JRE是什么?
Java程序设计环境下载与设置
—
[ ]
计算机已经成为我们这个时代的核心设备,每时每刻都需要它。计算机也不再是大家以 前印象中的台式机、服务器,已经演变成了我们身边随处可见的物体。比如:手机、平板电 脑、笔记本,以及很多人没意识到,但实际上设备内部包含“计算机”的设备。比如:电视 机、微波炉、汽车,甚至小孩玩的智能小机器人等。
可以这么说, 计算机已经成为了人类身体的延伸、大脑的延伸,成为不可或缺的一部分。未来,计算机将真的进入人体、进入大脑,真正成为人体的一部分。比如,在科幻电影《黑客帝国》中,主角被超级针头插在颈部后方,便能使他快速学习,改变大脑神经网络, 几秒就成为功夫高手
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l0MA742p-1656507165875)(G:\博客专用图片\Java新手入门\图片1.jpg)]
计算机是如何工作的?对于普通人来说,这很神秘。让计算机具备“灵魂”,可以按照人的意志运行,甚至某天按照计算机自己的意志运行(如果这一天实现,科幻电影《终结者》 中的场景也会成为人类社会的可能选项),其核心就是“算法”。 “算法就是计算机的灵魂”算法的实现又依赖于“计算机编程语言”。
计算机编程语言的发展,是随着计算机本身硬件发展而发展的。硬件速度越快、体积越 小、成本越低,应用到人类社会的场景就会越多,那么所需要的算法就会越复杂,也就要求计算机编程语言越高级。最初重达几十吨但一秒只能运算 5000 次的 ENIAC(世界上第一台计算机),只能做非常小的应用,比如:某些情况的弹道计算。现在任何一个人的手机运算能力都可以秒杀那个年代地球上所有计算机运算能力的总和。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oYScYgsH-1656507165877)(G:\博客专用图片\Java新手入门\图片2.jpg)]
计算机编程语言的发展历经了从低级到高级发展。发展的核心思想就是“让人更容易编程”
越容易使用的语言,就有越多人使用;越多人使用,就有越多协作;越多协作,就可以创造越复杂的物体;现代社会,一个软件动辄几十人协作、几百人协作、甚至几千人协作也成为可能,这自然就为开发复杂软件提供了“人力基础”。这是一个人类普遍的社会现象, 越容易使用的工具,通过使用数量,通过大量人的协作,彻底改变某个行业甚至人类社会。
计算机语言经历了三代:第一代是机器语言,第二代是汇编语言,第三代是高级语言。
·第一代语言:机器语言(相当于人类的原始阶段)
机器语言由数字组成所有指令。当让你使用数字编程,写几百个数字、甚至几千个数字, 每天面对的是纯数字,我大胆预测:“程序员群体 100%会有精神问题”。
机器语言通常由数字串组成(最终被简化成 01),对于人类来说,机器语言过于繁琐。使用机器语言,人类无法编出复杂的程序。如下为一段典型的机器码:
\1. 0000,0000,000000010000 代 表 LOAD A, 16
\2. 0000,0001,000000000001 代 表 LOAD B, 1
\3. 0001,0001,000000010000 代 表 STORE B, 16
·第二代语言:汇编语言(相当于人类的手工业阶段)
为了编程的方便,以及解决更加复杂的问题。程序员开始改进机器语言,使用英文缩写的助记符来表示基本的计算机操作。这些助记符构成了汇编语言的基础。如下是一些常见的汇编语言助记符(单词)比如:LOAD、MOVE 之类,这样人更容易使用了。识别几百、几千个单词,感觉要比几百几千个数字,美妙多了。汇编语言相当于人类的手工业社会,需要技术极其娴熟的工匠,但是开发效率也非常低。
汇编语言虽然能编写高效率的程序,但是学习和使用都不是易事,并且很难调试。另一 个复杂的问题,汇编语言以及早期的计算机语言(Basic、Fortran 等)没有考虑结构化设计原则,而是使用 goto 语句来作为程序流程控制的主要方法。这样做的后果是:一大堆混
乱的调转语句使得程序几乎不可能被读懂。对于那个时代的程序员,能读懂上个月自己写的 代码都成为一种挑战。
汇编语言仍然应用于工业电子编程领域、软件的加密解密、计算机病毒分析等。
·第三代:高级语言(相当于人类的工业阶段)
对于简单的任务,汇编语言可以胜任。但是随着计算机的发展,渗透到了工作生活的更 多的方面,一些复杂的任务出现了,汇编语言就显得力不从心(应该说是程序员使用汇编语 言解决复杂问题出现了瓶颈)。于是,出现了高级语言。像我们熟知的 C、C++、Java 等等都是高级语言。
高级语言允许程序员使用接近日常英语的指令来编写程序。例如,实现一个简单的任务: A+B=C , 使用机器语言、汇编语言和高级语言的的实现如下图 1-2 所示.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1Qu45kxA-1656507165878)(G:\博客专用图片\Java新手入门\图片3.jpg)]
图 1-2 三代计算机语言的直观对比
从上面这个简单的加法计算,可以看出越到高级语言,越接近人的思维,人使用起来就 越方便。
高级语言的出现,尤其是面向对象语言的出现,相当于人类的工业社会,高级语言极其易用,编程门槛和难度大大降低,大量的人员进入软件开发行业,为软件爆发性的增长提供了充足的人力资源。目前以及可预见的将来,计算机语言仍然处于“第三代高级语言”阶段。
我们国家人工智能、云计算机、大数据快速发展,IT领域需要的专业人才持续增加,尤其是高质量人才和新职业人才的缺口很大。仅人社部等官方就联合发布了13个平均年薪25万的新职业,就有100万以上的市场缺口。它们都是以计算机为基础,生根发芽的新物种。
查理·芒格说得很对,事情一定要习惯反过来想。所以你发现没:行业激烈变化时,恰恰是机会最多的时候。大环境不好时,恰恰是优质人才出头的时候。
那么IT行业到底有什么吸引力值得大家去追随呢?
2021年春季求职行业平均薪酬榜上,计算机行业以平均薪酬10249元,排名第五,薪资这么高的岗位,入行门槛却低,对绝大部分同学来说是非常友好的了。
先说说对IT界不断出现新技术的,新知识的看法。这个是常常不爱计算机工作的人经常提出的一个问题。不断出现的新知识,不断出现的新解决方案,都让人啧啧称奇。然后自己学会后,觉得人生值得了。而更是由于IT界这样的知识更新率极高,给人感觉这个行业是个十分有活力的行业,而不是死气沉沉的。
IT行业就业前景好IT行业就业前景好是毋庸置疑的,可以从很多权威的数据看到,在最具潜力的薪酬职业中,前二十位里面IT行业总是占有大比重的。而且从事IT行业的人,就算是跳槽再就业也是不会有什么难度的,与其他行业相比,IT行业只要有技术,其他的就都微不足道了。
咱们再来看看行业内技术要求的占比需求。就程序员开发来说,包括有前端/交互/美工,后台开发,算法工程师,移动端开发,产品经理,云计算/大数据等等。
IT行业就是需要不断学习的行业。该行业发展迅速,人才辈出,因此在此行业从业者能够随时随地的接触到最新的资讯,了解到最新的技术,不断的充实自己,跟上时代的发展。
1991 年,James Gosling 在 SUN 公司的工程师小组想要设计这样一种小型计算机语言。该语言主要用于像电视盒这样的消费类电子产品。另外,由于不同的厂商选择不同的
CPU 和操作系统,因此,要求该语言不能和特定的体系结构绑在一起,要求语言本身是中立的,也就是跨平台的。所以,将这个语言命名为“Green”,类似于绿色软件的意思。后来,改名为 Oak,橡树的意思。改名后发现已经有一种语言叫这个名字了,再改名叫 Java
。
java语言Logo
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MhH4h0qh-1656507165879)(G:\博客专用图片\Java新手入门\图片4.jpg)]
标准版,定位在个人计算机上的应用
这个版本是 Java
平台的核心,它提供了非常丰富的 API 来开发一般个人计算机上的应用程序,包括用户界面接口 AWT 及 Swing,网络功能与国际化、图像处理能力以及输入输出支持等。在上世纪 90 年代末互联网上大放异彩的 Applet 也属于这个版本。Applet 后来为 Flash 取代,Flash 即将被 HTML5 取代。
企业版,定位在服务器端的应用
JavaEE 是 JavaSE 的扩展,增加了用于服务器开发的类库。如:JDBC 是让程序员能直接在Java
内使用的 SQL 的语法来访问数据库内的数据;Servlet 能够延伸服务器的功能, 通过请求-响应的模式来处理客户端的请求;JSP 是一种可以将 Java
程序代码内嵌在网页内的技术。
微型版,定位在消费性电子产品的应用上
JavaME 是 JavaSE 的内伸,包含 J2SE 的一部分核心类,也有自己的扩展类,增加了适合微小装置的类库:javax.microedition.io.*等。该版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型产品能够随时增加支持的能力。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EPOYDZ9F-1656507165880)(G:\博客专用图片\Java新手入门\图片6.jpg)]
菜鸟雷区:很多人开始会误解为安卓开发就是JavaME,这两个是完全不同的内容。
Java
语言发展到今天经历了一系列的过程:
SUN 公司已经被 oracle 公司收购,目前每半年更新一次 java
的版本。但是,企业中的主流版本仍然以jdk8为主。对于初学者,应该以企业主流应用版本为核心进行学习,没有必须在此处追求最新版本。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TYhUQs4F-1656507165880)(G:\博客专用图片\Java新手入门\图片5.jpg)]
核心优势
Java
为消费类智能电子产品而设计,但智能家电产品并没有像最初想象的那样拥有大的发展。然而 90 年代,Internet 却进入了爆发式发展阶段,一夜之间,大家都在忙着将自己的计算机连接到网络上。这个时侯,遇到了一个大的问题。人们发现连接到 Internet 的计算机各式各样,有 IBM PC、苹果机、各种服务器等等,不仅硬件 CPU 不同,操作系统也不同,整个的网络环境非常复杂。这个时候,程序员们希望他们编写的程序能够运行在不 同的机器,不同的环境中,这需要一种体系中立的语言(即跨平台)。Java
的研发小组忽然发现他们用于小范围的语言也可以适应 Internet 这个大环境。
跨平台是****Java
语言的核心优势,赶上最初互联网的发展,并随着互联网的发展而发展, 建立了强大的生态体系,目前已经覆盖 IT 各行业的“第一大语言”,是计算机界的“英语”。**
虽然,目前也有很多跨平台的语言,但是已经失去先机,无法和 Java
强大的生态体系抗衡。Java
仍将在未来几十年成为编程语言的主流语言。
跨平台/可移植性
这是 Java
的核心优势。Java
在设计时就很注重移植和跨平台性。比如:Java
的 int 永远都是 32 位。不像 C++
可能是 16,32,可能是根据编译器厂商规定的变化。这样的话程序的移植就会非常麻烦。同平台之上安装了相应版本的jvm虚拟机可运行在不同系统上,即不同的操作系统上安装了相同的JVM虚拟机,共用一个JVM虚拟机,是class的跨平台,一次编译到处运行
安全性
(1)Java
取消了强大但又危险的指针,而代之以引用。由于指针可以行移动运算,
指针可随便指向一个内存区域,而不管返个区域是否可用,这样做是危险的,
因为原来这个内存地址可能存储着重要数据或者是其它程序运行所占用的,
并且使用指针也容易数组越界。
(2)垃圾回收机制:不需要程序员直接控制内存回收,由垃圾回收器在后台自动回收不再使用的内存。避免忘记及时回收,导致内存泄露。避免程序错
误回收程序核心类库的内存,导致系统崩溃。
(3)异常处理机制:Java 异常机制主要依赖于 try、catch、finally、throw、throws
五个关键字。
(4)强制类型转换:叧有在满足强制转换觃则的情冴下才能强转成功。
底层的安全性可以从以下方面来说明
Java
在字节码的传输过程中使用了公开密钥加密机制(PKC)。
在运行环境提供了四级安全性保障机制:
字节码校验器 -类装载器 -运行时内存布局 -文件访问限制
面向对象
面向对象是一种程序设计技术,非常适合大型软件的设计和开发。由于 C++
为了照顾大量 C
语言使用者而兼容了 C
,使得自身仅仅成为了带类的C
语言,多少影响了其面向对象的彻底性!Java
则是完全的面向对象语言。
简单性
Java
就是 C++
语法的简化版,我们也可以将Java
称之为“C+±”。跟我念“C 加加减”,指的就是将 C++
的一些内容去掉;比如:头文件,指针运算,结构,联合,操作符重载,虚基类等等。同时,由于语法基于 C 语言,因此学习起来完全不费力。
高性能
Java
最初发展阶段,总是被人诟病“性能低”;客观上,高级语言运行效率总是低于低级语言的,这个无法避免。Java 语言本身发展中通过虚拟机的优化提升了几十倍运行效率。比如,通过 JIT(JUST IN TIME)即时编译技术提高运行效率。 将一些“热点”字节码编译成本地机器码,并将结果缓存起来,在需要的时候重新调用。这样的话,使 Java 程序的执行效率大大提高,某些代码甚至接待 C++的效率。
因此,Java 低性能的短腿,已经被完全解决了。业界发展上,我们也看到很多 C++应用转到 Java 开发,很多 C++程序员转型为 Java 程序员。
分布式
Java 是为 Internet 的分布式环境设计的,因为它能够处理 TCP/IP 协议。事实上,通过 URL 访问一个网络资源和访问本地文件是一样简单的。Java 还支持远程方法调用(RMI,Remote Method Invocation),使程序能够通过网络调用方法。
多线程
多线程的使用可以带来更好的交互响应和实时行为。 Java 多线程的简单性是 Java 成为主流服务器端开发语言的主要原因之一。
健壮性
Java 是一种健壮的语言,吸收了 C/C++ 语言的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等)。Java 程序不可能造成计算机崩溃。即使 Java 程序也可能有错误。如果出现某种出乎意料之事,程序也不会崩溃,而是把该异常抛出,再通过异常处理机制加以处理。
要想知道java的运行机制,首先我们要先明白什么是JVM、JRE、JDK
**JVM(Java Virtual Machine)**就是一个虚拟的用于执行 bytecode 字节码的”虚拟计算机”。他也定义了指令集、寄存器集、结构栈、垃圾收集堆、内存区域。JVM 负责将 Java 字节码解释运行,边解释边运行,这样,速度就会受到一定的影响。
不同的操作系统有不同的虚拟机。Java 虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”。 Java 虚拟机是实现跨平台的核心机制。
**Java Runtime Environment (JRE) 包含:**Java 虚拟机、库函数、运行 Java 应用程序所必须的文件。
Java Development Kit (JDK)包含:包含 JRE,以及增加编译器和调试器等用于程序开发的文件。
注意:如果没有JDK,java
程序是无法运行的,就好像鱼儿离开了水就无法存活,Java程序的运行需要搭建JDK环境。
JDK、JRE 和 JVM的关系如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NO401mCY-1656507165881)(G:\博客专用图片\Java新手入门\图片8.jpg)]
接下来让我们来看看一个Java
程序是如何运行的吧。
Java
首先利用文本编辑器编写 Java
源程序,源文件的后缀名为.java;
再利用编译器(javac)将源程序编译成字节码文件,字节码文件的后缀名为.class;
最后利用虚拟机(解释器,java
)解释执行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K2jEzt9X-1656507165882)(G:\博客专用图片\Java新手入门\图片9.jpg)]
JDK下载网址
进入到官网后下拉找到JDK8安装与你电脑系统匹配的版本,点击下载
如图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ihmXlKbn-1656507165883)(G:\博客专用图片\Java新手入门\图片10.png)]
安装过程和普通软件安装没什么区别,过程中会让你选择 JDK 安装目录,采用默认即可。也就是说,通通点击“下一步”就能完成安装。如果你怕自己找不到或者记不住JDK的安装路径,那就保存到自己能记得住的位置,后面配置Path变量会用的到。
注意:安装路径最好全英文,要不然后面有可能会配置失败
环境变量是在操作系统中一个具有特定名字的对象, 它包含了一个或者多个应用程序所将使用到的信息。
Path 是一个常见的环境变量,它告诉操作系统,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下寻找此程序外,还应到哪些目录下寻找。
(另一种方法:打开设置——>系统——>高级系统设置)本人电脑华硕天选2,操作系统win11
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u9z90qYy-1656507165884)(G:\博客专用图片\Java新手入门\微信图片_20220629180701.png)]
这里有可能有小伙伴不知道用户变量和系统变量的区别,这里我说一下。
Windows系统中存在两种环境变量:用户变量和系统变量。
两种环境变量有什么区别和共同点?
1、两种环境变量中可以存在重名的变量;
2、两者都不区分变量名的大小写,如Path和PATH并没有区别;
3、用户变量只对当前用户有效,系统变量对所有用户有效;
4、windows系统在执行用户命令时,若用户未给出文件的绝对路径,则首先在当前目录下寻找相应的可执行文件、批处理文件等;
若找不到,再依次在系统变量的Path保存的这些路径中寻找相应的可执行程序文件。
查找顺序是按照路径的录入顺序从左往右寻找的,最前面一条的优先级最高,如果找到命令就不会再向后寻找。
如果还找不到再继续在用户变量的Path路径中寻找。
如果系统变量和用户变量的Path中都包含了某个命令,则优先执行系统变量Path中包含的这个命令。
5、变量Path告诉系统可执行文件放在什么路径;变量ClassPath则告诉JVM要使用或执行的class放在什么路径。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZMGtLSHx-1656507165885)(G:\博客专用图片\Java新手入门\图片10.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GxXe3NMq-1656507165886)(G:\博客专用图片\Java新手入门\图片11.jpg)]
菜鸟雷区:此处一定是英文分号而不是中文分号! 大家以后设置相关配置时也要注意中英文符号的区别。
classpath 配置问题
如果使用 JDK1.5 以上就不需要配置这个环境变量!JRE 会自动搜索当前路径下的类文件及相关 jar 文件。
这个了解即可。
进入命令行窗口,开始菜单搜索框输入“cmd”即可,如图 1-18 所示。在窗口中输入命令“java -version ”,回车。出现你的JDK版本,则说明 JDK 安装成功。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-32zTRXQa-1656507165887)(G:\博客专用图片\Java新手入门\图片12.jpg)]
2019 年后,JDK8 后续更新的版本就开始收费了。但是,主要针对的是企业用户,对于个人学习者没有任何影响。
由于 JAVA 虚拟机的规范是开放的,任何人都可以去实现它。我们常用的 JDK 只是
oracle 公司的一种具体实现,其他公司甚至个人也可以根据规范自己开发。常见的 JDK 有如下几种:
oracle JDK
open JDK
免费的开源实现,以 GPL License 发布,很多 Linux 发行版中都会包含 Open JDK
IBM、亚马逊、SAP 等大公司自己的 JDK
各个版本的JDK版本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ykp1y6zF-1656507165888)(G:\博客专用图片\Java新手入门\图片13.jpg)]
到这里,你也对Java有了一个大概的认知,Java运行所需要的环境也配置好了,下篇我们会开发第一个程序以及选择一些强大的开发工具,这会让我们的效率事半功倍。
JAVA 虚拟机的规范是开放的,任何人都可以去实现它。我们常用的 JDK 只是
oracle 公司的一种具体实现,其他公司甚至个人也可以根据规范自己开发。常见的 JDK 有如下几种:
oracle JDK
open JDK
免费的开源实现,以 GPL License 发布,很多 Linux 发行版中都会包含 Open JDK
IBM、亚马逊、SAP 等大公司自己的 JDK
各个版本的JDK版本
[外链图片转存中…(img-Ykp1y6zF-1656507165888)]
到这里,你也对Java有了一个大概的认知,Java运行所需要的环境也配置好了,下篇我们会开发第一个程序以及选择一些强大的开发工具,这会让我们的效率事半功倍。