Java快速入门(一)


目录:

Java快速入门(一)

为什么要学Java?

​ 因为Java工程师是市场需求最大的软件工程师。 从互联网到企业平台,Java是应用最广泛的编程语言。

Java的特点

  • Java是基于JVM虚拟机的跨平台语言,一次编写,到处运行;
  • Java程序易于编写,而且有内置垃圾收集,不必考虑内存管理;
  • Java虚拟机拥有工业级的稳定性和高度优化的性能,且经过了长时期的考验;
  • Java拥有最广泛的开源社区支持,各种高质量组件随时可用。

Java语言常年霸占着三大市场:

  • 互联网和企业应用,这是Java EE的长期优势和市场地位;
  • 大数据平台,主要有Hadoop、Spark、Flink等,他们都是Java或Scala开发的;
  • Android移动平台。

Java简介

      Java最早是由SUN公司(已被Oracle收购)的[詹姆斯·高斯林](https://en.wikipedia.org/wiki/James_Gosling)(高司令,人称Java之父)在上个世纪90年代初开发的一种编程语言,最初被命名为Oak,目标是针对小型家电设备的嵌入式应用,结果市场没啥反响。

  ​   谁料到互联网的崛起,让Oak重新焕发了生机,于是SUN公司改造了Oak,在1995年以Java的名称正式发布,原因是Oak已经被人注册了,因此SUN注册了Java这个商标。随着互联网的高速发展,Java逐渐成为最重要的网络编程语言。

Java版本

从1995年发布1.0版本开始,到目前为止,最新的Java版本是Java 18:

时间 版本
1995 1.0
1998 1.2
2000 1.3
2002 1.4
2004 1.5 / 5.0
2005 1.6 / 6.0
2011 1.7 / 7.0
2014 1.8 / 8.0 (LTS)
2017/9 1.9 / 9.0
2018/3 10
2018/9 11 (LTS)
2019/3 12
2019/9 8
2020/3 14
2020/9 15
2021/3 16
2021/9 17 (LTS)
2022/3 18

JAVA 18 已于 2022年3月22日发布。

Java的特点

Java是介于编译型语言和解释型语言之间。

​ 编译型语言如C、C++,代码是直接编译成机器码执行,但是不同的平台(x86、ARM等)CPU的指令集不同,因此,需要编译出每一种平台的对应机器码。解释型语言如Python、Ruby没有这个问题,可以由解释器直接加载源码然后运行,代价是运行效率太低。

​ 而Java是将代码编译成一种“字节码”,它类似于抽象的CPU指令,然后,针对不同平台编写虚拟机,不同平台的虚拟机负责加载字节码并执行,这样就实现了“一次编写,到处运行”的效果。当然,这是针对Java开发者而言。对于虚拟机,需要为每个平台分别开发。为了保证不同平台、不同公司开发的虚拟机都能正确执行Java字节码,SUN公司制定了一系列的Java虚拟机规范。从实践的角度看,JVM的兼容性做得非常好,低版本的Java字节码完全可以正常运行在高版本的JVM上。

随着Java的发展,SUN给Java又分出了三个不同版本:

  • Java SE:Standard Edition (标准版)
  • Java EE:Enterprise Edition (企业版)
  • Java ME:Micro Edition (嵌入式)

这三者之间有啥关系呢? Java SE就是标准版,包含标准的JVM和标准库;

​ Java EE是企业版,它只是在Java SE的基础上加上了大量的API和库,以便方便开发Web应用、数据库、消息服务等,Java EE的应用使用的虚拟机和Java SE完全相同。

​ Java ME是一个针对嵌入式设备的“瘦身版”,Java SE的标准库无法在Java ME上使用,Java ME的虚拟机也是“瘦身版”。

​ Java SE是整个Java平台的核心。

​ Java EE是进一步学习Web应用所必须的。我们熟悉的Spring等框架都是Java EE开源生态系统的一部分。

​ Java ME从来没有真正流行起来,反而是Android开发成为了移动平台的标准之一,因此,没有特殊需求,不建议学习Java ME。

┌───────────────────────────┐
│Java EE                    │
│    ┌────────────────────┐ │
│    │Java SE             │ │
│    │    ┌─────────────┐ │ │
│    │    │   Java ME   │ │ │
│    │    └─────────────┘ │ │
│    └────────────────────┘ │
└───────────────────────────┘

因此我们推荐的Java学习路线图如下:

  • 首先要学习Java SE,掌握Java语言本身、Java核心开发技术以及Java标准库的使用;
  • 如果继续学习Java EE,那么Spring框架、数据库开发、分布式架构就是需要学习的;
  • 如果要学习大数据开发,那么Hadoop、Spark、Flink这些大数据平台就是需要学习的,他们都基于Java或Scala开发;
  • 如果想要学习移动开发,那么就深入Android平台,掌握Android App开发。

无论怎么选择,Java SE的核心技术是基础,这个教程的目的就是让你完全精通Java SE!

  • JDK:Java Development Kit (Java开发工具包)
  • JRE:Java Runtime Environment (Java运行时环境)
  • JVM: avaVirtualMachine (Java虚拟机)

三者关系如下:

  ┌─    ┌──────────────────────────────────┐
  │     │     Compiler, debugger, etc.     │
  │     └──────────────────────────────────┘
 JDK ┌─ ┌──────────────────────────────────┐
  │  │  │                                  │
  │ JRE │      JVM + Runtime Library       │
  │  │  │                                  │
  └─ └─ └──────────────────────────────────┘
        ┌───────┐┌───────┐┌───────┐┌───────┐
        │Windows││ Linux ││ macOS ││others │
        └───────┘└───────┘└───────┘└───────┘

Java 跨平台的原理

  • 编译之后会生成与平台无关的字节码文件
  • 得依赖不同平台的虚拟机(JVM)

安装Java

# Ubuntu/Deepin
sudo apt install openjdk-11-jdk

配置环境

vim ~/.bashrc

  • export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
  • export PATH=$PATH:$JAVA_HOME/bin

JAVA_HOMEbin目录下找到很多可执行文件:

  • java:这个可执行程序其实就是JVM,运行Java程序,就是启动JVM,然后让JVM执行指定的编译后的代码;
  • javac:这是Java的编译器,它用于把Java源码文件(以.java后缀结尾)编译为Java字节码文件(以.class后缀结尾);
  • jar:用于把一组.class文件打包成一个.jar文件,便于发布;
  • javadoc:用于从Java源码中自动提取注释并生成文档;
  • jdb:Java调试器,用于开发阶段的运行调试。

第一个Java程序

 vim Feibo.java
public class Feibo{
    public static void main(String[] args){
        int a = 0;
        int b = 1;
        int c = 0;
        for(int i = 0;i<=20;i++){
            System.out.println(a);
            c = a;
            a = b;
            b = a + c;
        }
    }
}
# 命令行中编译java源码
javac Feibo.java
# 生成同名class文件  FeiBo.class
# 使用java命令执行,注意不要加后缀。
java Feibo
0
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
# 生成jar包
jar -cvf feibo.jar Feibo.class 
已添加清单
正在添加: Feibo.class(输入 = 508) (输出 = 361)(压缩了 28%)

# 解压jar包
jar -xvf feibo.jar 
  已创建: META-INF/
  已解压: META-INF/MANIFEST.MF
  已解压: Feibo.class
Feibo.class  feibo.jar  Feibo.java  META-INF

# 打开MANIFEST.MF
vim META-INF/MANIFEST.MF

Manifest-Version: 1.0
Created-By: 11.0.9.1 (Uos)
# 需要增加一行设置入口类,注意":"后要跟一个空格
Main-Class: Feibo

# 更新jar包
jar -umf META-INF/* feibo.jar 

# 或者重新打包
# jar -cvfm feibo.jar  META-INF/MANIFEST.MF  Feibo.class

# 运行jar包
java -jar feibo.jar 
0
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765