Java初探
javac 编译环境
java 运行环境
jdk: java development kit
如果只有Java源码,要编译成Java字节码,就需要JDK,因为JDK除了包含JRE,还提供了编译器、调试器等开发工具
jre: java runtime environment 运行Java字节码的虚拟机
image.png细心的童鞋还可以在JAVA_HOME的bin目录下找到很多可执行文件:
java:这个可执行程序其实就是JVM,运行Java程序,就是启动JVM,然后让JVM执行指定的编译后的代码;
javac:这是Java的编译器,它用于把Java源码文件(以.java后缀结尾)编译为Java字节码文件(以.class后缀结尾);
jar:用于把一组.class文件打包成一个.jar文件,便于发布;
javadoc:用于从Java源码中自动提取注释并生成文档;
jdb:Java调试器,用于开发阶段的运行调试。
除了Oracle的Java,还有的选么?
有,不仅有,而且非常多。这里我随便列几家(摘自sdk list java):
- AdoptOpenJDK
- Amazon
- Azul Zulu
- BellSoft
- SAP
- TravaOpenJDK
是不是有点意思了?
当然这都源于06年的时候,Sun公司做的一个无比英明的决定,就是搞开源版的Java,后来便有了OpenJDK项目,真是大写的服字。那年笔者刚上大学,不过还没等我大学毕业,Sun公司转眼就被Oracle给收购了,怎不令人唏嘘?
-------------------------------分割线----------------------------------
顺便再提一下这两天刚发生的有意思的事情:Apple公司不是在几天前(2020-11-11)刚刚发布了他们基于ARM架构的新Mac么,而就在前不久,微软站出来说给Java贡献代码,为了实现Java向Apple的新架构的适配。我还在新闻下面看到一个评论,大意是说曾几何时,微软的JVM还是特别厉害的JVM实现呢。
所以,Java虽然名义上是Oracle的,但因其开源的历史渊源,其实很多公司都对它投入了相当大心血,包括很多大佬级别的公司,比如华为公司也是贡献过不少代码的。这些全球顶尖的公司,共同维持着Java世界的秩序。现在Java的迭代速度又坐上火箭了,所以网上那些非要较真引战的伪技术帖,动不动就唱衰Java,我觉得还为时过早。
如果你是名前端程序员,想学学后端,技多不压身想法的话,我觉得后端学什么都挺好;但是如果你是打算吃后端这碗饭,我个人还是首推Java的。
但是Java写起项目来,仪式感真是太强了(贬义),对新人极度不友好。有时候别说是新人了,那种充满了仪式感的样板语言,还有言Java必Spring的无脑式安利,对老人也是一种摧残。
这里我推荐几个框架,让大家从Spring的樊笼中解放出来
- 上手难度:★☆☆☆☆
- 学习曲线:★☆☆☆☆
- 功能强大:★★☆☆☆
- 场景推荐:入门学习或者个人微型项目使用
2. Micronaut
- 上手难度:★★☆☆☆
- 学习曲线:★★★☆☆
- 功能强大:★★★★☆
- 场景推荐:有Java Web开发经验的团队使用
3. Vert.x
- 上手难度:★☆☆☆☆
- 学习曲线:★★★☆☆
- 功能强大:★★★★★
- 场景推荐:有异步编程基础的个人或团队,需要应对高并发项目使用
4. Quarkus
- 上手难度:★★☆☆☆
- 学习曲线:★★★★☆
- 功能强大:★★★★★
- 场景推荐:离不开Java生态,团队战力强,做云原生项目使用
以上几款框架都是发展态势非常好的框架,笔者多多少少也在项目里用过,所以就根据自己的经验做了推荐。具体还得各位看看文档,自己斟酌食用。
当你打开上面几个框架的官网,应该还会发现另外一个有意思的事情——几乎这些框架都支持多种语言。我个人最喜欢Vert.x,它也是最神勇的一个。来看看它支持的语言吧,下面是其官网的截图:
image.png醒目的“Polyglot”,相当给力的多语言支持。这又是怎么回事呢?咱们开始下一个议题。
Java不止Java
我们都知道Java程序实际上是靠Java虚拟机,也就是JVM解释执行Java字节码运行的(当然也有例外,这个以后有机会展开说)。所以用什么语言写代码其实反而没那么重要,只要最后经过编译,能搞成字节码在JVM上执行就行了。微软也是这么干的鼻祖,近几年前端JS、TS也得编译编译,最后被浏览器执行,我觉得也都是这么个意思。
那么,在Java生态里,可以编译成字节码被JVM运行的语言有多少呢?我列几个给大家看看:
- Ruby对应的JRuby
- Python对应JPython
- Groovy
- Scala
- Clojure
- Kotlin
上面这几个兄弟,在JVM面前,跟老大哥Java语言基本上也平起平坐了,用起来都算方便的。可以根据自己的经验,比如之前用Ruby、Python什么的可以继续用着;而搞科研的一般Scala用得比较多,不过你要是没听过,基本也就别用了,曲高和寡啊;Kotlin现在如日中天,如果你除了是全栈,也想搞搞全端开发,Kotlin还是很推荐的;我自己呢,Groovy用得比较多,这是一款动静两相宜的语言,用过都说好。
对比一下上一小节的图片,唯独少了JavaScript,这又是怎么回事呢?这个又是个有意思的事了。
附:java学习教程
-
Java 基础教程(Java Basics)- Codecademy:
Codecademy 提供了一个互动式的 Java 基础教程,适合新手入门学习。课程通过实际的编码练习和指导,帮助学习者掌握 Java 的核心概念和语法。
链接:https://www.codecademy.com/learn/learn-java -
Java 教程(Java Tutorial for Complete Beginners)- Udemy:
这门课程由 John Purcell 在 Udemy 上提供,适合完全没有编程经验的新手学习。课程内容简洁明了,并通过实例演示和练习帮助学习者理解 Java 的基础知识和编程技巧。
链接:https://www.udemy.com/course/java-tutorial/ -
Java 入门教程(Java for Beginners)- FreeCodeCamp:
FreeCodeCamp 提供了一个免费的 Java 入门教程,适合初学者入门。该教程以易于理解和亲和力强的方式解释了 Java 的基础概念,并提供了许多实践项目来帮助学习者巩固所学内容。
链接:https://www.freecodecamp.org/news/java-tutorial-for-beginners/ -
Java全栈知识体系
链接:https://pdai.tech/md/spring/springboot/springboot-x-file-upload-download.html