到頭來仍是逃不開Java - Java13程序基礎

java程序基礎

沒有特殊說明,個人全部學習筆記都是從廖老師那裏摘抄過來的,侵刪java

引言

兜兜轉轉到了大四,學過了C,C++,C#,Java,Python,學一門丟一門,到了最後仍是要把Java撿起來。因此奉勸你們,面向對象仍是要掌握一門,雖然Python好寫舒服,可是畢竟不能徹底面向對象,也沒有那麼多的應用場景,因此,奉勸看到本文的各位,仍是提早學好C#或者Java,話很少說,直接開幹!數組

Java程序的基本結構

  • 每一個Java程序只能有一個public修飾的類,而且該類的名字要和該Java程序文件同名。學習

  • Java入口程序規定的方法必須是靜態方法,方法名必須爲main,括號內的參數必須是String數組。ui

  • public static void main(String[] args) { // 方法名是main
              // 方法代碼...
          } // 方法定義結束
  • 類名首字母大寫,方法名首字母小寫。編碼

  • Java的每一行語句必須以分號結束。3d

  • 特殊的多行註釋須要寫在類和方法的定義處,能夠用於自動建立文檔。code

  • /**
       * 能夠用來自動建立文檔的註釋
       * 
       * @auther liaoxuefeng
       */
      public class Hello {
          public static void main(String[] args) {
              System.out.println("Hello, world!");
          }
      }
  • Eclipse IDE提供了快捷鍵Ctrl+Shift+F(macOS是⌘+⇧+F)幫助咱們快速格式化代碼的功能。對象

變量和數據類型

  • Java中,變量分爲兩種:基本類型的變量和引用類型的變量。blog

  • 在Java中,變量必須先定義後使用,在定義變量的時候,能夠給它一個初始值。ip

  • 不寫初始值,就至關於給它指定了默認值。默認值老是0

  • 不一樣的數據類型佔用的字節數不同,byte剛好就是一個字節,而longdouble須要8個字節。

  • ┌───┐
        byte │   │
             └───┘
             ┌───┬───┐
       short │   │   │
             └───┴───┘
             ┌───┬───┬───┬───┐
         int │   │   │   │   │
             └───┴───┴───┴───┘
             ┌───┬───┬───┬───┬───┬───┬───┬───┐
        long │   │   │   │   │   │   │   │   │
             └───┴───┴───┴───┴───┴───┴───┴───┘
             ┌───┬───┬───┬───┐
       float │   │   │   │   │
             └───┴───┴───┴───┘
             ┌───┬───┬───┬───┬───┬───┬───┬───┐
      double │   │   │   │   │   │   │   │   │
             └───┴───┴───┴───┴───┴───┴───┴───┘
             ┌───┬───┐
        char │   │   │
             └───┴───┘
  • 在Java中的整形,和他們的取值範圍

    • byte:-128 ~ 127
    • short: -32768 ~ 32767
    • int: -2147483648 ~ 2147483647
    • long: -9223372036854775808 ~ 9223372036854775807
    public class Main {
        public static void main(String[] args) {
            int i = 2147483647;
            int i2 = -2147483648;
            int i3 = 2_000_000_000; // 加下劃線更容易識別,並且不會有錯
            int i4 = 0xff0000; // 十六進制表示的16711680
            int i5 = 0b1000000000; // 二進制表示的512
            long l = 9000000000000000000L; // long型的結尾須要加L
            System.out.println(i3);
        }
    }
  • 浮點型的數就是小數,由於小數用科學計數法表示的時候,小數點是能夠「浮動」的

  • float f1 = 3.14f;
      float f2 = 3.14e38f; // 科學計數法表示的3.14x10^38
      double d = 1.79e308;
      double d2 = -1.79e308;
      double d3 = 4.9e-324; // 科學計數法表示的4.9x10^-324
  • 布爾類型boolean只有truefalse兩個值,布爾類型老是關係運算的計算結果

    • Java語言對布爾類型的存儲並無作規定,由於理論上存儲布爾類型只須要1 bit,可是一般JVM內部會把boolean表示爲4字節整數。
  • 字符類型char表示一個字符。Java的char類型除可表示標準的ASCII外,還能夠表示一個Unicode字符。

    • 注意char類型使用單引號',且僅有一個字符,要和雙引號"的字符串類型區分開。
  • 定義變量的時候,若是加上final修飾符,這個變量就變成了常量:

  • final double PI = 3.14; // PI是一個常量
      double r = 5.0;
      double area = PI * r * r;
      PI = 300; // compile error!
    • 常量在定義時進行初始化後就不可再次賦值,再次賦值會致使編譯錯誤。
  • var關鍵字

  • StringBuilder sb = new StringBuilder();
      var sb = new StringBuilder();//類型的名字太長了
  • 變量的做用範圍

    • 而在語句塊中定義的變量,它有一個做用域,就是從定義處開始,到語句塊結束。

整數運算

  • 遵循四則運算規則,可使用任意嵌套的小括號

  • 整數的數值表示不可是精確的,並且整數運算永遠是精確的,即便是除法也是精確的,由於兩個整數相除只能獲得結果的整數部分:

  • 求餘運算使用%

  • 整數的除法對於除數爲0時運行時將報錯,但編譯不會報錯

  • 整數因爲存在範圍限制,若是計算結果超出了範圍,就會產生溢出,而溢出不會出錯,卻會獲得一個奇怪的結果。

  • 自增/自減

    • Java還提供了++運算和--運算,它們能夠對一個整數進行加1和減1的操做:
  • 若是對一個負數進行右移,最高位的1不動,結果仍然是一個負數:

  • 還有一種不帶符號的右移運算,使用>>>,它的特色是符號位跟着動,所以,對一個負數進行>>>右移,它會變成正數,緣由是最高位的1變成了0

  • byteshort類型進行移位時,會首先轉換爲int再進行位移。

    仔細觀察可發現,左移實際上就是不斷地×2,右移實際上就是不斷地÷2。

  • 位運算是按位進行與、或、非和異或的運算。

  • 運算優先級

    在Java的計算表達式中,運算優先級從高到低依次是:

    ()

    ! ~ ++ --

    * / %

    + -

    << >> >>>

    &

    |

    += -= *= /=

  • 類型自動提高與強制轉型

    • 強制轉型使用(類型)
    • 超出範圍的強制轉型會獲得錯誤的結果,緣由是轉型時,int的兩個高位字節直接被扔掉,僅保留了低位的兩個字節。
    • 強制轉型的結果極可能是錯的。
    • 應該選擇合適範圍的整型(intlong),沒有必要爲了節省內存而使用byteshort進行整數運算。

浮點數運算

  • 浮點數運算和整數運算相比,只能進行加減乘除這些數值計算,不能作位運算和移位運算。

  • 因爲浮點數存在運算偏差,因此比較兩個浮點數是否相等經常會出現錯誤的結果。正確的比較方法是判斷兩個浮點數之差的絕對值是否小於一個很小的數:

  • 整數運算在除數爲0時會報錯,而浮點數運算在除數爲0時,不會報錯,但會返回幾個特殊值:

    • NaN表示Not a Number
    • Infinity表示無窮大
    • -Infinity表示負無窮大
  • double d1 = 0.0 / 0; // NaN
      double d2 = 1.0 / 0; // Infinity
      double d3 = -1.0 / 0; // -Infinity

能夠將浮點數強制轉型爲整數。在轉型時,浮點數的小數部分會被丟掉。若是轉型後超過了整型能表示的最大範圍,將返回整型的最大值

若是要進行四捨五入,能夠對浮點數加上0.5再強制轉型。

整型和浮點型運算時,整型會自動提高爲浮點型。

布爾運算

  • 布爾運算是一種關係運算,包括如下幾類:
    • 比較運算符:>>=<<===!=
      • 與運算 &&
      • 或運算 ||
      • 非運算 !
  • 優先級從高到低依次是:
    • !
    • >>=<<=
    • ==!=
    • &&
    • ||
  • 短路運算
    • 布爾運算的一個重要的特色是短路運算,若是一個布爾運算的表達式能提早肯定結果,則後續的計算再也不執行,直接返回結果。
  • 三元符運算
    • b ? x : y,它根據第一個布爾表達式的結果,分別返回後續兩個表達式之一的計算結果。

字符和字符串

  • 在Java中,字符和字符串是兩個不一樣的類型。

    • 基本類型的變量是「持有」某個數值,引用類型的變量是「指向」某個對象;
  • 字符類型

    • char類型是基本的數據類型
    • 一個char保存一個Unicode字符
    • 轉義字符\u+Unicode編碼來表示一個字符
    • 由於Java在內存中老是使用Unicode表示字符,因此,一個英文字符和一箇中文字符都用一個char類型表示,它們都佔用兩個字節。要顯示一個字符的Unicode編碼,將char類型直接賦值給int類型即便可。
  • char c1 = 'a'
      char c2 = '中'
      int n1 = 'a'//65
      int n2 = '中'//20013
        // 注意是十六進制:
      char c3 = '\u0041'; // 'A',由於十六進制0041 = 十進制65
      char c4 = '\u4e2d'; // '中',由於十六進制4e2d = 十進制20013
  • 字符串類型

    • String字符串類型是引用類型
    • 常見的轉義字符包括:
      • \" 表示字符"
      • \' 表示字符'
      • \\ 表示字符\
      • \n 表示換行符
      • \r 表示回車符
      • \t 表示Tab
      • \u#### 表示一個Unicode編碼的字符
  • 字符串鏈接

    • 使用+鏈接任意字符串和其餘數據類型
      • 若是使用+鏈接字符串和其餘類型,Java會自動將其餘類型轉換爲字符串類型,再鏈接。
  • 多行字符串

    • 從Java13開始,字符串能夠用"""..."""表示多行字符串
  • 不可變特性

    • 字符串s變了嗎?其實變的不是字符串,而是變量s的「指向」
    • 原來的s還在,只是咱們不能再經過s訪問
  • 空值null

  • String s1 = null; // s1是null
      String s2; // 沒有賦初值值,s2也是null
      String s3 = s1; // s3也是null
      String s4 = ""; // s4指向空字符串,不是null

數組類型

  • Java的數組有幾個特色:

    • 數組全部元素初始化爲默認值,整型都是0,浮點型是0.0,布爾型是false
    • 數組一旦建立後,大小就不可改變
    • 數組是引用類型
    • 數組元素能夠是值類型(如int)或引用類型(如String),但數組自己是引用類型
  • 數組變量.length獲取數組大小

    int[] ns = new int[] { 68, 79, 91, 85, 62 };//這樣能夠不聲明數組的大小
    int[] ns = { 68, 79, 91, 85, 62 };//還能夠進一步簡化爲這樣
  • 字符串數組

    • 數組自己是引用類型,其中的元素也是引用類型的字符串類型。
相關文章
相關標籤/搜索