标签:otn 独立 代码块 ica imp 含义 解释型 develop contain
计算机已经成为人类大脑的延伸,成为不可或缺的一部分。而算法是计算机的灵魂,编程语言是塑造计算机灵魂的工具。让计算机具备"灵魂",可以按照人的意志运行,甚至某天按照计算机自己的意志运行,其核心就是算法。
计算机程序设计语言经历了机器语言到汇编语言和高级程序设计语言三个阶段,其特点是使得程序员用编程语言开发、测试、部署应用程序越来越方便、高效。但是是以牺牲效率为代价,但是随着计算机硬件的快速发展,绝大多数应用场景的效率损失可以忽略不计。
机器语言
计算机发展的最早期,程序员编写程序采用二进制的指令(010010101)来实现的,而每种CPU都有各自不同的指令系统(SPARC/Intel X86/ARM),因此在不同的机器上使用不同的机器语言实现。其特点是性能特别高效,而面向机器编程也就意味着不能移植,需要手动处理底层硬件的差异性,而且二进制的指令难以理解和维护。
汇编语言
随着时代和计算机技术的发展,汇编语言和编译器的出现解决了机器语言需要记住非常多的二进制机器指令的难题,但是还是没有从根本上解决移植性的问题,只是将机器指令转换为易懂的英文单词,然后由编译器编译成机器指令,因为计算机终归揭底只能识别二进制的0001110100110机器指令,而且汇编语言是面向机器的,不同机器(SPARC/Intel X86/ARM)的汇编指令是不相同的。尽管如此汇编语言目前仍然在工业电子编程、软件的加密解密和计算机病毒分析等场景广泛使用。
高级程序设计语言
高级程序设计语言的高级之处体现在开发人员在编写程序时无需关心计算机底层硬件差异而只需要专注于业务模块实现即可。而且相对于机器语言、汇编语言而言,高级语言学习起来更加容易,因此会有更加充足的人力资源,叶更容易开发大型商业软件,例如Windows、macOS、Linux等操作系统都是使用C/C++实现。国内的阿里巴巴在电商、物流、金融、支付领域大量使用Java实现。
如果想知道目前主流的编程语言有哪些,可以访问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)应用开发、测试、部署。
起源
1991年,Sun公司的James Golsing领导的工程师小组想要开发一种用于像有线电视机顶盒这样的消费类电子产品的小型计算机语言,该产品的特点是由于不同的厂商选择不同的CPU和操作系统,因此要求该语言不能和特定的体系结构绑定在一起,也就是跨平台的。最初将这个语言命名为Oak,然后发现已经有一种语言叫这个名字,然后改为Java。
流行
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/worskpace/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,然后选择对应的版本下载即可。
标签:otn 独立 代码块 ica imp 含义 解释型 develop contain
原文地址:https://www.cnblogs.com/ittimeline/p/11875151.html