「MoreThanJava」Day 1:环境搭建和程序基本结构元素

  • 「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是本身在结合各方面的知识以后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」
  • 固然 不论新老朋友 我相信您均可以 从中获益。若是以为 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取连接,您的支持是我前进的最大的动力!

Part 0. 搭建好开发环境

在一切开始以前,咱们须要先搭建好咱们的 开发环境 (从前文得知 Java 程序的运行须要 JVM,编写 Java 代码须要 IDE),或者在您彻底准备好以前能够 暂时使用 在线版本的 Java 环境来运行前面一些内容涉及的简单代码:https://c.runoob.com/compile/10php

安装 JDK 并配置环境

JVM、JRE 和 JDK 有什么关系?

  • JVM(Java Virtual Machine,Java 虚拟机):是整个 Java 实现跨平台的最核心的部分,可以运行以 Java 语言写做的软件程序。
  • JRE(Java Runtime Environment,Java 运行环境):是运行 JAVA 程序所必须的环境的集合,包含 JVM 标准实现及 Java 核心类库。
  • JDK(Java Development Kid,Java 开发开源工具包):是针对 Java 开发人员的产品,是整个 Java 的核心,包括了 Java 运行环境 JRE、Java 工具和 Java 基础类库。

这三者的关系是一层层的嵌套关系:JDK > JRE > JVMhtml

JDK 包含了 Java 的编译器、调试器等一系列开发工具,因此做为开发人员咱们须要安装 JDK,而某一些只须要运行编译好的 Java 程序的服务器则能够只安装 JRE 便可 (极少数状况,一般仍是安装 JDK)

下载安装 JDK

Java 程序必须运行在 JVM 之上,因此咱们第一件事情就是安装 JDK。咱们选择最新的 JDK 14 进行安装:java

官网地址:https://www.oracle.com/java/technologies/javase-downloads.html

选择合适本身电脑平台的 JDK 进行下载安装便可:git

配置环境

Windows 平台

第一步程序员

在 Windows 安装以后须要额外 配置环境变量,首先【右键个人电脑】 → 选择【属性(R)】 → 打开【高级系统设置】:github

第二步shell

在【高级】标签下选择【环境变量】,并对环境变量【path】进行编辑操做:数据库

第三步编程

新建环境变量,而后把刚才安装 jdk 的安装路径复制进去,路径截止到 bin 目录:数组

第四步

快捷键【Win + R】输入【cmd】调出 dos 窗口,输入【java -version】进行验证:

Mac 平台

第一步

打开苹果 dos 窗口,先确认本身使用的 shellzsh 仍是 bash,在命令行中输入 echo $SHELL

  • 若是输出 /bin/bash 则为 bash;
  • 若是输出结果为 /bin/zsh 则为 zsh

第二步

根据上面不一样的结果 修改 shell 配置文件,若为 bash,则打开 ~/.bash_profile,若为 zsh 则打开 ~/.zshrc,在响应的文件末尾添加如下内容,并保存:

export JAVA_HOME=$(/usr/libexec/java_home)

第三步

~/ 目录,命令行执行 source 命令:一样若是是 bash,则执行 source .bash_profile,而若是是 zsh,则执行 source .zshrc让刚才的修改生效

第四步

命令行执行 java -version 检查是否配置成功:

Java 的不一样版本

随着 Java 的发展,SUN 公司给 Java 分出了三个不一样版本:

  • Java SE(Standard Edition):标准版,包含标准的 JVM 和标准库;
  • Java EE(Enterprise Edition):企业版,在 SE 的基础上加了大量的 API 和库,以方便开发 Web 应用、数据库、消息服务等;
  • Java ME(Micro Edition):是针对嵌入式设备 "瘦身" 以后的 Java SE;
毫无疑问,Java SE 是 Java 平台的核心,而 Java EE 是进一步学习 Web 应用所必须的。

安装 IDEA 开发工具

体验记事本编写运行 Java 程序

Java 源代码本质上其实就是普通的文本文件,因此理论上来讲任何能够编辑文本文件的编辑器均可以做为咱们的 Java 代码编辑工具。好比:Windows 记事本、Mac OS X 下的文本编辑、Linux 下的 vi 等。

可是这些简单工具没有「语法的高亮提示」、「自动完成」等功能,这些功能的缺失会 大大下降代码的编写效率

第一步:新建一个 HelloWorld.java 文件

而后输入如下内容并保存:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
  • 注意HelloWorld.java 文件名不容许出现空格,以及要保证和第一行 class 后跟着的字符串 HelloWorld 保持一致;

第二步:编译和运行

将 Java 源程序编写并保存到文件以后,还须要进行编译才能运行。编译 Java 源程序使用的是 JDK 中的 javac 命令,例如编译上节的 HelloWorld.java,完整命令以下:

javac HelloWorld.java

该命令会让 Java 编译器读取 JavaWorld.java 文件的源代码,并把它编译成符合 Java 虚拟机规范的字节码文件 (.class 文件)

HelloWorld 源代码和字节码文件

想要运行字节码文件也须要使用 JDK 中的 java 命令,例如运行上面生成的 .class 文件,完整命令以下:

java HelloWorld

具体效果以下:

更加智能的 IDEA

官网:https://www.jetbrains.com/idea/

尽管可以使用文本编辑器来编写咱们的 Java 程序,但效率着实不敢恭维,因此咱们通常使用更加先进的 集成开发工具 (俗称 IDE,Integrated Development Environment)

不只仅包含更加智能的代码编辑器、编译器、调试器,还有友好的用户界面以及各式各样帮助咱们提高效率的插件。

对于效率这方面,下面咱们就几个方面简单感觉一下。

更友好的代码提示功能

不只仅是基础的关键字的提醒,IDEA 会基于当前的上下文 (也就是基于位于当前代码上下的代码进行分析),更加智能的进行过滤和提醒:

强大的纠错能力

咱们老是会犯一些低级错误,好比一不留神打错一个字母,可能找了很久都找不到错误所在,IDEA 的纠错能力也许能够帮到你,看一个例子:

简单演示,实际 IDEA 更增强大

智能提示重构代码

若是你写的代码过于复杂,或者有更好的方式来替代你写的代码,那么 IDEA 会给你一个提示,告诉你还能够有更好的方式。以下图:

IDEA 提示我有更好的遍历数组的方法

一些酷炫的操做

好比你看我从头写一个 HelloWorld 程序:

这应该比一个一个字符敲快多了吧...(小声bb:文章末尾有教程哦)

And More...

来一个总结:

验证环境是否安装成功

打开【IDEA】新建一个空白的 Java 项目:

一路 Next 就行了

右键在【scr】目录新建一个空白的【HelloIDEA】的 Java Class 文件:

而后接下来像我这样操做,来编写一个【HelloIDEA】的 Java 程序:

IDEA 弹出的提示没录到...

  • psvm:是 public static void main 的缩写;
  • sout:是 System.out 的缩写;
  • 您在 IDEA 中键入以上单词时会由 IDEA 提示智能快速地完成输入,以此来提高效率;

怕有些同窗迷惑,点击左边的绿三角会弹出以下的信息,点击第一个选项就可以运行啦:

Part 1. 标识符和保留字

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

咱们来看看刚才咱们写的 Hello World 程序。

第一行:public class HelloWorld {

  • 关键字 public:称为 访问修饰符 (access modifier),用来控制程序的其余部分对这一段代码的访问级别 (这里暂时理解为公用的,以后会更加详细地介绍)
  • 关键字 class:代表 Java 程序中的所有内容都包含在类中 (以后会花不少功夫来讲明类,这里能够仅仅把类理解为程序逻辑的一个容器,程序逻辑定义了应用软件的行为)
  • HelloWorld:关键字 class 后面紧跟的是类名,它除了必须跟文件名保持一致外,还应该遵循 Java 类名的命名规范 —— 类名以大写字母开头。若是名字由多个单词组成,每一个单词的第一个字母须要大写

    • 例如:FirstSample 就遵循了 Java 类的命名规范的原则;
    • 这样的 命名方式 被称为 驼峰命名法 (camel case),首字母是大写的则称为 大驼峰命名法,首字母小写的则称为 小驼峰命名法 (如:firstSample,后续文章会提到的变量就采用这种方式)

类名命名规范:

  • BadhelloGood123Note_Book_World
  • GoodHelloTesterNoteBook

标识符

在编程中,某个东西的名称就被称为 标识符,例如上述的类名 HelloWorld。在 Java 中定义标识符存在如下几种规则:

  1. 只能由数字、字母、下划线(_)和美圆符号($)组成;
  2. 第一个字符不能是数字;
  3. 标识符内不容许有空格;
  4. 不能使用 Java 保留字 (下方有列出 Java 中存在的保留字)

标识符命名示范:

  • BadLady Luck (坏:标识符内不容许有空格)x/y (错误:标识符中不容许使用斜杠)1stPrize (错误:以数字开头)abc (坏:没有任何意义)_name (坏:不要以 _$ 开头)
  • GooduserNameStudentManagerNoteBook

保留字

保留字就是像 class 这样有特殊含义的标识符,您只能将保留字用于其设定的专属用途 (如 class 除了定义类,您将不能用做其余任何目的)

在 Java 中存在如下的保留字:(无需记忆,它们中的大部分都或多或少地出如今以后您的编码中.. IDEA 也会有智能的提示)

abstract class    extends implements null      strictfp     true
assert   const    false   import     package   super        try
boolean  continue final   instanceof private   switch       void
break    default  finally int        protected synchronized volatile
byte     do       float   interface  public    this         while
case     double   for     long       return    throw
catch    else     goto    native     short     throws
char     enum     if      new        static    transient

Part 2. 程序的基本结构和方法简述

程序基本结构

在类的第一个大括号和最后一个大括号之间描述了程序所作的一切:

public class ClassName {
}

首先,每一个源代码文件必须有一个主类 (名字同文件名),在以后的文章中咱们会看到一个源代码文件可能会同时存在几个类的状况发生,暂时不考虑。

在上文程序的第三行:public static void main ( String[] args ),展现了程序在何处开始运行,Java 虚拟机老是从指定类的 main 方法的代码开始执行,所以为了代码可以执行,在类的原文件中必须包含一个 main 方法。

对这一行稍微作一下解释:

  • public:访问修饰符,用来描述该方法的访问权限级别,这里为全部人都能访问;
  • static:保留字,用来定义该方法是一个静态方法;
  • void:用来描述该方法没有任何的返回值;
  • main:方法名;
  • (String[] args):描述了该方法所接收的参数;

因此刚开始接触的程序结构大概看起来像是下面这样:

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

因为 Java 是大小写敏感 的,因此 main 这个单词不容许任何的修改。(Java 语言规范中规定 main 方法必须声明为 public)

大括号的使用风格曾经引起过许多无心义的争论,如下两种风格,哪种更好呢?:

public class ClassName {
}
public class ClassName 
{
}

没有答案,虽然对于 Java 编译器来讲空白符会被省略,这两种并没有差异,但做为开发者的咱们,选择 Java 惯用的风格 (第一种) 就行了...

println()

考虑下面这一段代码,实际上就是上面的 HelloWorld 程序 main 方法中的语句:

{
    System.out.println("Hello World!");
}

一对大括号表示 方法体 的开始与结束,在这个方法中只包含一条语句。跟大多数程序设计语言同样,能够把 Java 中的语句当作是语言中的一个句子。

在 Java 中,每一个句子必须用分号结束 (英文分号)

特别须要说明,回车并非语句的结束标志,所以,若是须要能够将一条语句写在多行上。

在这里,咱们使用了 System.out 这个对象并调用了它的 println 方法 (点号 . 用于调用方法)。它的做用是在屏幕上输出指定的信息。例如,咱们想要输出 我没有三颗心脏 则能够这样调用:

System.out.println("我没有三颗心脏");

Java 使用方法的通用语法是:

object.method(parameters)

这一条语句的做用是在屏幕上输出 Hello World!,这一部分由字符组成的序列 (其中不该该包含引号) 被称为 字符串。它能够包含任何有效字符,包括空格和标点符号。

方法简述

方法 是根据语句构建的。程序一般包含许多方法。 咱们的示例程序仅包含一种方法 (main 方法)。固然咱们还调用了系统帮咱们写好的 System.out.println() 方法。

尝试定义本身的方法

咱们能够试着仿照 main 方法来写一个本身的方法,假设咱们想要输出一段心理学三大巨头之一阿德勒的一段话:

public static void printAdlerOneQuote() {
    System.out.println(
        "太在乎别人的视线和评价,才会不断寻求别人的承认。"
        + "对承认的追求,才扼杀了自由。"
        + "因为不想被任何人讨厌,才选择了不自由的生活方式。"
        + "换言之,自由就是再也不寻求承认。"
    );
}

有几点须要说明:

  • 方法名采用小驼峰命名法,且尽可能保证有意义的命名:若是这里把方法名修改为 abc 彷佛就有点儿不知所云了;
  • 一行代码量不要超过可视距离:若是所有冗余在一行,不只看这一段代码会花额外的精力去翻看和理解,也会给其余阅读代码的人形成困扰;
  • 建议:一个方法只作一件事情。您能够看到这个方法除了像方法名描述的那样打印一句阿德勒的名言以外,没有作其余任何的操做,这样作能大大增长代码的可阅读性;

在 main 方法中调用

正常的方法调用须要像上面提到的那样:object.method(parameters),但因为身处同一个类中,this.printAdlerOneQuote(); 就能够简写成:printAdlerOneQuote();

完整的程序代码以下:

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Hello World!");
        printAdlerOneQuote();
    }

    public static void printAdlerOneQuote() {
        System.out.println(
            "太在乎别人的视线和评价,才会不断寻求别人的承认。"
                + "对承认的追求,才扼杀了自由。"
                + "因为不想被任何人讨厌,才选择了不自由的生活方式。"
                + "换言之,自由就是再也不寻求承认。"
        );
    }
}

练习:尝试输出本身喜欢的一段话在屏幕中

参考答案:(上面的完整代码演示)

Part 3. 语法错误和 Bug

简述语法错误

在源文件中,字符串文字必须仅在一行上。如下内容不合法,将没法编译:

System.out.println("Hello "
    "World!");

您编写的代码不符合 Java 的语法规定,就会发生 语法错误

在 Java 编译器将源代码文件编译成 .class 文件以前,会默认帮你作许多工做,检查语法就是其中一项。

例如,咱们在桌面上试着建立一个【HelloWorld.java】文件而后输入一段存在错误的代码 (您能够试着检查一下哪里出现了一处错误)

public Class HelloWorld {
    
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

而后再当前目录执行 javac HelloWorld.java 尝试编译这个存在错误的 Java 源文件:

→ javac HelloWorld.java
HelloWorld.java:1: 错误: 须要class, interface或enum
public Class HelloWorld {
       ^
HelloWorld.java:3: 错误: 须要class, interface或enum
    public static void main(String[] args) {
                  ^
HelloWorld.java:6: 错误: 须要class, interface或enum
    }
    ^
3 个错误

Java 编译器提示咱们有三处错误,实际上咱们也确实粗心地把 class 错误的写成了 Class

编译器也未建立新的字节码文件 (.class),由于在遇到错误时它将中止翻译。

Bug 简述

仅仅由于程序经过编译而且成功运行并不意味着它是正确的。

例如,您的任务是建立一个在屏幕上输出 Hello Wrold!,可是您却错误地写成了 Hello Bug!运行时没有按照预期执行,则就称该程序存在 Bug!

Bug 起源

Bug 一词的原意是 “臭虫” 或 “虫子”。

第一个有记载的 Bug 是美国海军编程员、编译器的发明者格蕾斯·哈珀 (GraceHopper) 发现的。

194599 日,下午三点。哈珀中尉正领着她的小组构造一个称为“马克二型”的计算机。这还不是一个真正的电子计算机,它使用了大量的继电器,一种电子机械装置。第二次世界大战尚未结束。哈珀的小组日以继夜地工做。机房是一间第一次世界大战时建造的老建筑。那是一个炎热的夏天,房间没有空调,全部窗户都敞开散热。

忽然,马克二型死机了。技术人员试了不少办法,最后定位到第 70 号继电器出错。哈珀观察这个出错的继电器,发现一只飞蛾躺在中间,已经被继电器打死。她当心地用摄子将蛾子夹出来,用透明胶布帖到「事件记录本」中,并注明「第一个发现虫子的实例」。

今后之后,人们将计算机错误称为 Bug,与之相对应,人们将发现 Bug 并加以纠正的过程叫作 “Debug”,意即「捉虫子」或「杀虫子」。

Bug 是怎么产生的?

来几个清奇的段子吧。

段子一:庞博脱口秀大会解释 Bug

B 站自取:https://www.bilibili.com/video/BV1oJ411S7o4?from=search&seid=7940414495637079568

段子二:测试工程师们来到一家酒吧

引用自知乎 @第七地区的答案: https://www.zhihu.com/questio...

段子三:领导让我修房子

引用自知乎 @哒柏的答案: https://www.zhihu.com/questio...

地球人和程序员眼中改 Bug 的不一样

修改程序中的 Bug,要通过三个步骤:

  1. 找到它;
  2. 想办法解决它;
  3. 确认它已经被解决 (而且没有引入其它问题)

提及来比较简单,在地球人 (程序员等同于外星人) 看起来,过程是这样的:

可是,对于程序员来讲,找一个 Bug 每每是这样的:

找到以后呢,解决这个 Bug 又是一个难题:

换个柱子什么的比较简单,还有更崩溃的!

Part 4. 注释

注释 是写程序的人留下的阅读笔记。

一般注释以两个字符 // 开头。Java 编译器将忽略那些字符以及在该行以后的全部字符。例如:

public class HelloWorld {

    // 程序入口
    public static void main(String[] args) {
        // 输出 Hello World!
        System.out.println("Hello World!");
    }
}

这一段代码跟咱们最开始的 HelloWrold 程序彻底相同。大多数的程序编辑器 (例如 IDEA) 都足够聪明,能够识别注释并将其显示为可有可无的一些颜色:

与大多数程序设计语言同样,Java 中的注释也不会出如今可执行程序中。所以,能够在源程序中根据须要添加任意多的注释,而没必要担忧可执行代码会膨胀。

三种注释的方式

/**
 * 文档注释
 * 能够注释多条内容
 */
public static void main(String[] args) {
    // 这是单行注释
    System.out.println("演示三种注释方式");
    /*  
    这是多行注释
     */
}
  • 单行注释:以 // 标识,只能注释一行内容;
  • 多行注释:包含在 /**/ 之间,能注释多行内容,为了提升可阅读性,通常首行和尾行不写注释信息;
  • 文档注释:包含在 /** (两个 *)*/ 之间,也能注释多行内容,通常用在类、方法和变量上面,用来描述其做用 (这是 Java 的一种规范,以后会更多的见识到)

几点建议

注释的目的是: 尽可能帮助读者了解得和做者同样多。 —— 《编写可读代码的艺术》

如下节选自《阿里巴巴 Java 开发手册》对于注释的几点要求:

  1. 【强制】 类、雷属性、类方法的注释必须使用 Javadoc 规范,使用 /**内容*/ 格式,不得使用 // 方式 (上面的演示程序中就不符合规范,须要注意)
  2. 【强制】 方法内部的单行注释,在被注释语句上方另起一行,使用 // 注释。方法内部的多行注释,使用 /* */ 并注意与代码对齐;
  3. 【推荐】 与其用「半吊子」英文来注释,不如用中文注释把问题说清楚。专有名词与关键字保持英文原文便可;
  4. 【推荐】 在修改代码的同时,要对注释进行相应的修改;
  5. 【参考】 对于注释的要求:

    1. 可以准确反映设计思想和代码逻辑;
    2. 可以描述业务含义,使其余程序员可以迅速了解代码背后的信息。彻底没有注释的大段代码对于阅读者如同天书;注释是给本身看的,应作到即便间隔很长时间,也能清晰理解当时的思路;注释也是给继任者看得,使其可以快速接替本身的工做;
  6. 【参考】 好的命名、代码结构是自解释的,注释力求精简准确、表达到位。避免出现注释的一个极端:过多过滥的注释。由于代码的逻辑一旦修改,修改注释也是至关大的负担;

对于以上的一些建议,我相信在您以后的编程之路上会愈加地体会深入。

要点回顾

  1. JVM、JRE、JDK 的说明和联系;
  2. Java 开发环境的搭建方法;
  3. 标识符和保留字的定义以及标识符的命名规范;
  4. 程序的基本结构和方法定义和调用的简单方法;
  5. 语法错误和 Bug (起源、怎么产生的)
  6. 注释的定义、三种注释的方式、注释的规范;

练习

练习 1:尝试输出本身喜欢的一段话在屏幕中

参考答案:(上面有完整代码演示)

练习 2:尝试把上方输出的内容单独实现为本身的方法并在 main 方法中调用运行

参考答案:(上面有完整代码演示)

练习 3:给本身的代码添加上注释并让朋友阅读询问是否清晰必要

参考答案:(上面有完整代码演示)

自取资料

相关扩展阅读资料

  1. Java 教程 | 廖雪峰官方网站 - https://www.liaoxuefeng.com/w...
  2. 史上最简单的 Intellij IDEA 教程 - https://github.com/judasn/Int...
  3. 计算机发展史上十大著名软件缺陷 - https://zhuanlan.zhihu.com/p/...

推荐书籍

Java 核心技术·卷 I(原书第 11 版)

推荐理由: 这本书在知识体系完整充实的同时,又比《Thinking in Java》暴风式的知识洗礼来得轻松,新人入门书籍强烈推荐!

可读代码的艺术

推荐理由: 编写可阅读的代码是程序员从始至终须要提高的能力,这本书完整呈体系的结构,和朴实充实的实例,让读者经过阅读就能在实践中真实地运用起来,推荐!

参考资料

  1. 《Thinking in Java》第四版
  2. 《Java 核心技术 卷 I》第11版
  3. 廖雪峰系列 Java 教程 - https://www.liaoxuefeng.com/w...
  4. 历史上的第一个计算机Bug - http://www.cxyym.com/2014/11/...
  • 本文已收录至个人 Github 程序员成长系列 【More Than Java】,学习,不止 Code,欢迎 star:https://github.com/wmyskxz/MoreThanJava
  • 我的公众号 :wmyskxz,我的独立域名博客:wmyskxz.com,坚持原创输出,下方扫码关注,2020,与您共同成长!

很是感谢各位人才能 看到这里,若是以为本篇文章写得不错,以为 「我没有三颗心脏」有点东西 的话,求点赞,求关注,求分享,求留言!

创做不易,各位的支持和承认,就是我创做的最大动力,咱们下篇文章见!

相关文章
相关标签/搜索