1. 程式人生 > 其它 >自學JAVA第一天:基礎語法

自學JAVA第一天:基礎語法

前言

這幾天開始自學JAVA,因為有c的基礎,所以前面學起來也比較快。也是因為狂神大大講的也比較細。
這篇隨筆是基於狂神大大的講課內容和筆記總結而成的。

註釋

平時我們編寫程式碼,在程式碼量比較少的時候,我們還可以看懂自己寫的,但是當專案結構一旦複雜起來,我們就需要用到一個註釋了。不然程式碼開始的話只有你和上帝知道,過幾天只有上帝知道了。

public class Hello {

    public static void main(String[] args)
    {
        System.out.print("hello world!");


        /**
         System.out.print("hello world!");      多行註釋
         */

        //System.out.print("hello world!");     單行註釋

    }
}

Java中的註釋有三種:
單行註釋:只能註釋當前行,以//開始,直到行結束

 //System.out.print("hello world!");

多行註釋:註釋一段文字,以/開始, /結束

 /**
         System.out.print("hello world!");      多行註釋
         */

文件註釋:用於生產API文件,配合JavaDoc

識別符號

Java 所有的組成部分都需要名字。類名、變數名以及方法名都被稱為識別符號。
關於 Java 識別符號,有以下幾點需要注意:

  • 所有的識別符號都應該以字母(A-Z 或者 a-z),美元符($)、或者下劃線(_)開始
  • 首字元之後可以是字母(A-Z 或者 a-z),美元符($)、下劃線(_)或數字的任何字元組合
  • 不能使用關鍵字作為變數名或方法名。
  • 識別符號是大小寫敏感的
  • 合法識別符號舉例:age、$salary、_value、__1_value
  • 非法識別符號舉例:123abc、-salary、#abc
    【 JAVA不採用通常語言使用的ASCII字符集,而是採用unicode這樣的標準的國際字符集。因此,這裡的字母的含義:可以表示英文、漢字等等。】

資料型別

Java是一種強型別語言,每個變數都必須宣告其型別。

1.強弱型別語言

強型別語言也稱為強型別定義語言。要求變數的使用要嚴格符合規定,所有變數都必須先定義後才能使用。
Java、.NET、C++等都是強制型別定義的。也就是說,一旦一個變數被指定了某個資料型別,如果不經過轉換,那麼它就永遠是這個資料型別了。

弱型別語言也稱為弱型別定義語言。與強型別定義相反。像vb,php等就屬於弱型別語言

2.資料型別

Java的資料型別分為兩大類:基本型別(primitive type)和引用型別 (reference type)

【注:引用資料型別的大小統一為4個位元組,記錄的是其引用物件的地址!】

3.浮點型拓展

浮點型別float, double的資料不適合在不容許舍入誤差的金融計算領域。如果需要進行不產生舍入誤差的精確數字計算,需要使用BigDecimal類。

public class demo {
    public static void main(String[] args) {
        float f = 0.1f;
        double d = 1.0/10;
        System.out.println(f==d); //false
        float d1 = 2131231231f;
        float d2 = d1+1;
        if(d1==d2){
            System.out.println("d1==d2");
        }else{
            System.out.println("d1!=d2");
        }
    }
}

執行結果如下

由於字長有限,浮點數能夠精確表示的數是有限的,因而也是離散的。浮點數一般都存在舍入誤差,很多數字無法精確表示,其結果只能是接近,但不等於;二進位制浮點數不能精確的表示0.1,0.01,0.001這樣10的負次冪。並不是所有的小數都能可以精確的用二進位制浮點數表示。最好完全避免使用浮點數比較 !

大數值:Java.math下面的兩個有用的類:BigInteger和BigDecimal,這兩個類可以處理任意長度的數值。BigInteger實現了任意精度的整數運算。BigDecimal實現了任意精度的浮點運算。

4.字元型拓展

  1. 單引號用來表示字元常量。例如‘A’是一個字元,它與“A”是不同的,“A”表示一個字串。
  2. char 型別用來表示在Unicode編碼表中的字元
  3. Unicode編碼被設計用來處理各種語言的所有文字,它佔2個位元組,可允許有65536個字元;(之前還特別疑惑為什麼JAVA的char為什麼是兩個位元組,而C只有一個。現在清楚了)
    程式碼演示
public class demo {
    public static void main(String[] args) {
        char a1 = 'a';
        char a2 = '學';
        System.out.println(a1);
        System.out.println((int) a1);
        System.out.println(a2);
        System.out.println((int) a2);
	}
}

執行如下

Java 語言中還允許使用轉義字元 ‘\’ 來將其後的字元轉變為其它的含義(和C一樣),有如下常用轉義字元:

5.布林型拓展

  1. boolean型別(一位,不是一個位元組),就是0|1
  2. boolean型別有兩個值,true和false,不可以 0 或非 0 的整數替代 true 和 false ,這點和語言不同
  3. boolean 型別用來判斷邏輯條件,一般用於程式流程控制

型別轉換

  1. 由於Java是強型別語言,所以要進行有些運算的時候的,需要用到型別轉換
  2. 整型、實型(常量)、字元型資料可以混合運算
  3. 運算中,不同型別的資料先轉化為同一型別,然後進行運算
  4. 轉換從低階到高階(根據容量來看)

    資料型別轉換必須滿足如下規則:
  • 不能對boolean型別進行型別轉換
  • 不能把物件型別轉換成不相關類的物件
  • 在把容量大的型別轉換為容量小的型別時必須使用強制型別轉換
  • 轉換過程中可能導致溢位或損失精度

1.自動型別轉換

自動型別轉換:容量小的資料型別可以自動轉換為容量大的資料型別
例如: short資料型別的位數為16位,就可以自動轉換位數為32的int型別,同樣float資料型別的位數為32,可以自動轉換為64位的double型別。
程式碼演示:

public class demo {
    public static void main(String[] args) {
        char a='a';
        int b=a;
        System.out.println(a);
        System.out.println(b);
    }
}

執行結果:

2.強制型別轉換

  1. 強制型別轉換,又被稱為造型,用於顯式的轉換一個數值的型別
  2. 在有可能丟失資訊的情況下進行的轉換是通過造型來完成的,但可能造成精度降低或溢位
  3. 強制型別轉換的語法格式: (type)var ,運算子“()”中的type表示將值var想要轉換成的目標資料型別。 條件是轉換的資料型別必須是相容的。
    程式碼演示:
public class demo {
    public static void main(String[] args) {
       double a=3.1415926;
       int b=(int)a;
        System.out.println(b);
    }
}

執行如下

變數,常量

1.變數(variable)

  1. Java是一種強型別語言,每個變數都必須宣告其型別
  2. Java變數是程式中最基本的儲存單元,其要素包括變數名,變數型別和作用域
  3. 變數在使用前必須對其宣告, 只有在變數宣告以後,才能為其分配相應長度的儲存單元

注意事項:

  • 每個變數都有型別,型別可以是基本型別,也可以是引用型別
  • 變數名必須是合法的識別符號
  • 變數宣告是一條完整的語句,因此每一個宣告都必須以分號結束

2.變數作用域

變數根據作用域可劃分為三種:

  • 類變數(靜態變數: static variable):獨立於方法之外的變數,用 static 修飾
  • 例項變數(成員變數:member variable):獨立於方法之外的變數,不過沒有 static 修飾
  • 區域性變數(lacal variable):類的方法中的變數。
    程式碼演示
public class demo {
    static int a; //類變數
    String s="hello world"; //例項變數
    public static void main(String[] args) {

    }
   public  void test()
   {
    int a=0; //區域性變數
   }
}

區域性變數

  • 方法或語句塊內部定義的變數。生命週期是從宣告位置開始到”}”為止
  • 在使用前必須先宣告和初始化(賦初值)
  • 區域性變數沒有預設值,所以區域性變數被聲明後,必須經過初始化,才可以使用

靜態變數

  • 使用static定義
  • 從屬於類,生命週期伴隨類始終,從類載入到解除安裝
  • 如果不自行初始化,他會自動初始化成該型別的預設初始值(數值型變數初始化成0或0.0,字元型變數的初始化值是16位的0,布林型預設是false)

例項變數

  • 方法外部、類的內部定義的變數
  • 從屬於物件,生命週期伴隨物件始終
  • 如果不自行初始化,他會自動初始化成該型別的預設初始值(數值型變數初始化成0或0.0,字元型變數的初始化值是16位的0,布林型預設是false)

3.常量

常量(Constant):初始化(initialize)後不能再改變值,不會變動的值

4.變數的命名規範

  1. 所有變數、方法、類名:見名知意
  2. 類成員變數:首字母小寫和駝峰原則 : monthSalary
  3. 區域性變數:首字母小寫和駝峰原則
  4. 常量:大寫字母和下劃線:MAX_VALUE
  5. 類名:首字母大寫和駝峰原則: Man, GoodMan
  6. 方法名:首字母小寫和駝峰原則: run(), runRun()

運算子

Java 語言支援如下運算子:

  • 算術運算子: +,-,*,/,%,++,--
  • 賦值運算子 =
  • 關係運算符: >,<,>=,<=,==,!= instanceof
  • 邏輯運算子: &&,||,!
  • 位運算子: &,|,^,~ , >>,<<,>>>
  • 條件運算子 ?:
  • 擴充套件賦值運算子:+=,-=,*=,/=

字串連線符
“+” 運算子兩側的運算元中只要有一個是字串(String)型別,系統會自動將另一個運算元轉換為字串然後再進行連線。
程式碼演示:

public class demo {
    public static void main(String[] args) {
        String s1="hello";
        String s2="world";
        int a=1;
        System.out.println(a+"."+s1+s2);
    }
}

執行效果:

運算子優先順序