zoukankan      html  css  js  c++  java
  • Java架构师成长之道之Java概述与开发环境搭建

    Java架构师成长之道之Java概述与开发环境搭建

    1.1 Java概述

    1.1.1 Java发展简史

     

    Java之父 James Golsing
    Java之父 James Golsing

     

    • 起源
      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,Hadoop,Spark,Flink/Android)。

    • 运行平台
      Java程序是运行在JVM之上的,这就是Java程序跨平台实现的本质原因,而且由于Java的开放性,有越来越多的语言是运行在JVM之上的,例如大数据处理语言Scala,Android开发的Kotlin以及Clojure,Groovy等等。

    1.1.2 Java技术体系平台

    Java自从1998年之后将Java分为三个版本,分别是JavaSE,JavaEE和JavaME,不同的版本有不同的应用场景。

    • JavaSE(Java Standard Edition):标准版Java,提供了完整的Java核心API,主要用于桌面应用开发。

    • JavaEE(Java Enterprise Edition):企业式Java,主要用于企业级后台服务,分布式应用开发

    • JavaME(Java Micro Edition):嵌入式Java,主要用于开发嵌入式设备的产品,例如塞班手机游戏

    由于目前Java主要的擅长领域是企业级后台服务开发、Android移动应用开发以及大数据应用开发,而Java语言是它们的基石语言,因此无论是从事企业级后台服务开发,还是Android以及大数据应用开发,都要先从JavaSE上手。

    1.1.3 Java基础核心技术栈

    如下列表所示,展示了JavaSE阶段的核心技术栈,涵盖了Java语言、类库以及常用第三方开源类库、框架的实现。

    • Java语言基础

      • Java概述与开发环境搭建
      • Java数据存储
      • Java数据运算
      • Java程序流程控制
      • Java数组
      • Java面向对象程序设计(上)
      • Java面向对象程序设计(下)
      • Java开发常用API
    • Java语言高级

      • 集合
      • 泛型
      • 异常处理
      • 数据库编程
      • 注解
      • IO/NIO/AIO
      • AIO网络框架tio设计与实现
      • 多线程
      • 网络编程
      • 反射和动态代理
      • 日志
      • XML
      • 正则表达式
      • Java语言新特性实战
    • Java语言进阶

      • 数据结构
      • 算法
      • 设计模式
      • Apache Commons组件使用
      • RxJava
      • Google Guava
      • JVM
      • Netty实战与源码分析
      • Java程序性能优化
    • JavaSE项目

      • Java实现 HTTP Server
      • Java实现ORM Framework
      • Java实现 RPC Framework

    1.2 Java开发环境搭建

    1.2.1 Java开发环境概述

    Java开发环境主要是在Windows或者macOS上搭建,通常需要安装JDK,IntelliJ IDEA,Git,Maven+Navicat/DataGrip+SecureCRT 以及常用的其他工具,例如Chrome,Visual Studio Code,PowerDesigner,Postman,Jenkins,Gitlab等工具。

    1.2.2 操作系统

    主流的桌面操作系统主要有Windows,macOS,目前绝大部分台式机和笔记本预装的都是Windows操作系统,其操作界面和常用软件如下图所示
    Alienware 17R5 Windows10 1903
    目前最新的版本是Windows10 1903,可以使用winver命令查看
    Windows版本信息查看
    而苹果电脑预装的都是macOS,其操作界面和常用的软件如下图所示


    目前最新的版本是macOS 10.1.4.5,可以选择左上角的苹果菜单->关于本机查看系统版本
    macOS版本

    由于macOS相比Windows更适合Java开发,后期所有Java开发相关的内容都在macOS上实现。

    1.2.3 开发工具安装

    俗话说,工欲善其事必先利其器,掌握一些日常开发中使用的工具、软件能够大大的提高工作效率,工具本身推出的目的也是为了解放生产力。而软件开发是大型团队之间协作,在企业日常开发中,软件的各个版本要跟团队保持一致,避免因为版本不一致导致各种不必要的问题

    Windows上安装的应用程序通常都是.exe或者.msi格式,通常只需要去软件官网下载后双击安装即可。安装时需要注意安装的路径不能包含中文和空格,有些应用软件安装时会连带安装其他不必要的软件(全家桶套装),因为Windows通常是安装在C盘中,如果你的C盘容量比较小,可以修改软件的安装路径。

    macOS上的应用程序通常是.dmg格式,下载打开之后通常都是.kpg或者.app,如果是.kpg需要根据提示进行安装,如果是.app格式,直接拖放到"应用程序"文件夹即可。

    1.3 JDK

    1.3.1 JDK概述

    JDK(Java Development Kit)是Oracle公司推出的包含了开发和运行Java程序的工具集,原SUN公司在2010年被Oracle公司以74亿美金收购,其整体架构如下图所示。
    JDK架构图
    这里结合Java架构图理解JDK,JRE和JVM三者之间的关系。
    JDK(Java Development Kit)包含了开发和运行Java程序所必备的环境,
    JRE(Java Runtime Enviroment)包含了运行Java程序所必备的环境,由JVM和Java核心类库组成
    JVM(Java Virtual Machine)负责解释执行JDK编译生成的字节码文件。

    1.3.2 JDK下载

    想要开发程序就必须去官网下载和安装JDK,目前互联网企业中使用最广泛的JDK版本为JDK8,而目前(2019/07/15)最新的JDK版本为JDK12,其中Oracle官方长期支持的JDK版本为JDK8和JDK11,分别支持到2025年和2026年。而JDK9,10,12都不是官方长期支持的版本,后期的学习中会覆盖所有版本涉及到的新特性。而且JDK是向下兼容,这也就意味着JDK8的特性能在JDK11上运行。

    在日常开发学习中可以选择最新的版本(例如JDK12)学习,而在企业开发中,JDK的版本和线上运行的JDK版本保持一致即可。

    JDK的下载非常容易,在官网获取地址,然后点击同意Lincese,选择对应的系统版本下载即可,如下图所示
    Oracle JDK12下载

    通常开发环境只要选择下载Windows或者macOS的版本即可。
    测试环境以及生产环境需要下载Linux版本,因为国内绝大多数的服务器系统都是Linux(Ubuntu Server和CentOS)

    而Java之所以能跨平台的本质原因是Oracle公司针对不同的操作系统实现了不同的JDK,Java程序只需要和JDK交互即可,JDK屏蔽了底层操作系统的差异性从而实现跨平台。

    1.3.3 macOS安装JDK12

    Oracle官方针对JDK提供了各个平台的安装向导,读者们可以根据自己的操作系统版本查找对应的文档进行安装,这里以JDK12的安装为例,介绍macOS下JDK12的安装过程。

    首先下载JDK,Chrome下载软件的默认路径就是下载,如下图所示,然后双击JDK-12.0.1_osx-64_bin.dmg文件
    JDK12
    会看到JDK 12.0.1.pkg文件
    JDK 12.0.1.pkg
    然后会正式进入JDK的安装过程,首先是介绍
    介绍
    然后选择安装类型,默认是标准安装
    安装类型
    此过程会提示需要输入密码,等待片刻之后JDK就会安装成功
    安装成功

    最后会提示是否删除安装文件,我这里就不删除了。
    是否删除安装文件

    最后需要验证下JDK是否安装成功,打开终端软件iTerm,然后输入命令javac -version 和
    java -version,看到如下命令输出即可。
    验证JDK安装

    1.3.4 macOS JDK配置

    macOS版的JDK默认的安装路径是/Library/Java/JavaVirtualMatchines,如下图所示,分别安装了JDK8,JDK11和JDK12,最后安装的是JDK12,所以javac -version和java -version命令输出的都是JDK12的相关信息。
    JDKs

    如果想要在终端中使用其他的JDK版本,则需要在/etc/profile文件中配置JAVA_HOME和PATH,JAVA_HOME顾名思义指的就是Java的安装家目录,其他Java编写的程序(例如Maven,Tomcat)会依赖这个变量,而PATH是系统路径,它的作用就是系统在执行命令时执行的路径,当我们执行命令时,系统会首先在当前路径下找命令对应的可执行程序,然后去PATH路径下找。

    首先打开终端程序iTerm,然后输入命令sudo vim /etc/profile
    使用vim修改profile文件
    修改profile
    此时vim编辑器处于阅读模式,需要输入i进入编辑模式,然后输入如下内容

    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.3.jdk/Contents/Home
    export PATH=$PATH:$JAVA_HOME/bin

     

    添加加JAVA_HOME和PATH配置
    添加加JAVA_HOME和PATH配置

    最后按esc推出编辑模式,再按wq!保存文件并退出。
    可以使用cat /etc/profile 命令查看编辑后的profile文件内容

     

    liuguangleideMacBook-Pro:~ liuguanglei$ cat /etc/profile
    # System-wide .profile for sh(1)
    
    if [ -x /usr/libexec/path_helper ]; then
        eval `/usr/libexec/path_helper -s`
    fi
    
    if [ "${BASH-no}" != "no" ]; then
        [ -r /etc/bashrc ] && . /etc/bashrc
    fi
    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.3.jdk/Contents/Home
    export PATH=$PATH:$JAVA_HOME$/bin

    此时的配置修改并没有生效,还需要使用source /etc/profile命令让修改的配置生效。
    然后再次使用

    liuguangleideMacBook-Pro:~ liuguanglei$ source /etc/profile
    

    然后再次运行javac -version和java -version命令,输出的运行结果显示JDK版本已经切换到JDK11.0.3

    liuguangleideMacBook-Pro:~ liuguanglei$ javac -version
    javac 11.0.3
    liuguangleideMacBook-Pro:~ liuguanglei$ java -version
    java version "11.0.3" 2019-04-16 LTS
    Java(TM) SE Runtime Environment 18.9 (build 11.0.3+12-LTS)
    Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.3+12-LTS, mixed mode)

    1.4 Java版HelloWorld

    HelloWorld作为一门编程语言的入门程序,如果能够编写和运行HelloWorld,表示迈向编程入门的大门了,Java版本的HelloWorld需要经过编写、编译、运行三个步骤。

    1.4.1编写Java源文件

    为了照顾初学者,这里使用macOS+JDK+Visual Stuido Code编辑器来实现编写Java源文件,开发环境具体的版本如下所示

    软件名称软件版本
    操作系统 macOS10.14.5
    JDK JDK11.0.3
    编辑器 Visual Studio Code 1.36.1

    在编写源文件之前首先在/Users/liuguanglei/Documents/下创建一个code目录,用来存放Java程序的源文件。

    然后去Visual Studio Code的官网下载并安装,官网提供了各个操作系统的版本下载。
    Visual Studio Code

    下载之后将VSCode-darwin-stable.zip包解压后将Visual Studio Code拖放到“应用程序”文件夹即可使用了。
    mac 应用程序文件夹

    首先启动Visual Studio Code
    Visual Studio Code

    然后打开/User/liuguanglei/Documents/code文件夹
    Open Folder

    选择code目录,即后期编写的代码都会存在该目录。
    /User/liuguanglei/Documents/code

    然后在code目录下创建源文件HelloWorld.java
    Java程序的源文件都是.java结尾,为了方便阅读代码,在编写源文件中应该适当的添加Tab和换行。
    创建HelloWorld源文件

    HelloWorld.java源文件的内容如下图所示
    HelloWorld.java

    源文件的Java代码如下所示

    public class HelloWorld{
        public static void main(String[]args){
            System.out.println("Hello World With macOS & Visual Studio Code");
        }
    }

    每个Java源文件可以包含多个class,但是只能有一个class使用public修饰,而且public修饰的类名必须和源文件名一致。针对包含多个class的源文件,javac编译源文件时生成对应数量的class文件,字节码的文件名和源文件中的class类名一致。

    Windows不区分大小写,Java严格区分大小写,例如System和system是完全不同的含义。

    1.4.2 编译Java源文件

    JDK中提供了编译Java源程序的命令javac,由于之前在/etc/profile文件中配置过JAVA_HOME和PATH,因此可以在系统的任意路径下使用javac命令编译java源程序。

    首先在终端中使用cd命令切换到相对路径 Documents/code目录,然后使用javac命令编译源文件HelloWorld.java,如下图所示。

     

    编译Java源文件
    编译Java源文件

     

    liuguangleideMacBook-Pro:~ liuguanglei$ cd Documents/code
    liuguangleideMacBook-Pro:code liuguanglei$ javac HelloWorld.java

    javac编译HelloWorld.java会生成HelloWorld.class的字节码文件
    javac生成HelloWorld.class

    1.4.3 运行Java程序

    JDK中提供了运行Java程序的命令java,在终端中运行java HelloWorld即可运行java程序,命令如下所示。

    liuguangleideMacBook-Pro:code liuguanglei$ java HelloWorld
    Hello World With macOS & Visual Studio Code #程序输出结果

    如果想要独立运行Java程序,源文件中必须包含固定格式的main方法,main方法是Java程序的执行入口,所有的代码都在这里开始执行,代码片段如下所示

    public static void main(String[]args){
        
    }

    而如果想要在运行Java程序时想要看到效果,可以使用System.out.println()输出语句实现,它能输出传递数据的内容并完成换行,例如这里的"Hello World With macOS & Visual Studio Code"。如果不想换行,可以使用System.out.print()实现。输出语句在后期调试程序时也会用于观察程序运行的数据变化。

    main方法花括号{}中的每条语句语句以英文分号结束,例如

    System.out.println("HelloWorld");

    1.4.4 Visual Studio Code的Java插件使用

    每次在Visual Studio Code中编写完Java源程序后还需要打开终端,切换到源程序的路径下,然后使用javac和java命令编译和运行Java程序,此过程是非常繁琐的,Visual Studio Code提供了Java插件,可以让开发者们非常方便的运行和调试Java程序。

    首先切换到Visual Studio Code的Extends视图,然后搜索Java Extension Pack,点击安装即可,如下图所示
    Visual Studio Code Java插件
    安装完成以后,需要重启Visual Studio Code,然后再次打开HelloWorld.java源文件,便可以看到出现Run和Debug两个按钮,分别用于运行和调试Java程序。
    Run and Debug
    运行程序只需要点击Run,然后观察DEBUG CONSOLE的输出结果即可。
    运行程序

    如果想要在Visual Stuido Code中切换Java的版本(例如切换到JDK1.8),可以修改
    /Users/liuguanglei/Library/Application Support/Code/User 路径下的setting.json文件,添加配置 "java.home":"/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home" 即可。
    java.home

    如果想要测试效果,可以借助JDK的API实现,应用程序SystemProperty.java如下所示

    public class SystemProperty{
        public static void main(String[]args){
            //获取所有的Java内置属性
            System.getProperties().list(System.out);
            //输出Java的版本信息
            System.out.println("当前使用的Java版本信息是"+System.getProperty("java.version"));
        }
    }

    观察程序输出结果,发现在Visual Studio Code中已经切换为JDK1.8
    切换Java版本

    如果想要了解更多关于Visual Studio Code的内容,可以访问官网https://code.visualstudio.com/docs?start=true

    1.5 Java程序的运行机制

    Java源程序首先要经过C语言实现的javac编译器将源文件编译生成和平台无关的字节码文件(.class结尾的文件),如果源文件中有Java语法错误,则会导致无法编译通过
    然后在运行时通过Java虚拟机内嵌的解释器将字节码转换为真正的机器码。

    源程序是需要遵守Java语言规范,字节码文件是需要遵守JVM规范。
    如果想要了解Java语言规范和JVM规范,可以拜读官方文档,其官网地址是https://docs.oracle.com/javase/specs/index.html

    1.6 注释

    1.6.1 注释概述

    注释(Comment)是用于描述程序的文字信息,Java中的注释分为如下三种

    • 单行注释:注释一行内容,使用//表示,通常在方法内容使用
    • 多行注释 注释多行内容, 使用/**/表示,通常在方法内部使用,多行注释不能嵌套,否则会发生编译错误
    • 文档注释 用于生成Java API文档,使用/***/表示,通常在类上,属性上和方法上使用,可以使用javadoc -d 文档目录 源文件名生成API文档

    在日常开发中应该多写注释,便于程序后期维护,而在程序调试的过程中,也可以通过注释部分代码来调试程序,注释的内容在javac编译时都会删除,不会影响程序的运行结果。

    1.6.2 注释的使用

    源程序HelloWorld.java中添加了三种注释。

    
    /**
     * Java版本HelloWorld
     */
    public class HelloWorld{
        /**
         * 程序的入口,所有代码从这里开始执行
         * @param args
         */
        public static void main(String[]args){
            //向终端输出Hello World With macOS & Visual Studio Code
            System.out.println("Hello World With macOS & Visual Studio Code");
    
            /*
             * 学习编程的方法
             * 1. 看视频
             * 2. 敲代码
             * 3.总结文章,发博客
             */
        }
    }

    再次运行结果时不会影响程序的运行结果
    HelloWorld源文件添加注释后运行结果

    1.6.3 文档注释

    文档注释是使用JDK提供的javadoc工具生成基于网页的API文档,我们可以在终端上运行javadoc -d 路径 源文件.java 生成帮助文档。

    liuguangleideMacBook-Pro:code liuguanglei$ javadoc -d /Users/liuguanglei/Documents/doc/ HelloWorld.java
    正在加载源文件HelloWorld.java...
    正在构造 Javadoc 信息...
    标准 Doclet 版本 11.0.3
    正在构建所有程序包和类的树...
    正在生成/Users/liuguanglei/Documents/doc/HelloWorld.html...
    HelloWorld.java:8: 警告: @param 没有说明
         * @param args
           ^
    正在生成/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...
    1 个警告

    然后使用Chrome打开/Users/liuguanglei/Documents/doc/目录下的index.html文件,便会看到如下的JDK API文档信息。
    index.html

    1.7 Java API 文档使用

    JDK中封装了大量开发中常用的API(Application Programming Interface),其文档也是使用javadoc实现的,JDK12的API文档地址是 https://docs.oracle.com/en/java/javase/12/docs/api/index.html

    后期会学习JDK提供的日常开发中常用类,可以使用搜索框搜索指定的类(例如java.lang.String)来查看类提供的方法,成员变量等等信息,如下图所示。
    search String

    macOS还可以通过安装应用程序Dash来实现离线查阅JDK帮助文档

    Dash 是使用与Mac OS平台的软件编程文档管理工具,可以浏览API文档,以及管理代码片段工具。Dash自带了丰富的API文档,涉及各种主流的编程语言和框架。 Dash内置了丰富的API文档,让我们集中管理API文档,包括下载、搜索、查阅并支持集成到XCode、Alfred等软件中,非常的强大!

    下载安装Dash后,启动Dash,然后点击Download Docsets
    Download Docsets
    在搜索框中搜JavaSE,然后选择对应的版本下载即可。
    搜搜Java SE并安装
    下载完成之后,即使没有网络,也可以在Dash中查阅JDK API文档
    Dash中查看JDK文档

  • 相关阅读:
    解决CollectionView TableView reloadData或者reloadSections时的刷新的闪烁问题
    HTTP请求头
    Fastlane 使用笔记
    python-函数式编程
    python-高级特性
    python基础使用
    python基础-函数02
    python基础-函数01
    python基础
    Linux基础
  • 原文地址:https://www.cnblogs.com/ittimeline/p/11074988.html
Copyright © 2011-2022 走看看