《Java專欄》 課題二:Java深入淺出

金凝橡炙發表於2017-10-27

←返回目錄

什麼是Java?

第一個Java程式

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

Java可以理解為程式語言或者開發工具,Java 最終的目的是用於編寫直接在機器上執行的程式。

JDK(Java Development Kit)

JDK是 Java 語言的軟體開發工具包,主要用於移動裝置、嵌入式裝置上的java應用程式。JDK是整個java開發的核心,它包含了JAVA的執行環境(JVM+Java系統類庫)和JAVA工具。

JRE(Java Runtime Environment)

JRE是Java Runtime Environment縮寫,指Java執行環境,是Sun的產品。執行JAVA程式所必須的環境的集合,包含JVM標準實現及Java核心類庫。

JVM(Java Virtual Machine)

JVM是Java Virtual Machine(Java虛擬機器)的縮寫,JVM是一種用於計算裝置的規範,它是一個虛構出來的計算機,是通過在實際的計算機上模擬模擬各種計算機功能來實現的。

跨平臺

這裡寫圖片描述
在Java平臺的結構中, 可以看出,Java虛擬機器(JVM) 處在核心的位置,是程式與底層作業系統和硬體無關的關鍵。它的下方是移植介面,移植介面由兩部分組成:介面卡和Java作業系統, 其中依賴於平臺的部分稱為介面卡;JVM 通過移植介面在具體的平臺和作業系統上實現;在JVM 的上方是Java的基本類庫和擴充套件類庫以及它們的API, 利用Java API編寫的應用程式(application) 和小程式(Java applet) 可以在任何Java平臺上執行而無需考慮底層平臺, 就是因為有Java虛擬機器(JVM)實現了程式與作業系統的分離,從而實現了Java 的平臺無關性。

環境配置

實體作業系統依PATH中的路徑資訊來尋找可執行指令(對Windows就是.exe、.bat等,對Linux等就是有執行許可權的檔案)。== javac.exe ==java.exe

環境變數配置:
JAVA_HOME   D:\JDK\jdk1.8.0_77
Path追加      %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
CLASSPATH   .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;

JVM(虛擬作業系統)依CLASSPATH中的路徑資訊來尋找可執行指令(.class檔案)。

javac.exe

javac Hello.java
javac -verbose Hello.java 

[解析開始時間 RegularFileObject[Hello.java]] [解析已完成, 用時 19 毫秒]
[原始檔的搜尋路徑:.,D:\JDK\jdk1.8.0_77\lib,D:\JDK\jdk1.8.0_77\lib\tools.jar,D:\JDK\jdk1.8.0_77\lib\dt.jar]
[類檔案的搜尋路徑:D:\JDK\jdk1.8.0_77\jre\lib\resources.jar,D:\JDK\jdk1.8.0_77\jre\lib\rt.jar,…………

java.exe:啟動JVM

java Hello
java -verbose Hello

[Opened D:\JDK\jdk1.8.0_77\jre\lib\rt.jar]
[Loaded java.lang.Object from D:\JDK\jdk1.8.0_77\jre\lib\rt.jar]
[Loaded java.io.Serializable from D:\JDK\jdk1.8.0_77\jre\lib\rt.jar]
[Loaded java.lang.Comparable from D:\JDK\jdk1.8.0_77\jre\lib\rt.jar]
[Loaded java.lang.CharSequence from D:\JDK\jdk1.8.0_77\jre\lib\rt.jar]

類和物件

類和物件(class)是兩種以計算機為載體的計算機語言的合稱。
物件是對客觀事物的抽象,類是對物件的抽象。類是一種抽象的資料型別。

變數/直接量

public class Test {
    public static void main(String[] args)  {
        String a = "hello2"; 
        final String b = "hello";
        String d = "hello";
        String c = b + 2; 
        String e = d + 2;
        System.out.println((a == c));
        System.out.println((a == e));
    }
}
true
false
為什麼第一個比較結果為true,而第二個比較結果為fasle。這裡面就是final變數和普通變數的區別了,當final變數是基本資料型別以及String型別時,如果在編譯期間能知道它的確切值,則編譯器會把它當做編譯期常量使用。也就是說在用到該final變數的地方,相當於直接訪問的這個常量,不需要在執行時確定。因此在程式碼中,由於變數b被final修飾,因此會被當做編譯器常量,所以在使用到b的地方會直接將變數b 替換為它的值。而對於變數d的訪問卻需要在執行時通過連結來進行。不過要注意,只有在編譯期間能確切知道final變數值的情況下,編譯器才會進行這樣的優化。

Java記憶體的執行機制

深入理解java虛擬機器 第二版 JVM高階特性與最佳實踐

運算子

Java的運算子,分為四類:
算數運算子關係運算子邏輯運算子位運算子
算數運算子(9):+ - * / % ++ –
關係運算子(6):== != > >= < <=
邏輯運算子(6):&& || ! ^ & |
位運算子(7):& | ~ ^ >> << >>>

←返回目錄

相關文章