「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,與您共同成長!

很是感謝各位人才能 看到這裏,若是以爲本篇文章寫得不錯,以爲 「我沒有三顆心臟」有點東西 的話,求點贊,求關注,求分享,求留言!

創做不易,各位的支持和承認,就是我創做的最大動力,咱們下篇文章見!

相關文章
相關標籤/搜索