计算机已经成为人类大脑的延伸,成为不可或缺的一部分。而算法是计算机的灵魂,编程语言是塑造计算机灵魂的工具。让计算机具有"灵魂",能够按照人的意志运行,甚至某天按照计算机本身的意志运行,其核心就是算法。javascript
计算机程序设计语言经历了机器语言到汇编语言和高级程序设计语言三个阶段,其特色是使得程序员用编程语言开发、测试、部署应用程序愈来愈方便、高效。可是是以牺牲效率为代价,可是随着计算机硬件的快速发展,绝大多数应用场景的效率损失能够忽略不计。php
机器语言
计算机发展的最先期,程序员编写程序采用二进制的指令(010010101)来实现的,而每种CPU都有各自不一样的指令系统(SPARC/Intel X86/ARM),所以在不一样的机器上使用不一样的机器语言实现。其特色是性能特别高效,而面向机器编程也就意味着不能移植,须要手动处理底层硬件的差别性,并且二进制的指令难以理解和维护。html
汇编语言
随着时代和计算机技术的发展,汇编语言和编译器的出现解决了机器语言须要记住很是多的二进制机器指令的难题,可是仍是没有从根本上解决移植性的问题,只是将机器指令转换为易懂的英文单词,而后由编译器编译成机器指令,由于计算机终归揭底只能识别二进制的0001110100110机器指令,并且汇编语言是面向机器的,不一样机器(SPARC/Intel X86/ARM)的汇编指令是不相同的。尽管如此汇编语言目前仍然在工业电子编程、软件的加密解密和计算机病毒分析等场景普遍使用。java
高级程序设计语言
高级程序设计语言的高级之处体如今开发人员在编写程序时无需关心计算机底层硬件差别而只须要专一于业务模块实现便可。并且相对于机器语言、汇编语言而言,高级语言学习起来更加容易,所以会有更加充足的人力资源,叶更容易开发大型商业软件,例如Windows、macOS、Linux等操做系统都是使用C/C++实现。国内的阿里巴巴在电商、物流、金融、支付领域大量使用Java实现。python
若是想知道目前主流的编程语言有哪些,能够访问tiobe 首页获取编程语言排行榜。程序员
编程语言 | 应用场景 |
---|---|
C | 硬件驱动、操做系统、系统软件 |
C++ | 系统软件、网络通信、科学计算 、游戏 |
C# | Windows应用,Web应用、游戏 |
Java | 大型互联网应用(淘宝、天猫),Android,大数据 |
Go | 高并发、区块链、微服务 |
Kotlin | Android应用开发 |
Swift | macOS,iPhone,iPad应用开发 |
Python | 人工智能、机器学习、自动化运维、数据分析 、图形处理、科学计算、多媒体应用 |
JavaScript | 浏览器端、服务端、PC桌面 |
Scala | 大数据开发 |
那么若是你做为初学者,面对如此之多的编程语言,到底应该先从哪门语言上车呢?若是你想深刻的学习其余语言和架构相关的知识以前建议熟练掌握C语言。由于C++/Java/C#等编程语言都模仿了C语言。不管哪一种语言,都是实现目标的工具,而不是目标自己。算法
而不出意外的话,个人全栈之路系列会覆盖上述的十种编程语言,目的是实现全平台(Windows,Linux,macOS)应用开发、测试、部署。shell
起源
1991年,Sun公司的James Golsing领导的工程师小组想要开发一种用于像有线电视机顶盒这样的消费类电子产品的小型计算机语言,该产品的特色是因为不一样的厂商选择不一样的CPU和操做系统,所以要求该语言不能和特定的体系结构绑定在一块儿,也就是跨平台的。最初将这个语言命名为Oak,而后发现已经有一种语言叫这个名字,而后改成Java。macos
流行
20世纪90年代末,Java遇上了互联网发展的潮流,而互联网的特色恰好和消费类嵌入式电子产品相似(不一样计算机产商选择不一样的CPU和操做系统),得益于Java的跨平台特性,能够制做在支持Java的Web浏览器内的程序(Applet)而逐渐流行起来。编程
生态
因为Java开源,也获得了许多大厂(例如Oracle,IBM,阿里巴巴,谷歌,苹果)的支持,逐步发展成为具备开源、跨平台、高性能、支持多线程、分布式、安全可靠等诸多特性的开发平台和运行平台,并且自JDK1.4之后逐渐涌现出许多为了简化企业级开发的开源框架,例如后期会学习的Spring Framework,MyBatis,Netty,Dubbo等等都是使用Java实现,开发者能够经过阅读Java和框架的源码来提升自身的编程功力。
开发平台
通过20多年(1995年正式对外公开发布)的发展已经逐步创建起本身强大的生态体系,在大型互联网应用开发,移动端Android开发以及大数据开发占据了广阔的市场,最典型的就是国内互联网巨头-阿里巴巴在其电商、物流、金融、支付、大数据、云计算等业务场景中大量使用了Java及其相关技术栈(Spring Framework/Spring Boot/Spring Cloud/Alibaba-Spring-Cloud,Hadoop,Spark,Flink/Android)。
运行平台
Java程序是运行在JVM(Java Virtual Machine)之上的,这就是Java程序跨平台实现的本质缘由,并且因为Java的开放性,有愈来愈多的语言是运行在JVM之上的,例如大数据处理语言Scala,Android开发的Kotlin以及Clojure,Groovy等等。
Java是基于C/C++基础之上演进而来,可是不一样于C/C的是Java是纯粹的面向对象语言,舍弃了C语言中容易引发错误的指针,并引入了垃圾回收机制。
相对于C/C而言,Java更加简单易用,开发效率更高,并且基于JVM实现了跨平台,也支持分布式应用开发、高并发、高可用、高性能等应用场景。
Java自从1998年以后将Java分为三个版本,分别是JavaSE,JavaEE和JavaME,不一样的版本有不一样的应用场景。
JavaSE(Java Standard Edition):标准版Java,提供了完整的Java核心API,主要用于桌面应用开发,不过目前桌面开发基本都基于C/C++实现。
JavaEE(Java Enterprise Edition):企业式Java,主要用于企业级后台服务,大型分布式互联网应用开发。
JavaME(Java Micro Edition):嵌入式Java,主要用于开发嵌入式设备的产品,例如塞班手机游戏(已经消亡)。
因为目前Java主要的擅长领域是企业级后台服务开发、Android移动应用开发以及大数据应用开发,而Java语言是它们的基石语言,所以不管是从事企业级后台服务开发,仍是Android以及大数据应用开发,都要先从JavaSE入门,而后再学习企业级应用以及大型分布式互联网应用相关的Java技术栈,例如MytBatis,Spring Framework/Spring Boot/Spring Cloud,Alibaba Spring Cloud等等。
俗话说,工欲善其事必先利其器,掌握一些平常开发中使用的工具、软件可以大大的提升工做效率,工具自己推出的目的也是为了提升和解放生产力。而软件开发是大型团队之间协做,须要注意的是在企业平常开发中,软件的各个版本要跟团队保持一致,避免由于版本差别性而产生没必要要的问题。
Windows上安装的应用程序一般都是.exe或者.msi格式,一般只须要去软件官网下载后双击安装便可。安装时须要注意安装的路径不能包含中文和空格,有些应用软件安装时会连带安装其余没必要要的软件(全家桶套装),由于Windows一般是安装在C盘中,若是你的C盘容量比较小,能够修改软件的安装路径。
macOS上的应用程序一般是.dmg格式,下载打开以后一般都是.kpg或者.app,若是是.kpg须要根据提示进行安装,若是是.app格式,直接拖放到"应用程序"文件夹便可。
Java开发环境主要是在Windows或者macOS上搭建,一般须要熟练使用JDK,IntelliJ IDEA,Git,Maven+Navicat/DataGrip+XShell/SecureCRT 以及经常使用的其余工具,例如Chrome,Visual Studio Code,PowerDesigner,Postman,Jenkins,Gitlab等工具。
JDK(Java Development Kit)原来是SUN公司推出的包含了开发和运行Java程序的工具集,而SUN公司在2010年被Oracle公司以74亿美金收购,也就意味着若是想要下载JDK,须要去Oracle官网下载。
JDK总体架构示意图
结合Java架构图理解JDK,JRE和JVM三者之间的关系。
JDK(Java Development Kit)包含了开发和运行Java程序所必备的环境,
JRE(Java Runtime Enviroment)包含了运行Java程序所必备的环境,主要由JVM和Java核心类库组成
JVM(Java Virtual Machine)负责解释执行JDK编译生成的字节码文件,针对不一样的操做系统(Windows,Linux,macOS)官方提供了不一样的JVM实现来实现Java程序的跨平台。
这里回顾下几个重点版本的JDK发布历史
JDK5.0是JDK发展史上具备里程碑意义的版本,具备许多新特性,例如可变参数、自动拆装箱,泛型、注解等等,JDK1.5等同于JDK5.0。
JDK7.0是Oracle公司09年收购SUN公司以后发布的第一个版本,也就意味着之后下载JDK须要去Oracle官网下载。
JDK8.0是目前互联网公司使用的主流JDK版本,许多Java的开源框架(例如SpringBoot2.x,Spring Cloud)都是基于该版本开发,也是Oracle公司长期支持的JDK版本。
JDK9.0之后Oracle公司将JDK的发布周期改成半年发布一个大的版本,而在企业项目开发时应该选择互联网大厂普遍使用,而且是官方长期维护的版本,而不是最新的版本。
目前互联网企业中使用最普遍的JDK版本为JDK8,而目前(2019/11/15)最新的JDK版本为JDK13,其中Oracle官方长期支持的JDK版本为JDK8和JDK11,分别支持到2025年和2026年。而JDK9,10,12,13都不是官方长期支持的版本,后期的学习中会覆盖最新版本涉及到的新特性。并且JDK是向下兼容,这也就意味着JDK8的特性能在JDK11上运行。
在平常开发学习中能够选择当前最新的版本(例如JDK13)学习,而在企业开发中,JDK的版本和线上环境运行的JDK版本保持一致便可。
若是想要开发Java程序,必须去Oracle官网下载JDK,在进入Oracle官网首页后下拉页面找到Resources for Developers
而后在跳转的页面中找到Java
而后选择Java SE Download
而后选择JDK11
由于JDK11是继JDK8以后Oracle官方长期维护的版本
而后下载JDK
而后赞成License,并选择对应的版本下载
由于本人的开发平台是macOS,所以选择的是jdk-11.0.5_osx-x64_bin.dmg
当JDK下载完成以后双击dmg文件
macOS系统会校验该文件,而后双击JDK11.0.5.pkg启动安装
介绍
安装类型
安装
当输入密码或者使用touchID后,macOS此时会安装JDK至/Library/Java/JavaVirtualMachines/jdk-11.0.5.jdk目录下,而且会自动配置环境变量。此时能够输入javac -version和java -version来验证安装。
安装摘要
若是你的macOS下同时安装了多个不一样的JDK版本(例如JDK11,JDK8),而又想在终端上运行指定的JDK版本(这里以JDK8为)的话,此时须要经过配置环境变量来实现。
首先使用su root命令切换到root用户,而后使用vim /etc/profile编辑profile文件,
此时vim处于阅读模式,还不能修改文件,能够经过i键进入编辑模式
而后添加JAVA_HOME环境变量,并使用export引用至PATH环境变量,
当在终端上执行java相关命令时会优先查找PATH环境变量对应的路径。
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home
export PATH=$PATH:$JAVA_HOME
source /etc/profile
命令,此时即可以实现Java版本的切换了。
Visual Studio Code是微软推出的一款开源、跨平台(Windows,Ubuntu,macOS)的编辑器,这里使用它来编写Java语言的源代码,固然除了编写Java代码以外,还能够用来编写C/C++,Python,Go,JavaScript,PHP程序等等。初学者不建议使用相似于IntelliJ IDEA那样的集成工具,由于其背后隐藏了许多你须要了解的细节。
在使用Visual Studio Code以前你须要去官网下载最新的可用版本,关于它的详细使用官网也提供了丰富的文档说明。
当下载完成后会获得一个VSCode-darwin-stable.zip包,咱们只须要将其解压
而后将解压后的程序Visual Studio Code拖放到macOS的应用程序文件夹便可使用
拖放完成以后即可以在LaunchPad中启动它
此时会提示还没有打开文件夹,咱们须要在/Users/liuguanglei/Documents目录下建立一个文件夹来存放源文件,这里我建立一个名为workspace的文件夹,由于后期会涉及到java,python,go,php,javascript等等语言,所以还须要在workspace目录下建立一个名为java的文件夹。
而后再点击Visual Studio Code的打开文件夹,选择/Users/liuguanglei/Documents/vs_code/java做为存放java源文件的目录
Java源文件都是以.java结尾,这里在Visual Studio Code中建立一个HelloWorld.java的源文件
而后在源文件中编写如下内容
public class HelloWorld{
public static void main(String[]args){
System.out.println("macOS10.15.1 & Visual Studio Code HelloWorld With Java");
}
}
HelloWorld源程序详解
每一个Java源文件能够包含多个class,可是只能有一个class使用public修饰,并且public修饰的类名必须和源文件名一致。针对包含多个class的源文件,javac编译源文件时生成对应数量的class文件,字节码的文件名和源文件中的class类名一致。
Java程序若是想独立运行,必须包含固定格式public static void main(String[]args){}的main方法
Java中的每条执行语句都须要包含在代码块{}或者是方法,而且以分号(;)结束
控制台输出可使用System.out.println(),而后传递字符串参数便可。
Java严格区分大小写,例如System和system是彻底不一样的含义。
编写完成之后能够在终端上使用javac编译该程序,编译会生成HelloWorld.class文件,而后使用java命令运行该程序,程序的运行结果会在终端上输出macOS10.15.1 & Visual Studio Code HelloWorld With Java
因为每次编写完原文件后,都须要启动终端来编译和运行Java程序,这样效率比较低,咱们可使用Visual Stuido Code提供的Java插件来实现编译、调试和运行Java程序。
首先在Visual Studio Code的插件商店(Command+Shift+x)中搜索Java,而后找到Java Extension Pack点击安装便可,若是想要使用插件,安装完成后重启即可使用。
使用插件即可以在源文件中经过点击Run来运行程序,点击Debug来调试程序。同时能够直接在Visual Studio Code中的内置终端查看程序的运行结果。
根据程序的运行结果显示此时Visual Studio Code程序默认使用的是profile文件中配置的JDK8运行的,若是你想要使用以前安装的JDK11,能够经过修改
/Users/liuguanglei/Library/Application Support/Code/User 路径下的setting.json文件,添加配java home属性配置,指向JDK11的Home目录
而后重启Visual Stuido Code,再次运行HelloWorld程序,能够从终端上看到输出信息已经使用了JDK11的版本。
因为高级编程语言和计算机底层语言是互不相通的,计算机最底层只能识别01010这种二进制的机器指令,所以须要使用工具进行语言之间的转换。这个就是程序编译或者解释的由来。
为了理解程序编译和程序解释,这里引入两种语言,分别是高级计算机语言L1,以及低级计算机语言L0。
程序编译
开发人员使用高级编程语言L1编写的应用程序经过编译器生成成计算机底层可以识别的低级语言L0,L0就是计算机实际执行的语言,而编译器生成的计算机底层识别的二进制机器指令过程就是程序编译。常见的编译型语言有C/C++/Objective-C/Go
程序解释
首先使用L0语言实现另一个程序,也就是解释器,而后将开发人员使用高级语言L1编写的应用程序做为输入,每一句L1编写的程序都会在L0中做为等价的转换而后执行,解释的过程就是由L0编写的解释器去解释L1程序。常见的解释型语言有PHP,Python,JavaScript。
Java源程序首先要通过C语言实现的javac编译器将源文件编译生成和平台无关的字节码文件(.class结尾的文件),若是源文件中有Java语法错误,则会致使没法编译经过
而后在运行时经过Java虚拟机内嵌的解释器将字节码转换为真正的机器码。
源程序是须要遵照Java语言规范,字节码文件是须要遵照JVM规范。
若是想要了解Java语言规范和JVM规范,能够拜读官方文档,其官网地址是https://docs.oracle.com/javase/specs/index.html
注释(Comment)是用于描述程序的文字信息,Java中的注释分为以下三种
/**/
表示,一般在方法内部使用,多行注释不能嵌套,不然会发生编译错误/***/
表示,一般在类上,属性上和方法上使用,可使用javadoc -d 文档目录 源文件名生成API文档javadoc生成文档注释
iuguangleideMacBook-Pro:java liuguanglei$ pwd /Users/liuguanglei/Documents/workspace/java liuguangleideMacBook-Pro:java liuguanglei$ javadoc -d /Users/liuguanglei/Documents/doc/ HelloWorld.java 正在加载源文件HelloWorld.java... 正在构造 Javadoc 信息... 正在建立目标目录: "/Users/liuguanglei/Documents/doc/" 标准 Doclet 版本 11.0.5 正在构建全部程序包和类的树... 正在生成/Users/liuguanglei/Documents/doc/HelloWorld.html... 正在生成/Users/liuguanglei/Documents/doc/package-summary.html... 正在生成/Users/liuguanglei/Documents/doc/package-tree.html... 正在生成/Users/liuguanglei/Documents/doc/constant-values.html... 正在构建全部程序包和类的索引... 正在生成/Users/liuguanglei/Documents/doc/overview-tree.html... 正在生成/Users/liuguanglei/Documents/doc/index-all.html... 正在构建全部类的索引... 正在生成/Users/liuguanglei/Documents/doc/allclasses-index.html... 正在生成/Users/liuguanglei/Documents/doc/allpackages-index.html... 正在生成/Users/liuguanglei/Documents/doc/deprecated-list.html... 正在构建全部类的索引... 正在生成/Users/liuguanglei/Documents/doc/allclasses.html... 正在生成/Users/liuguanglei/Documents/doc/allclasses.html... 正在生成/Users/liuguanglei/Documents/doc/index.html... 正在生成/Users/liuguanglei/Documents/doc/help-doc.html...
查看javadoc生成的网页文档
从index.html文件中得知源文件中使用java文档注释的内容会出如今网页中
三种注释版HelloWorld
/** * Java版本HelloWorld * @author tony ittimelinedotnet@gmail.com * @since JDK11 */
public class HelloWorld{
/* 程序的主入口,从这里开始执行 */
public static void main(String[]args){
//向终端输出macOS10.15.1 & Visual Studio Code HelloWorld With Java
System.out.println("macOS10.15.1 & Visual Studio Code HelloWorld With Java");
}
}
在平常开发中应该多写注释,便于程序后期维护,而在程序调试的过程当中,也能够经过注释部分代码来调试程序,注释的内容在javac编译时都会删除,不会影响程序的运行结果。
JDK中封装了大量开发中经常使用的API(Application Programming Interface),其文档也是使用javadoc工具实现的,JDK11的API文档地址是 https://docs.oracle.com/en/java/javase/11/docs/api/index.html
后期会学习JDK提供的平常开发中经常使用类,可使用搜索框搜索指定的类(例如java.lang.String)来查看类提供的方法,成员变量等等信息。
例如这里经过在线API文档查看java.lang.String类的使用
macOS还能够经过安装应用程序Dash来实现离线查阅JDK帮助文档
Dash 是使用与Mac OS平台的软件编程文档管理工具,能够浏览API文档,以及管理代码片断工具。Dash自带了丰富的API文档,涉及各类主流的编程语言和框架。 Dash内置了丰富的API文档,让咱们集中管理API文档,包括下载、搜索、查阅并支持集成到XCode、Alfred等软件中,很是的强大!
下载安装Dash后,启动Dash,而后点击Download Docsets
在搜索框中搜JavaSE,而后选择对应的版本下载便可。