— 学无止境 转向Java 拥抱开源 —
人在遇到才能时抱有的感情有三个,『感叹』 『恐怖』还有『嫉妒』
不辜负年华,做自己想做的事,唱自己想唱的歌

Java特性

  • Java是基于JVM虚拟机的跨平台语言,一次编写,到处运行;

  • 易于编写,有内置垃圾收集,不必考虑内存管理;

  • 拥有最广泛的开源社区支持,各种高质量组件随时可用。

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

编译型语言如C、C++,代码是直接编译成机器码执行,但是不同的平台(x86、ARM等)CPU的指令集不同,因此,需要编译出每一种平台的对应机器码。

解释型语言如Python、Ruby没有这个问题,可以由解释器直接加载源码然后运行,代价是运行效率太低。

而Java是将代码编译成一种“字节码”,它类似于抽象的CPU指令,然后,针对不同平台编写虚拟机,不同平台的虚拟机负责加载字节码并执行,这样就实现了“一次编写,到处运行”的效果。

当然,这是针对Java开发者而言。对于虚拟机,需要为每个平台分别开发。为了保证不同平台、不同公司开发的虚拟机都能正确执行Java字节码,SUN公司制定了一系列的Java虚拟机规范。从实践的角度看,JVM的兼容性做得非常好,低版本的Java字节码完全可以正常运行在高版本的JVM上。

Java版本

  • Java SE:Standard Edition
  • Java EE:Enterprise Edition
  • Java ME:Micro Edition
    关系图
    .png

    Java SE就是标准版,包含标准的JVM和标准库;

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

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

    Java SE是整个Java平台的核心,而Java EE是进一步学习Web应用所必须的。Spring等框架都是Java EE开源生态系统的一部分。不幸的是,Java ME从来没有真正流行起来,反而是Android开发成为了移动平台的标准之一,因此,没有特殊需求,不建议学习Java ME。

Java规范

  • JSR规范:Java Specification Request
  • JCP组织:Java Community Process

JSR是一系列的规范,从JVM的内存模型到Web程序接口,全部标准化,便于使用者对开发者接口的调用。

  • Java大小写敏感,以;结束一个语句

  • Java规定,某个类定义的public static void main(String[] args)是程序的固定入口方法,Java程序总是从main方法开始执行

  • Java源码的缩进不是必须的,但是用缩进后,格式好看,很容易看出代码块的开始和结束,缩进一般是4个空格或者一个tab

注意

一个Java文件只能定义一个public类型的class,并且class名称和文件名要完全一致。

Java编译

  • .java 结尾是源码文件
  • .class 结尾是字节码文件

Java源码本质上是一个文本文件,需要先用javac ***.java***.java文件编译成字节码文件***.class,然后,用java ***命令执行这个字节码文件,默认从文件中的main方法开始执行:
.png
因此,可执行文件javac是编译器,而可执行文件java就是虚拟机。

Java11后,添加一个新的功能,可直接运行Java ***.java,执行文件的代码,前提是不依赖其他库的情况下。