:star:前面的话:star:
大家好!这是一个新的系列专栏,本专栏会介绍JavaSE及其应用,Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。本篇文章带大家认识Java,知道Java是什么,顺便了解下“世界上最好的语言”。
:ledger:博客主页:未见花闻的博客主页 :tada:欢迎关注:mag_right:点赞:+1:收藏:star:留言:memo: :pushpin:本文由未见花闻原创! :calendar:51CTO首发时间::palm_tree:2021年12月10日:palm_tree: :envelope:坚持和努力一定能换来诗与远方! :thought_balloon:参考书籍::books:《Java核心技术卷1》,:books:《Java核心技术卷2》,:books:《Java编程思想》 :speech_balloon:参考在线编程网站::globe_with_meridians:牛客网:globe_with_meridians:力扣 :pray:作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢! 博主的码云gitee,平常博主写的程序代码都在里面。
(📌导航小助手📌)
☕️1.世界上最好的语言
🍵1.1真的有世界上最好的语言吗?
🍶1.1.1编程语言排行榜(截止至2021年10月)
在解释这个问题之前,我们不妨先来看看最近的编程语言排行榜,看看在TIOBE社区谁是“最好的语言”(NO.1) TIOBE Index for October 2021 我们从这个排行榜看出Python热度是上升的,从2020年的第三名升到2021年的第一名。但是这就能说明Python就是最好的语言吗? 其实,世界上没有绝对地最好的语言,只能说从在某一方面,某个语言特别的擅长,可以说成在那一方面的“最好的语言”,比如Python特别擅长做数据的分析与处理,可以说在这一方面Python就是最好的语言。 我们再来看看编程语言热度变化趋势图: 总体上看Java,C,C++三门语言热度位于前三名而且多年来一直保持稳定,这是因为它们三者各有各的擅长领域,这使它们经久不衰! 参考网站:TIOBE社区
🍶1.1.2什么是Java?
Java的创始人是詹姆斯·高斯林,被人们称为“Java之父”。
Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义。不仅如此,Java还是一个有一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统、移动终端、企业服务器、大型机等各种场合。下面我们通过Java官方提供的数据来一起感受一下,Java到底有多“火”。 这门编程语言最开始并不是叫做Java,而是Oak,可以说Oak是Java的前身,由于一系列的原因最终叫做Java。 听说是Java创始人高斯林喜欢喝咖啡,而有个叫爪哇的岛盛产咖啡,所以把这门语言叫做Java。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等 。
🍶1.1.3Java是世界上最好的语言吗?
不是,因为在每个领域都有更合适的编程语言。 C 语言无疑是现代计算机软件编程语言的王者,几乎所有的操作系统都是 C 语言写成的。C++ 是面向对象的 C 语言,一直在不断的改进。 JavaScript 是能运行在浏览器中的语言,丰富的前端界面离不开 Javascript 的功劳。近年来的 Node.js 又在后端占有一席之地。 Python 用于系统管理,并通过高性能预编译的库,提供 API 来进行科学计算,文本处理等,是 Linux 必选的解释性语言。 Ruby 强于 DSL(领域特定语言),程序员可以定义丰富的语义来充分表达自己的思想。Erlang 就是为分布式计算设计的,能保证在大规模并发访问的情况下,保持强壮和稳定性。 Go 语言内置了并发能力,可以编译成本地代码。当前新的网络相关项目,很大比例是由 Go 语言编写的,如Docker、Kubernetes 等。 编写网页用 PHP,函数式编程有 Lisp/Scala,编写 iOS 程序有 Swift/Objective-C。一句话概括,能留在排行榜之上的语言,都是好的语言,在其所在的领域能做到最好。 那么,Java 语言到底有什么优势可以稳居排行榜前三的位置呢? 其一,语法比较简单,学过计算机编程的开发者都能快速上手。 其二,在若干了领域都有很强的竞争力,比如服务端编程,高性能网络程序,企业软件事务处理,分布式计算, Android 移动终端应用开发等等。 最重要的一点是符合工程学的需求,我们知道现代软件都是协同开发,那么代码可维护性,编译时检查,较为高效的运行效率,跨平台能力,丰富的 IDE,测试,项目管理工具配合。都使得 Java 成为企业软件公司的首选,也得到很多互联网公司的青睐。 没有短板,容易从市场上找到 Java 软件工程师,软件公司选择 Java 作为主要开发语言,再在特定的领域使用其他语言协作编程,这样的组合选择,肯定是不会有大的问题。 所以综合而言,Java 语言全能方面是最好的。我们来一起看看Java社区的概况:
Java 是一门开放的语言,其开源社区也是参与者众多。最有名的应当数 Apache 社区,目前已经拥有近 200 个顶级项目,其中绝大多数是 Java 语言项目。在 Java 生态圈中,具有重要地位的如 Spring、Ant、Commons、Tomcat、Xerces、Maven、 Struts、Lucene、ActiveMQ、CXF、Camel、Hadoop 等等。很多技术时代,一大批 Java 项目加入,如 Web 时代的 Velocity、Wicket;JavaEE 相关的 Tomee、OpenJPA、OpenWebBeans、Myfaces;WebService 时代的 jUDDI、Axis、ServiceMix;Osgi 时期的 Flex、Karaf;大数据时代的 HBase、Hive、ZooKeeper、Cassandra;云时代的 Mesos、CloudStack 等等。 涉及到软件开发的方方面面,可以说当今几乎所有的中型以上 Java 应用中,都会有 Apache 开源项目的身影。国内最早参与 Apache 社区的以国外软件公司国内研发团队成员为主,如红帽、IONA、Intel、IBM 研发中心等。如今国内互联网公司和软件公司也不断的参与,特别是开始主导一些 Apache 项目,如 Kylin 等。 JBoss 开源社区,包含了 50 多个 Java 开源项目,其中有 Hibernate、Drools、jBPM 等业界知名开源项目,也有Undertow、Byteman、Narayana 等名气不算大,但绝对是相应领域业界的顶级优秀项目。当前 JBoss 开源社区主要以企业应用中间件软件为主,RedHat 是主要的技术贡献力量。 Eclipse 开源社区,之前主要是包含 Eclipse IDE 的项目,后来也逐步进行多方面的扩展,比如 OSGi,服务器等,目前一些知名 Java 项目,如 Jetty、Vertx 等都是 Eclipse 开源组织成员。此外 IOT 目前是 Eclispe 的一个重点方向,在这里可以找到完整的 IOT Java 开发方案。 Spring 开源社区,以 SpringFramework 为核心,包括 SpringBoot、SpringCloud、SpringSecurity、SpringXD 等开源项目,在国内有广泛的应用场景。
所以说,Java不仅仅是一门编程语言,它是一个综合的技术体系,是面向对象思想的规范。
🍵1.2Java的优点
🍶1.2.1 简单性
<font face="楷体">人们希望构建一个无须深奥的专业训练就可以进行编程的系统,并且要符合当今的标准惯例。因此,尽管人们发现C++不太适用,但在设计Java的时候还是尽可能地接近C++,以便系统更易于理解。Java剔除了C++ 中许多很少使用、难以理解、易混淆的特性。在目前看来,这些特性带来的麻烦远远多于其带来的好处。 的确,Java 语法是C++语法的一个"纯净"版本。这里没有头文件、指针运算(甚至指针语法)、结构、联合、操作符重载、虚基类等。然而,设计者并没有试图清除C++中所有不适当的特性。例如,switch语句的语法在 Java中就没有改变。如果你了解C++ 就会发现可以轻而易举地转换到 Java 语法。 Java发布时,实际上C++并不是最常用的程序设计语言。很多开发人员都在使用Visual Basic 和它的拖放式编程环境。这些开发人员并不觉得 Java简单。很多年之后 Java开发环境才迎头赶上。如今,Java开发环境已经远远超出大多数其他编程语言的开发环境。 简单的另一个方面是小。Java的目标之一是支持开发能够在小型机器上独立运行的软件。基本的解释器以及类支持大约仅为 40KB;再加上基础的标准类库和对线程的支持(基本上是一个自包含的微内核)大约需要增加175KB。 在当时,这是一个了不起的成就。当然,由于不断的扩展,类库已经相当庞大了。现在有个独立的具有较小类库的Java 微型版(Java Micro Edition),这个版本适用于嵌入式设备。 </font>
🍶1.2.2 面向对象
<font face="楷体">简单地讲,面向对象设计是一种程序设计技术。它将重点放在数据(即对象)和对象的接口上。用木匠打一个比方,一个"面向对象的"木匠始终关注的是所制作的椅子,第二位才是所使用的工具;一个"非面向对象的"木匠首先考虑的是所用的工具。在本质上,Java的面向对象能力与C++是一样的。 开发 Java 时面向对象技术已经相当成熟。Java的面向对象特性与C++ 旗鼓相当。Java 与C++的主要不同点在于多重继承,在 Java中,取而代之的是更简单的接口概念。与C++相比,Java 提供了更丰富的运行时自省功能。
🍶1.2.3 分布式
<font face="楷体">Java有一个丰富的例程库,用于处理像HTTP和FTP之类的TCP/IP协议。Java应用程序能够通过URL打开和访问网络上的对象,其便捷程度就好像访问本地文件一样。如今,这一点已经得到认可,不过在1995年,主要还是从C++或Visual Basic程序连接Web 服务器。
🍶1.2.4 健壮性
<font face="楷体">Java的设计目标之一在于使得 Java编写的程序具有多方面的可靠性。Java投入了大量的精力进行早期的问题检测、后期动态的(运行时)检测,并消除了容易出错的情况……Java和C++最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能性。 Java编译器能够检测许多在其他语言中仅在运行时才能够检测出来的问题。至于第二点,对于曾经花费几个小时来检查由于指针 bug 而引起内存冲突的人来说,一定很喜欢 Java 的这一特性。
🍶1.2.5 安全性
<font face="楷体">Java适用于网络/分布式环境。为了达到这个目标,在安全方面投入了很大精力。使用Java 可以构建防病毒、防篡改的系统。 从一开始,Java 就设计成能够防范各种攻击,其中包括∶
- [ ] 运行时堆栈溢出。如蠕虫和病毒常用的攻击手段。
- [ ] 破坏自己的进程空间之外的内存。
- [ ] 未经授权读写文件。
<font face="楷体">原先,Java对下载代码的态度是"尽管来吧!"。不可信代码在一个沙箱环境中执行,在这里它不会影响主系统。用户可以确信不会发生不好的事情,因为 Java代码不论来自哪里,都不能脱离沙箱。 不过,Java的安全模型很复杂。Java开发包(Java Development Kit,JDK))的第一版发布之后不久,普林斯顿大学的一些安全专家就发现一些小 bug会允许不可信的代码攻击主系统。 最初,安全 bug 可以快速修复。遗憾的是,经过一段时间之后,黑客已经很擅长找出安全体系结构实现中的小漏洞。Sun 以及之后的 Oracle 为修复 bug 度过了一段很是艰难的日子。 遭遇多次高调攻击之后,浏览器开发商和 Oracle 都越来越谨慎。Java 浏览器插件不再信任远程代码,除非代码有数字签名而且用户同意执行这个代码。</font> 注释∶现在看来,尽管 Java 安全模型没有原先预想的那么成功,但Java 在那个时代确实相当超前。微软提供了一种与之竞争的代码传输机制,其安全性完全依赖于数字签名显然这是不够的,因为微软自身产品的任何用户都可以证实,知名开发商的程序确实会崩溃并对系统产生危害。
🍶1.2.6 体系结构中立
编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要有Java运行时系统,这些编译后的代码可以在许多处理器上运行。Java编译器通过生成与特定的计算机体系结构无关的字节码指令来实现这一特性。精心设计的字节码不仅可以很容易地在任何机器上解释执行,而且还可以动态地翻译成本地机器代码。 当时,为"虚拟机"生成代码并不是一个新思路。诸如 Lisp、Smalltalk 和 Pascal等编程语言多年前就已经采用了这种技术。 当然,解释虚拟机指令肯定会比全速运行机器指令慢很多。然而,虚拟机有一个选项,可以将执行最频繁的字节码序列翻译成机器码,这一过程被称为即时编译。 Java 虚拟机还有一些其他的优点。它可以检测指令序列的行为,从而增强其安全性。
🍶1.2.7 可移植性
与C和C++不同,Java规范中没有"依赖具体实现"的地方。基本数据类型的大小以及有关运算都做了明确的说明。 例如,Java中的int永远为32 位的整数,而在C/C++中,int可能是16位整数、32位整数,也可能是编译器提供商指定的其他大小。唯一的限制只是 int类型的大小不能低于 short int,并且不能高于long int。在 Java中,数据类型具有固定的大小,这消除了代码移植时令人头痛的主要问题。二进制数据以固定的格式进行存储和传输,消除了字节顺序的困扰。字符串是用标准的 Unicode 格式存储的。 作为系统组成部分的类库,定义了可移植的接口。例如,有一个抽象的Window 类,并给出了在 UNIX、Windows和 Macintosh环境下的不同实现。 选择Window类作为例子可能并不太合适。凡是尝试过的人都知道,要编写一个在Windows、Macintosh 和 10种不同风格的 UNIX上看起来都不错的程序有多么困难。Java 1.0 就尝试着做了这么一个壮举,发布了一个将常用的用户界面元素映射到不同平台上的简单工具包。遗憾的是,花费了大量的心血,却构建了一个在各个平台上都难以让人接受的库。原先的用户界面工具包已经重写,而且后来又再次重写,不过跨平台的可移植性仍然是个问题。 不过,除了与用户界面有关的部分外,所有其他 Java库都能很好地支持平台独立性。你可以处理文件、正则表达式、XML、日期和时间、数据库、网络连接、线程等,而不用操心底层操作系统。不仅程序是可移植的,Java API往往也比原生 API质量更高。
🍶1.2.8 解释型
Java 解释器可以在任何移植了解释器的机器上执行 Java字节码。由于链接是一个增量式且轻量级的过程,所以,开发过程也变得更加快捷,更加具有探索性。 这看上去很不错。用过Lisp、Smalltalk、Visual Basic、Python、R或 Scala的人都知道"快捷而且具有探索性"的开发过程是怎样的。你可以做些尝试,然后就能立即看到结果。Java 开发环境并没有将重点放在这种体验上。
🍶1.2.9 高性能
尽管对解释后的字节码性能已经比较满意,但在有些场合下还需要更加高效的性能。字节码可以(在运行时刻)动态地翻译成对应运行这个应用的特定 CPU 的机器码。 使用 Java的头几年,许多用户不同意这样的看法∶性能就是"适用性更强"。然而,现在的即时编译器已经非常出色,以至于成了传统编译器的竞争对手。在某些情况下,甚至超越了传统编译器,原因是它们含有更多的可用信息。例如,即时编译器可以监控经常执行哪些代码并优化这些代码以提高速度。更为复杂的优化是消除函数调用(即"内联")。即时编译器知道哪些类已经加载。基于当前加载的类集,如果特定的函数不会被覆盖。就可以使用内联。必要时,还可以撤销优化。
🍶1.2.10 多线程
多线程可以带来更好的交互响应和实时行为。 如今,我们非常关注并发性,因为摩尔定律行将完结。我们不再追求更快的处理器,而是着眼于获得更多的处理器,而目要让它们一直保持工作。不过,可以看到,大多数编程语言对于这个问题并没有显示出足够的重视。 Java在当时很超前。它是第一个支持并发程序设计的主流语言。从白皮书中可以看到. 它的出发点稍有些不同。当时,多核处理器还很神秘,而 Web 编程才刚刚起步,处理器要花很长时间等待服务器响应,需要并发程序设计来确保用户界面不会"冻住"。 并发程序设计绝非易事,不过 Java在这方面表现很出色,可以很好地管理这个工作。
🍶1.2.11 动态性
从各种角度看,Java与C或C++相比更加具有动态性。它能够适应不断发展的环境。库中可以自由地添加新方法和实例变量,而对客户端却没有任何影响。在Java中找出运行时类型信息十分简单。 当需要将某些代码添加到正在运行的程序中时。动态性将是一个非常重要的特性。一个很好的例子是∶从 Internet下载代码,然后在浏览器上运行。如果使用C或 C++,这确实难度很大,不过 Java 设计者很清楚动态语言可以很容易地实现运行程序的演进。最终,他们将这一特性引入这个主流程序设计语言中。
注释:Java成功地推出后不久,微软就发布了一个叫做J++的产品,它与 Java有几乎相同的编程语言以及虚拟机。现在,微软不再支持J++,取而代之的是另一种名为C#的语言。C#与 Java有很多相似之处,然而使用的却是完全不同的虚拟机。
🍵1.3Java开发工具与环境
🍶1.3.1Java开发者工具
Java开发者工具为JavaJDK,下载官网为:https://www.oracle.com/java/technologies/downloads。
🍶1.3.2JavaJDK环境变量设置
以Windows为例。 1.安装JDK。 2.打开系统设置,“此电脑/我的电脑”,鼠标右键-属性。 3.点击高级系统设置
4.点击环境变量 5.点击“新建”系统变量JAVA_HOME,内容为JDK路径,本人路径为:C:\Program Files\Java\jdk-17
6.配置Path, 需要注意Path路径一般是存在的,只需要追加即可,追加的值为:%JAVA_HOME%\bin。这里使用%JAVA_HOME%的意思是直接引用上面配置的JAVA_HOME的值,这样的好处在于,如果Java安装目录发生变话,主需要修改JAVA_HOME的值,不用再修改Path变量的值。 7.新建系统变量CLASSPATH
变量名: CLASSPATH
变量值: .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
注意前面的 . 这个点号不能省略掉
8验证
安装完成JDK以及相应的配置之后,需要验证是否安装成功,是否配置正常。
第一步:打开cmd命令行窗口
键盘win+r
或者搜索框搜索cmd
.
命令行输入java -version
,得到版本信息。
命令行输入javac
,得到一系列命令信息。
如果像这样,就说明你的JDK安装与环境配置成功了,就可以使用了。
🍶1.3.2Java推荐集成开发环境
下载网址:https://www.jetbrains.com/zh-cn/idea/download/#section=windows 社区版免费,直接下载安装即可! 专业版需要付费,但是可以免费试用30天。 转发专业版免费安装教程:IDEA专业版
☕️2.第一个Java程序
🍵2.1认识Java的main方法
文件名:HelloJava.java
public class HelloJava{
public static void main(String[] args){
System.out.println("Hello Java!");
}
}
注意公共类需要类名需要与文件名相同!
🍵2.2Hello Java!
我们现在不使用idea运行这个HelloJava,我们尝试使用命令行运行代码!
1.将命令行目录转到Java文件路径,如果是位于C盘,直接输入cd + 路径
,否则先转到目的盘(比如D盘)d:
,然后输入cd + 路径
。
2.使用javac + 文件名.java
进行编译,如果含中文字符串或中文注释则需要输入javac -encoding utf-8 + 文件名.java
编译后未报异常,表示编译成功!
3.运行程序,输入java + 文件名
运行。
::: hljs-center
觉得文章写得不错的老铁们,点赞评论关注走一波!谢谢啦!
:::
::: hljs-center
:::