Java基礎-運行環境與關鍵字和基本數據類型

Java 基礎-運行環境與關鍵字和基本數據類型

接上一篇的語言簡介, 我們知道任何編程語言製作的軟件,運行都需要一定的運行環境。 那麼Java語言的運行環境是什麼?

Java語言的編譯與運行環境

  1. Java 編譯工具
    jar.exe jar包
    javadoc.exe 文檔生成器
    Java.exe 解釋器
    Javac.exe 編輯器
    這裏說的是Windows平臺下的 exe 其實其他平臺一樣,原理都一樣。 我們繼續,

  2. 開發與運行Java程序需經過哪些過程?
    用工具編輯源程序,也就是寫代碼,保存
    用Java編輯器工具javac.exe編譯源程序文件,生成字節碼.class文件
    用Java解釋器工具Java.exe解釋運行生成.class文件

  3. 跨平臺是怎樣實現的呢?
    上一篇簡單說了一下, Java語言運行在JVM (Java Virtual Machine,簡稱 JVM) 中,
    JVM也是一個軟件,不同的平臺有不同的版本。我們編寫的Java源碼,編譯後會生成一種 .class 文件,稱爲字節碼文件。Java虛擬機就是負責將字節碼文件翻譯成特定平臺下的機器碼然後運行。也就是說,只要在不同平臺上安裝對應的JVM,就可以運行字節碼文件,運行我們編寫的Java程序。
    而這個過程中,我們編寫的Java程序沒有做任何改變,僅僅是通過JVM這一”中間層“,就能在不同平臺上運行,真正實現了”一次編譯,到處運行“的目的。
    JVM是一個”橋樑“,是一個”中間件“,是實現跨平臺的關鍵,Java代碼首先被編譯成字節碼文件,再由JVM將字節碼文件翻譯成機器語言,從而達到運行Java程序的目的。

注意:編譯的結果不是生成機器碼,而是生成字節碼,字節碼不能直接運行,必須通過JVM翻譯成機器碼才能運行。不同平臺下編譯生成的字節碼是一樣的,但是由JVM翻譯成的機器碼卻不一樣。

所以,運行Java程序必須有JVM的支持,因爲編譯的結果不是機器碼,必須要經過JVM的再次翻譯才能執行。即使你將Java程序打包成可執行文件(例如 .exe),仍然需要JVM的支持。

注意:跨平臺的是Java程序,不是JVM。JVM是用C/C++開發的,是編譯後的機器碼,不能跨平臺,不同平臺下需要安裝不同版本的JVM。

Java 語法關鍵字

直接看起來,什麼是關鍵字? 感覺很抽象複雜難懂。 這樣吧 , 我簡單比個例子你就明白了,編程語法和我們日常所學的英語、日語都一樣。
英語裏邊: too … to / as soon as 。 把這些關鍵短語 加入語句裏邊,馬上語句結構簡單明瞭。
Java語法的關鍵字和這個意思一樣。

  1. Java 常見關鍵字
    用於定義數據類型的關鍵字
    class interface    byte short int long float double char boolean void               
    用於定義數據類型值的關鍵字
    true false null       
    用於定義流程控制的關鍵字
    if    else switch    case default while do for break    continue return           
    用於定義訪問權限修飾符的關鍵字
    private    protected public       
    用於定義類,函數,變量修飾符的關鍵字
    abstract final static synchronized   
    用於定義類與類之間關係的關鍵字
    extends    implements           
    用於定義建立實例及引用實例,判斷實例的關鍵字
    new    this super instanceof   
    用於異常處理的關鍵字
    try    catch finally throw    throws
    用於包的關鍵字
    package    import           
    其他修飾符關鍵字
    native strictfp transient volatile assert
  1. 關鍵字解釋
    break           用在 switch 或者循環語句中,表示中斷結束的意思,跳出循環直接可以結束該語句
    continue        用在循環語句中,表示中斷結束的意思,不過跟 break 有區別,它是退出本次循環後繼續執行下一次循環           
    return          常用功能是結束一個方法(退出一個方法),跳轉到上層調用的方法
    interface       接口的意思,用來定義接口。
    static          靜態修飾符,被修飾後成員被該類所有的對象所共有。也可以通過類名調用
    private         權限修飾符,可以修飾成員變量和成員方法,被修飾的成員只能在本類中被訪問        隱藏具體實現細節,提供對外公共訪問方法,提高安全性
    this            當成員變量和局部變量名稱一樣時,需要用 this 修飾,誰調用這個方法,那麼該方法的內部的this就代表誰,如果不適用 this ,那麼局部變量隱藏了成員變量
    super           代表的是父類存儲空間的標識(可以理解成父類的引用,可以操作父類的成員)
    final           由於繼承中有一個方法重寫的現象,而有時候我們不想讓子類去重寫父類的方法.這對這種情況java就給我們提供了一個關鍵字: final
                    可以修飾類,變量,成員方法。被修飾類不能被繼承;被修飾的方法不能被重寫;被修飾的變量不能被重新賦值,因爲這個量其實是一個常量。
                    修飾基本數據類型    指的是值不能被改變;修飾引用數據類型    指的是地址值不能被改變
    finally         被finally控制的語句體一定會執行;特殊情況:在執行到finally之前jvm退出了(比如System.exit(0))
                    finally的作用:    用於釋放資源,在IO流操作和數據庫操作中會見到
    abstract        抽象的意思,用來修飾抽象類與抽象方法
                    abstract 不能和哪些關鍵字共存?
                        private    衝突        被private修飾的方法不能被子類繼承,就不能被重寫,而我們的抽象方法還需要被子類重寫
                        final      衝突        被final修飾的方法,不能被子類重寫 , ,而我們的抽象方法還需要被子類重寫
                        static     無意義    因爲被static修飾的方法可以通過類名直接訪問,但是我們的抽象方法沒有方法體,所以這樣訪問沒有意思
    extends         繼承的意思,通過它可以類與類之間產生繼承關係。
    implements      實現的意思,通過它可以讓類與接口之間產生實現關係。
    instanceof      測試它左邊的對象是否是它右邊的類的實例,返回boolean類型的數據

Java 常用關鍵字解釋

this和super

  • 面向對象之this關鍵字
    • 爲什麼要有this
      • 當我們的局部變量和成員變量相同的時候,如果我們不使用this關鍵字,那麼會導致一個問題:就是局部變量隱藏了成員變量的問題
    • this關鍵字特點
      • 是當前類的對象引用
      • 簡單的記,它就代表當前類的一個對象。誰調用這個方法,那麼該方法的內部的this就代表誰
    • this的應用場景
      • 解決局部變量隱藏成員變量
  • this和super的區別
    • A:通過問題引出super
      • 子類局部範圍訪問父類成員變量
    • B:說說this和super的區別
      • this 代表的是本類對象的引用
      • super 代表的是父類存儲空間的標識(可以理解成父類的引用,可以操作父類的成員)
    • C:this和super的使用
      • a:調用成員變量
        • this.成員變量 調用本類的成員變量
        • super.成員變量 調用父類的成員變量
      • b:調用構造方法
        • this(…) 調用本類的構造方法
        • super(…) 調用父類的構造方法
      • c:調用成員方法
        • this.成員方法 調用本類的成員方法
        • super.成員方法 調用父類的成員方法

instanceof

  • 這玩意兒是什麼呢?
    • instanceof是Java的一個二元操作符,和==,>,<是同一類東西。由於它是由字母組成的,所以也是Java的保留關鍵字。它的作用是測試它左邊的對象是否是它右邊的類的實例,返回boolean類型的數據。
  • 使用過程中注意事項有哪些?
    • 類的實例包含本身的實例,以及所有直接或間接子類的實例
    • instanceof左邊顯式聲明的類型與右邊操作元必須是同種類或存在繼承關係,也就是說需要位於同一個繼承樹,否則會編譯錯誤
     //比如下面就會編譯錯誤
     String s = null;
     s instanceof null     
     s instanceof Integer  
    

Java的註釋方式

// 單行註釋
多用於對屬性,變量以及算法重要轉折時的提示

/* 多行
註釋 /
多用於對類、方法及算法的詳細說明,一般在對類的註釋中要有以下內容:
1.類的簡要說明
2.創建者及修改者
3.創建日期或者最後修改日期
/
* JAVA文檔
註釋 */
使用開發時間久了,也不會有那麼多的規範, 總之一句話 : 代碼是給機器看的, 註釋是給人看的。

Java語法的基礎知識

在進入正式的編程之前, 我們需要了解一些Java的基礎知識。包含常見的基本數據類型 , 命名規則, 訪問修飾符、運算符等

Java的常見基礎數據類型

這裏放一張圖吧, 注意 , 這裏只是簡單的說明了基本的數據類型,所佔的位數與默認值。 這裏和C/C++ 不同的是默認值就是0, 而不是在內存中隨機的一個數值。
在這裏插入圖片描述
照顧一下0基礎的同學,下邊就簡單解釋一下這些基本數據類型

  • 邏輯型–boolean

邏輯值有兩種狀態,即人們經常使用的 “true”和“false”。這樣的值是用boolean類型來表示的。boolean有兩個文字值,即true和false。
以下是一個有關boolean類型變量的聲明和初始化:

boolean truth = true; //聲明變量值爲真

注意:在整數類型和boolean類型之間無轉換計算。有些語言(特別值得強調的是C和C++)允許將數字值轉換成邏輯值,
這在Java編程語言中是不允許的;boolean類型只允許使用boolean值。

字符型–char
使用char類型可表示單個字符。一個char代表一個16-bit無符號的(不分正負的)Unicode字符。一個char文字必須包含在單引號內(‘’)。

‘a’
‘\t’       一個製表符
‘\u????’   一個特殊的Unicode字符。應嚴格按照四個16進制數字進行替換。例如: ’\u03A6’表示希臘字母“Φ”
char類型變量的聲明和初始化如下所示:
char ch = `A'; // 聲明並初始化一個char型變量
char ch1,ch2 ; // 聲明兩個char型變量
char是int兼容的類型,比如可以如下聲明:
int a = ‘a’; // a = 97
char c = 65; // c = ‘A’

  • 文本類–String

String不是原始類型,而是一個類(class),它被用來表示字符序列。字符本身符合Unicode標準。與C和C++不同,String不能用 \0作爲結束。
String的文字應用雙引號封閉,如下所示:

“The .quick brown fox jumped over the lazy dog.”

String類型變量的聲明和初始化如下所示:

// 聲明兩個String型變量並初始化他們
String greeting = "Good Morning !! \n" ;
String err_msg = "Record Not Found !" ;
String str1,str2 ; // 聲明兩個字符串變量

  • 整數型–byte, short, int, long

在Java編程語言中有四種整數類型,它們分別使用關鍵字byte, short,

int和long中的任意一個進行聲明。整數類型的文字可使用十進制、八進制和16進製表示,如下所示:

十進制值是2
首位的0表示這是一個八進制的數值
0xBAAC  首位的0x表示這是一個16進制的數值

注意──所有Java編程語言中的整數類型都是帶符號的數字。

整數類文字被默認爲int類型。

整數類文字後面緊跟着一個字母“L”,可以強制它爲long型。

例如:

2L        十進制值是2,是一個long
077L      首位的0表示這是一個八進制的數值
0xBAACL  前綴0x表示這是一個16進制的數值

四種整數類型的長度和範圍前面已經列出,這些長度和範圍是按Java編程語言規範定義的,是不依賴於平臺。

  • 浮點數–float和double

如果一個數字文字包括小數點或指數部分,則該數字文字爲double型浮點數。
例如:

3.14
3.02E23  

如果一個數字文字後帶有字母F或f,則該數字文字爲float型浮點數。
例如:

2.718F        

如果一個數字文字後帶有字母D或d,則該數字文字爲double型浮點數。
例如:

123.4E-306D  

浮點變量可用關鍵字float或double來聲明。

Java技術規範的浮點數的格式不是我定的, 是由電力電子工程師學會(IEEE)754定義的,是獨立於平臺的,所以記住背會考試要考的。

進制

這東西雖然說不算是Java語法裏的範圍,但是這東西用的地方多, 比如顏色值、內存地址大部分是 16進制, 計算機裏最基本的數據格式是二進制 , 日常給人看的大部分是十進制 , 等等 。

  • 二進制

0和1 前綴0B或者0b 比如:0B1001 轉爲十進制是9

  • 八進制

0-7 前綴0 比如:0103

  • 十進制【我們常用的】

0-9 沒有前綴

  • 十六進制

0-9 和 A-F 前綴0x或者0X 比如:0x123

  • 進制轉化

任何進制轉化爲十進制公式:係數 * 底數 ^ 指數

舉個栗子:

0b1010 = 1 * 2^3 + 0 *2^2 + 1*2^1 + 0*2^0
       = 8 + 0 + 2 + 0
       = 10

0123  = 1*8^2 + 2*8^1 + 3*8^0
      = 64 + 16 + 3
      = 83

0x123 = 1*16^2 + 2*16^1 + 3*16^0
      = 256 + 32 + 3
      = 291

編碼方式

常見的字符編碼

  • ASCII碼
  • GBK碼
  • Unicode碼【佔2個字節】

運算符

  • 運算符有哪些?
  • 算術運算符
  • , - , * , / , %【取餘】 , ++【自加】, --【自減】
  • 賦值運算符
    = , += , -= , *= , /= , %=
  • 關係運算符
    == , > , < , >= , <= , !=
  • 邏輯運算符
    & ,^ ,| ,&& ,|| ,! , ^
  • 三目運算符
    格式:(條件表達式)?表達式1:表達式2
  • 位運算符
    & , | , ^ , ~ , << , >> , >>>

這個放個運算符優先級圖
在這裏插入圖片描述
說一個比較笨但是比較有效的方法,如果不確定優先級, 就按照自己想的運算順序加括號。

總結

這篇文章主要寫了Java的基礎知識、關鍵字、基本數據類型、運算符等 。 我們下篇見。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章