事到如今还写 Java 的文章,似乎有点过时,不过我想重新梳理一下自己的知识,所以在这里记录一下用 IntelliJ Idea 开始学 Java 时最好先了解的一些事情。 这只是我个人的整理笔记。

安装 Java 时需要注意的事

目前,如果使用 OracleJDK,免费使用仅限于个人用途和开发用途。 如果只是用 Java 来学习,完全不用在意;但如果打算在生产环境中使用 Java,就要收费了,需要注意。

市面上有各种各样的二进制发行版,各家厂商也都在提供付费支持,Java 圈子里到处都是钱的味道。笑 我稍微查了一下,也没搞清楚到底哪个最好,不过如果只是想不用操心费用地使用,那么选择 AdoptOpenJDK(HotSpot) 的 LTS 版本应该就没问题。 只要不是那种非常重度的企业环境,或者你能自己解决问题,就可以一直免费用下去。

支持周期(bug 修复等)能持续多久,请在这里确认:

https://adoptopenjdk.net/support.html

话说回来,对比一下 Swift:虽说是开源的,却被锁定在 Apple 生态里,面对面的支持一年只有一次 WWDC,而且还要抽签、价格昂贵。相比之下,付费支持在某些使用场景下也未尝不可。Swift 虽然也有论坛,但回答只是尽力而为,想让别人处理你的具体问题几乎不可能。(笔者平时主要使用 Swift)

拿 Java 来做什么

首先,我打算用它来学习算法、打竞技编程之类。 另外,许多库和架构都诞生于 Java,像 Functional Programming 这种传统 Java 所没有的编程范式也被吸收了进来,作为系统学习 CS 的素材,Java 大概是最好的选择。 它不像 Go、Rust 那样锋芒毕露,给人一种不太起眼的印象,但兜兜转转一圈回来,会发现它是一门很好用的语言。

——最后,请谈谈您心目中"Java 的优点"。

Kishida:Java 是一门什么都能做的语言。桌面应用、服务端、手机应用、业务系统、服务型应用都可以做。机器学习目前还不算很擅长,但将来一定会变得更轻松。掌握了 Java,就能涉足各种各样的领域,我认为这是它的优势。

另外,正如刚才提到的,Java 一直在努力去适配新的基础技术,跟随这个潮流,本身就会成为自己学习新技术的动力。不只是语言本身,库、框架、运行时加在一起才是 Java。覆盖面之广,正是 Java 最大的优点。

(来源:https://employment.en-japan.com/engineerhub/entry/2019/10/29/103000)

创建 main function

Java 的一个特点(?)就是离 Hello World 的路很长。 要运行 Java 应用程序,首先需要一个 main function。 每次都复制粘贴太麻烦了,所以让 IDE 在你输入 main… 时自动生成函数会很方便。

https://www.jetbrains.com/help/idea/creating-and-running-your-first-java-application.html

了解构建工具

下面这些比较有名:

现在用 Java 新建项目的话,基本上都是 gradle,偶尔是 maven。 gradle 和 maven 我平时就在用,比较熟悉,但 ant 几乎没用过。以后大概也不会用,不过还是稍微总结一下。

ant

在上面列出的工具中,它是最古老的构建工具。 NetBeans 里居然至今还在用它(惊)。

它用 Java 编写,据说被设计成通用构建工具,也可以用来编译 C 语言等,不过我从来没见过有人真这么用。笑 可以编写自己的扩展(antlibs)来添加自定义任务。

定义任务时,使用一个叫 build.xml 的文件来代替 Makefile

ant 本身不包含模块依赖管理功能。虽然可以把 jar 文件放到 classpath 里来添加依赖,但要想自动管理依赖,就需要引入 ivy。

ivy

依赖管理工具。可以用比 maven 更简洁的 xml 来描述依赖管理。通常作为 ant 的补充来使用。

创建一个像下面这样的 ivy.xml

<ivy-module version="2.0">
    <info organisation="org.apache" module="hello-ivy"/>
    <dependencies>
        <dependency org="commons-lang" name="commons-lang" rev="2.0"/>
        <dependency org="commons-cli" name="commons-cli" rev="1.0"/>
    </dependencies>
</ivy-module>

然后在 build.xml 里追加以下内容:

<project xmlns:ivy="antlib:org.apache.ivy.ant" name="hello-ivy" default="run">

    ...

    <!-- =================================
          target: resolve
         ================================= -->
    <target name="resolve" description="--> retrieve dependencies with Ivy">
        <ivy:retrieve/>
    </target>
</project>

ant 构建时,依赖关系会被自动解析。

在刚问世的年代,这一定是划时代的吧……

习惯 IntelliJ

这个只能靠每天打开它来练了。乘着最近(2020 年 4 月,一种叫作新冠病毒的新型病毒正在全球大流行)居家办公的潮流,我也每天在家里闷闷地度日,于是尽量利用空余时间打开 IntelliJ 写点什么代码。 就我个人而言,用文本编辑器写 Java 太痛苦了(虽然不是不可能)。掌握 IntelliJ 的 hot key,生产力会高得多。 话虽如此,如今借助实现了 LSP 的各种文本编辑器扩展,也能获得接近 IDE 的功能,比以前好上手多了。

说到底,最重要的还是埋头默默写代码。 总之,先把 Effective Java 放在手边,加油吧。