2網課內容總結

1.初識Java

1.Sun 公司(已被 Oracle 收購)於 1995 年 5 月推出了 Java 程序設計語言和 Java 平臺。html

2.如下是 Java 語言的主要特色:java

  • Java 語言是高級語言
  • Java 語言是簡單的
  • Java 語言是面向對象的
  • Java 語言是分佈式的
  • Java 語言是健壯的
  • Java 語言是安全的
  • Java 語言是平臺無關的
  • Java 語言是可移植的
  • Java 語言是解釋型的
  • Java 語言是高性能的
  • Java 語言是多線程的
  • Java 語言是動態的

Java 屬於高級語言

相對於機器語言、彙編語言,Java 和 C++、C#、Python 等語言都被稱之爲高級語言,由於這些語言書寫的代碼愈來愈接近人類的天然語言。程序員

面向對象

傳統以 C 語言爲表明的過程式編程語言以過程爲中心,以算法爲驅動(程序=算法+數據)。而面向對象編程語言則以對象爲中心,以消息爲驅動(程序=對象+消息)。Java 是典型的面向對象的語言,具體面向對象的概念和應用會在後面的課程中詳細介紹。算法

平臺無關

所謂 Java 語言是平臺無關的語言,是指用 Java 編寫的應用程序,編譯成字節碼文件(.class 後綴)後,不用修改就可在不一樣的軟/硬件平臺上運行。這得益於 Java 的虛擬機,這部分知識將在下一節詳細介紹。編程

健壯性

Java 的健壯性有兩個體現:安全

  1. Java 丟棄了指針。這樣能夠杜絕內存的非法訪問,雖然犧牲了程序員操做的靈活性,但對程序的健壯性而言,不無裨益。
  2. Java 的垃圾回收機制。Java 的垃圾回收機制是 Java 虛擬機提供的管理內存的機制,用於在空閒時間以不定時的方式動態回收無任何引用的對象所佔據的內存空間。

3.Java 從誕生至今,主要衍生出了三個體系,即 Java SE,Java EE,Java ME。服務器

Java SE(Java Standard Edition)

Java SE 是 Java 的基礎,也是 Java 的核心。它容許開發和部署在桌面、服務器、嵌入式環境和實時環境中使用的 Java 應用程序。Java SE 爲 Java EE 提供了基礎。markdown

Java EE(Java Enterprise Edition)

Java EE 是在 Java SE 基礎之上發展起來的 Java 企業版,包含了 Web 開發等企業級的開發技術,多用於 Web 系統的服務端開發。使用 Java EE 能夠快速開發出安全、穩定、性能較高的大型系統。所以 Java EE 也是不少企業在技術選型階段的一個重要考慮方向。多線程

Java ME(Java Micro Edition)

在 Java 發展之初,Java 還有另外一個分支 — Java ME。Java ME 能夠用於一些嵌入式設備的 Java 程序開發。但隨着時代的發展,Java ME 逐步走向沒落,目前的應用範圍也在逐步縮小。app

4.在整個 Java 程序的開發流程中,程序員最初是將代碼寫在後綴爲 .java 的文件中(源碼),以後再經過編譯工具將 .java 文件轉換 .class 文件(也稱爲字節碼文件)。這個「轉換」過程當中,又能夠細分爲如下四個階段:

  1. 詞彙和語法分析:分析源碼的執行邏輯,並將其繪製成一個抽象的語法樹。
  2. 填寫符號表:複雜的程序之間會彼此引用,而此階段就會對這些引用關係作一些預處理工做。能夠理解爲,在此階段會用一些符號來表示各個程序之間的關係
  3. 註釋處理:幾乎全部的編程語言都包含程序和註釋兩部分,此階段會對註釋進行分析和歸類。
  4. 生成字節碼:根據前三個階段的結果,最終將 .java 文件轉換爲 .class 文件。

字節碼 .class 文件會被解釋爲機器碼,進而在具體的系統平臺上執行。以上過程以下所示。

 

5.JDK(Java Development Kit,Java 開發工具包)是整個 Java 的核心。一個程序從源碼到字節碼須要編譯,在 Java 中,這個編譯動做由 JDK 提供的 javac 程序(或命令)來完成。JDK 還提供了執行程序 java、文檔工具 javadoc 和反編譯工具 javap 等使用工具。JDK 實際就是這些工具和 JRE 的合集

什麼是 JRE 呢?JRE(Java Runtime Environment,Java 運行環境)是 JVM(Java Virtual Machine,Java 虛擬機)和一些經常使用 API(Application Programming Interface,應用程序接口)的合集

JVM 負責前文提到的解釋並執行字節碼。那什麼是 API 呢?能夠將 API 理解爲是一些已經寫好的、能夠供咱們直接使用的代碼。舉個例子,若是要編寫一個排序算法該怎麼辦?除了本身一行一行的編寫代碼之外,還能夠直接使用 JDK 中已經提供好的排序 API,直接使用 API 裏的某一行代碼就能幫助咱們實現排序功能,是否是很方便呢?而且爲了歸類,API 一般是以「包」的形式體現的,例如 java.io 就是一個聚集了不少文件操做的包,而 java.lang 是一個聚集了不少程序基礎操做的包。

綜上,能夠發現 JDK 包含了開發工具和 JRE,而 JRE 又包含了 JVM 和經常使用 API,以下圖所示。所以,對於開發者而言,就只須要下載並安裝 JDK,而後就能夠開發並運行 Java 程序了。

 6.Java 的字節碼是 Java 虛擬機執行的一種指令格式。

字節碼解釋過程

以下圖所示,Java 字節碼文件前後通過 JVM 的類裝載器、字節碼校驗器和解釋器,最終在操做系統平臺上運行。具體各部分的主要功能描述以下。

  • 類裝載器。其主要功能是爲執行程序尋找和裝載所須要的類,就是把字節碼文件裝到 Java 虛擬機中。
  • 字節碼校驗器。其功能是對字節碼文件進行校驗,保證代碼的安全性。字節碼校驗器負責測試代碼段格式並進行規則檢查,檢查僞造指針、違反對象訪問權限或試圖改變對象類型的非法代碼。
  • 解釋器。具體的平臺並不認識字節碼文件,最終起做用的仍是這個最重要的解釋器,它將字節碼文件翻譯成所在平臺能識別的東西。

 

7.即時編譯技術:JVM 可判斷某段字節碼其是否屬於使用頻率較高的熱點代碼。若是是,就會將字節碼文件轉換出的本地機器碼保存,以便下次直接執行機器碼文件。這使得 Java 程序的執行效率獲得很大的提升。

8.Java 可以擁有如此優秀的跨平臺機制,主要歸功於 JVM

JVM 與跨平臺機制

JVM 不是一臺真實的機器,而是想象中的機器,經過模擬真實機器來運行 Java 程序。 既然是模擬出來的機器,JVM 看起來一樣有硬件,如處理器、堆棧、寄存器等,還具備相應的指令系統。Java 程序運行在這個抽象的 Java 虛擬機上,它是 Java 程序的運行環境,也是 Java 最具吸引力的特性之一。

前面提到過,Java 語言的一個重要特色就是平臺無關性,接下來將從原理上進一步說明爲何 Java 語言具備這樣的平臺無關性。實現 Java 「一次編譯,到處運行」 的關鍵就是使用了 Java 虛擬機。

例如,使用 C 語言開發一個相似計算器的軟件,若是想要使這個軟件在 Windows 平臺上運行,則須要在 Windows 平臺下編譯成目標代碼,這個計算器的目標代碼只能在 Windows 平臺上運行。而若是想讓這個計算器軟件能在 Linux 平臺上運行,則必須在對應的平臺下編譯,產生針對該平臺的目標代碼,才能夠運行。

但對於 Java 而言,則徹底不是這樣。用 Java 編寫的計算器程序(.java 後綴)通過編譯器編譯成字節碼文件,這個字節碼文件不是針對具體平臺的,而是針對抽象的 Java 虛擬機的,在 Java 虛擬機上運行。而在不一樣的平臺上,會安裝不一樣的 Java 虛擬機,這些不一樣的 Java 虛擬機屏蔽了各個不一樣平臺的差別,從而使 Java 程序(字節碼文件)具備平臺無關性。也就是說,Java 虛擬機在執行字節碼時,把字節碼解釋成具體平臺上的機器指令執行,具體原理以下圖所示。

 

9.垃圾回收機制

 

在 C++ 中,程序結束運行以前,對象會一直佔用內存,並在程序員明確釋放以前不能將其所佔內存分配給其餘對象。

而 Java 的處理方式不一樣,當沒有對象引用指向原先分配給某個對象的內存時,該內存便成爲垃圾。做爲初學者,能夠簡單的理解爲,當一個對象再也不被其餘對象使用時,該對象就會成爲一個等待被回收的垃圾對象。

Java 虛擬機提供了一個系統級線程(垃圾回收器線程),它自動跟蹤每塊被分配出去的內存空間,自動釋放被定義成垃圾的內存。在一些書籍或文獻中,垃圾回收器一般被稱爲 GC(Garbage Collection)。

垃圾回收機制能自動釋放內存空間,減輕程序員編程的負擔,這是 Java 虛擬機具備的一個顯著優勢。

10.配置jdk環境變量

配置 JAVA_HOME

點擊新建,輸入變量名爲 JAVA_HOME,變量值爲 C:\Program Files\Java\jdk1.8.0_121,點擊肯定。

配置 PATH (注意:PATH 變量不須要新建)

打開 Path 變量,在變量值最前加入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

配置 CLASSPATH

點擊新建,輸入變量名 CLASSPATH ,變量值,.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意:第一個分號前面有一個點)

11.java文件命名

一個源文件中最多隻能有一個 public 類(但不是必須的)。若是源文件包含一個 public 類,則該源文件必須以 public 類名命名。本例中 HelloWorld 被聲明爲 public class 因此源文件必須命名爲HelloWorld.java若是去掉 public,那麼源文件能夠採用別的命名

Java 程序的,它有固定的書寫格式:

public static void main(String[] args){…}
一個程序只能有一個 main() 方法,不然 Java 虛擬機不知道從哪一個main()方法開始運行
main()main()

12.文檔註釋標籤語法。

  • @author,位置:,標明開發該類模塊的做者
  • @version,位置:,標明該類的版本。
  • @see,位置:類、屬性、方法,說明相關主題
  • @param,位置:方法,對方法中某參數的說明。
  • @return,位置:方法,對方法返回值的說明。
  • @exception,位置:方法,對方法可能拋出的異常進行說明。

2.數據類型和運算符

 

1.變量

對於內存而言,type varName 是聲明變量,至關於根據數據類型向內存申請一塊空間,而 =value 至關於把值放到這個內存空間中。例如 int stuAge = 22(省略分號,下同),能夠拆分紅 int stuAge 和 stuAge = 22 兩條語句,其中 int stuAge 至關於向內存申請一塊能夠存儲 int 型變量的空間(實際爲 4 個字節,32 位),而 stuAge = 22 至關於把 22 這個數字放到了這塊內存空間中,接下來還能夠經過 stuAge = 27 這條語句把 27 這個數字放到剛纔的內存空間中替換了原來的 22。

成員變量定義在類的內部、方法的外部(能夠理解爲和方法平行),其做用域從變量定義位置起到類結束。而局部變量是在方法內部(含語句塊)定義的變量(包括前面說到的參數),其做用域從變量定義位置起到方法(含語句塊)結束。對於 Java 而言,類的外面不能有變量的聲明

2.數據類型

數據類型 字節數 位數 使用說明
byte 1 8 取值範圍: - 2^727 ~ 2^727-1
short 2 16 取值範圍:-2^{15}215 ~ 2^{15}215-1
int 4 32 取值範圍:-2^{31}231 ~ 2^{31}231-1
long 8 64 取值範圍:-2^{63}263 ~ 2^{63}263-1,直接賦值時必須在數字後加上 l 或 L
float 4 32 取值範圍:1.4E-45 ~ 3.4E38,直接賦值時必須在數字後加上 f 或 F
double 8 64 取值範圍:4.9E-324 ~ 1.8E308
char 2 16 使用 Unicode 編碼(2 個字節),可存漢字
boolean - - 只有 true 和 false 兩個取值

3.進制轉換

Java 整型字面值常量有如下 4 種表示形式。

  • 十進制整數,例如 12,-127,0。
  • 八進制整數,以 0 開頭,例如 014(對應於十進制的 12)。
  • 十六進制整數,以 0x 或 0X 開頭,例如 0XC(對應於十進制的 12),0XA5(對應於十進制的 165)。
  • 自 JDK7 之後,還能夠用 0b 或 0B 開頭,表示二進制整數,例如 0b11(對應於十進制的 3)。也能夠將整數用Integer.toBinaryString()以二進制顯示。

其餘常見進制,雖然不能直接表示,但仍然能夠經過 Java 中的一些 API 轉換後獲得。關於 API 的相關知識,你們也會隨着學習的深刻逐漸瞭解。

自 JDK7 之後,爲了提升數字的可讀性,還可使用下劃線(_)對數字分組,但要注意下劃線不能出如今數字的首部或尾部也不能出如今 0b 和 0x 左右、小數點左右、L 和 F 符號前。例如,在定義變量時,double d = 123_456.7_8 和 double d = 123456.78 是等價的

Java 浮點類型字面值常量有如下兩種表示形式。

  • 十進制形式,例如 3.14,314.0,.314。
  • 科學記數法形式,例如 3.14e2,3.14E2,100E-2。

4.字符字面值常量爲用單引號括起來的單個字符,由於 Java 使用 Unicode 編碼,一個 Unicode 編碼佔 2 個字節,一個漢字也是佔 2 個字節,因此 Java 中字符型變量能夠存放一個漢字

Java 字符型字面值常量有如下 3 種表示形式。

  • 用英文單引號括起來的單個字符,例如'a'、'漢'
  • 用英文單引號括起來的十六進制代碼值來表示單個字符,其格式爲'\uXXXX',其中 u 是約定的前綴(u 是 Unicode 的第一個字母),然後面的 XXXX 位是 4 位十六進制數,是該字符在 Unicode 字符集中的序號,例如 '\u0061' 等價於 'a'
  • 某些特殊的字符能夠採用轉義符''來轉換,轉義符能夠將其後面的字符轉變爲其餘的含義,例如 '\t' 表明製表符,'\n' 表明換行符,'\r' 表明回車符等。

5.Java 中的布爾型(boolean)能夠表示真或假,只容許取值 true 或 false(不能夠用 0 或非 0 的整數替代 true 和 false,這點和 C 語言不一樣)

6.編寫 Java 程序時,常常涉及數據類型轉換,咱們能夠將其分爲 3 類:基本數據類型轉換、字符串與其餘數據類型轉換、其餘實用數據類型轉換。此處介紹基本數據類型轉換,其中 boolean 類型不能夠和其餘數據類型互相轉換。整型、字符型、浮點型的數據在混合運算中可相互轉換並遵循如下原則。

  • 容量小的類型可自動轉換成容量大的數據類型,以下圖所示。

     

     

  • byte、short、char 參與運算時會被自動轉換爲 int 類型。

  • 容量大的數據類型轉換成容量小的數據類型時,須要加上強制轉換符,但可能形成精度下降或溢出,使用時須要格外注意。

  • 有多種類型的數據混合運算時,系統首先自動地將參與運算的變量或字面值常量轉換成容量最大的數據類型,而後再進行計算

7.Scanner(System.in) 的對象存在多個是無心義的,並且做爲標準輸入流也無需去區分不一樣的場合用什麼不一樣的 Scanner,因此徹底能夠將 Scanner 對象定義爲全局的對象,並實現相關的方法在再也不須要它的地方執行 close() 方法關閉標準輸入流。

8.Java 語言支持以下運算符。

  • 算術運算符:+-*/%++--
  • 關係運算符:><>=<===!=
  • 賦值運算符:=+=-=*=/= 等。
  • 邏輯運算符:!&&|| 等。
  • 位運算符:~&|^>><<>>>(無符號右移)。

算術運算符

從參與運算的因子的數量,能夠將算術運算符分爲如下 3 類。

  • 單目運算符:+(取正)、-(取負)、++(自增 1)、--(自減 1)
  • 雙目運算符:+-*/%(取餘)。
  • 三目運算符(表達式 1)?(表達式 2):(表達式 3),當表達式 1 的結果爲真時,整個運算的結果爲表達式 2,不然爲表達式 3,該運算符是 Java 語言惟一一個三目運算符,常被使用,須要掌握。

 3.相關練習重點題目

1.兩數交換(1)temp (2)a,b;a+=b;b = a-b(剩a);a-=b(剩b);(3)a = a^b; b =a^b(b^b^原a=原a);a = a^b(原a^原a^原b=原b);

2.int a = 2;

a+=a*=a;

執行後,變量 a 的值爲?

a = a + (a*a) = 2+4 =6

3.

int a = 4;

int b = a>>1 | a<<1;

執行後,變量 b 的值爲?

右移/左移運算不改變原來變量的值 a不變

4.Java 中如下代碼 int a = ~3; 執行後,變量 a 的值爲?補碼運算 

5.

int a = 1;

boolean b = (a>0) || (a++>1); 

執行後,變量 a 和 b 的值爲?

短路或,左邊true不會執行右邊。

6.Java 中數據類型分爲?基本數據類型和引用數據類型

7.Java 中如下代碼正確的有哪些?float a = 1.23;錯   float a = 1;對   float a = (float)1.23;對    double a= 1.23f對

float能夠賦值爲整數(不加f)和浮點數(必須加f) double類型能夠不加後綴,也能夠加d或f

相關文章
相關標籤/搜索