《Java專欄》 課題二:Java深入淺出
什麼是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的運算子,分為四類:
算數運算子、關係運算子、邏輯運算子、位運算子。
算數運算子(9):+ - * / % ++ –
關係運算子(6):== != > >= < <=
邏輯運算子(6):&& || ! ^ & |
位運算子(7):& | ~ ^ >> << >>>
相關文章
- 深入淺出java的MapJava
- 深入淺出學Java-HashMapJavaHashMap
- Java基礎 Java-IO流 深入淺出Java
- 深入淺出Java多執行緒Java執行緒
- 深入淺出Java記憶體模型Java記憶體模型
- 深入淺出一下Java的HashMapJavaHashMap
- Java容器深入淺出之String、StringBuffer、StringBuilderJavaUI
- 深入淺出Java執行緒池ThreadPoolExecutorJava執行緒thread
- Java高階篇——深入淺出Java類載入機制Java
- 深入淺出 Java 併發程式設計 (1)Java程式設計
- 深入淺出 Java 併發程式設計 (2)Java程式設計
- 深入淺出Java多執行緒(十):CASJava執行緒
- 深入淺出Java多執行緒(十一):AQSJava執行緒AQS
- 深入淺出Java執行緒池:使用篇Java執行緒
- Java開發工程師進階篇——深入淺出Java集合框架Java工程師框架
- Tomcat深入淺出——Servlet(二)TomcatServlet
- 深入淺出 Java 中列舉的實現原理Java
- JAVA重試機制多種方式深入淺出Java
- JVM深入淺出 -- Java記憶體分配機制JVMJava記憶體
- 深入淺出Java執行緒池:原始碼篇Java執行緒原始碼
- PostgreSQL VACUUM 之深入淺出 (二)SQL
- 深入淺出Java多執行緒(十三):阻塞佇列Java執行緒佇列
- Java開發工程師進階篇-深入淺出RedisJava工程師Redis
- 深入淺出Java多執行緒(十二):執行緒池Java執行緒
- 深入淺出Mysql索引優化專題分享|面試怪圈MySql索引優化面試
- 深入淺出FE(十四)深入淺出websocketWeb
- 【Java技術專題】「原理專題」深入分析Java中finalize方法的作用和底層原理Java
- 深入淺出學習決策樹(二)
- 深入淺出 Runtime(二):資料結構資料結構
- 原始碼淺入淺出 Java ConcurrentHashMap原始碼JavaHashMap
- 深入淺出 webpack(vue 專案優化)WebVue優化
- 【Java】Java容器篇(二),深入理解List集合類Java
- java課後題複習Java
- Java併發:深入淺出AQS之獨佔鎖模式原始碼分析JavaAQS模式原始碼
- 深入淺出:使用Java和Spring Security實現認證與授權JavaSpring
- 大型Java進階專題(十一) 深入理解JVM (下)JavaJVM
- 深入淺出Websocket(二)分散式Websocket叢集Web分散式
- Java併發專題(二)執行緒安全Java執行緒
- 淺讀-《深入淺出Nodejs》NodeJS