Java入門之基礎程式設計

漁夫會扎蛙發表於2022-03-31

1、Java語言特點了解

1. java語言:

  有些語言提供了可移植性、垃圾收集等機制,但是沒有提供一個大型的庫。如果想要有酷炫的繪圖功能、網路連線功能或者資料庫存取功能,就必須動手編寫程式碼。Java具備所有這些特性,它是一種功能齊全的出色語言,是一個高質量的執行環境,還提供了一個龐大的庫。

2. java特點:

 (1)簡單性:Java語言是C++語法的一個“純淨版本”。沒有標頭檔案、指標運算等。
 (2)物件導向:物件導向設計是一種程式設計,將重點放在資料(物件)和物件的介面上。
 (3)分散式:Java有一個豐富的例程庫,用於處理像HTTP和FTP之類的TCP/IP協議。Java應用程式能夠通過URL開啟和訪問網路上的物件,其便捷程度就好像訪問本地檔案一樣。
 (4)健壯性:Java編譯器能夠檢測許多其它語言中僅在執行時才能夠檢測出來的問題。(花幾個小時找指標bug很難受吧!)。
 (5)安全性:執行時堆疊溢位,這是蠕蟲和病毒常用的攻擊手段。破壞自己的程式空間之外的記憶體。未經授權讀寫檔案。
 (6)體系結構中立
 (7)可移植性:二進位制資料以固定的格式進行儲存和傳輸,消除了位元組順序的困擾。字串則採用標準的Unicode格式儲存。Java中的int永遠為32位整數。
 (8)解釋性
 (9)高效能
 (10)多執行緒:多執行緒可以帶來更快的互動響應和實時行為。如今,我們非常關注併發性,因為摩爾定律即將走到盡頭。我們不再追求更快的處理器,而是著眼於獲得更多的處理器,Java時第一個支援併發程式設計的主流語言。

2、Java基本資料型別

2.1識別符號和關鍵字

2.1.1一個簡單的Java應用程式

//簡單寫Hello,World!
public class FirstText {
    public static void main(String[] args) {
        System.out.println("We will not use 'Hello,World!'");
    }
}

2.1.2註釋

 1. 第一種單行註釋://
 2. 第二種多行註釋:/* /(註釋不能巢狀!)
 3. 第三種文件註釋:以/**開始,以
/結束

2.1.3識別符號命名規範

  • 識別符號由字母、下劃線_、美元符號$和數字組成,長度不受限制。
  • 識別符號的第一個字元不能時數字。
  • 識別符號不能是關鍵字。
  • 識別符號不能是true、false和null
  • 識別符號區分大小寫。

2.1.4Unicode字符集

 Java語言使用Unicode字符集,可識別65536個字元。Unicode字符集的前128個字元剛好是ASCII碼,大部分國家的“字母表”都是Unicode字符集中的一個字元。Java所謂的字母包括了世界上大部分語言中的“字母表”。

2.1.5關鍵字

關鍵字不能作為識別符號來命名

 關鍵字有:abstract、boolean、break、byte、int、if、char等等

2.2基本資料型別

  • 邏輯型別:boolean 值只能為true或者false
  • 整數型別:byte、short、int、long
  • 字元型別:char
  • 浮點型別:float、double
  • NaN(不是一個數字)
型別 位元組數 取值範圍
int 4位元組 -2147483648 ~ 2147483647
short 2位元組 -32768 ~ 32767
long 8位元組 -9223372036854775808 ~ 9223372036854775807
bye 1位元組 -128 ~ 127

long型常量字尾l或者L表示 :long a = 120L
float型常量字尾f或者F表示:float b = 123.345f (保留8位有效數字)

2.3基本型別轉換

資料轉換按照精度從低到高排列:

byte short char int long float double
1.當把級別低的變數的值賦給級別高的變數時,系統會自動完成資料型別的轉換:

public class FirstText {
    public static void main(String[] args) {
        int x = 50;
        float y;
        y = x;
       //輸出y將是 50.0
    }
}

2.當把級別高的變數的值賦給級別低的變數時,必須使用型別轉換運算:(型別名)要轉換的值;

public class FirstText {
    public static void main(String[] args) {
        int x = (int)34.89;
        long y = (long)56.77F;
        int z = (int)1999L;
        //輸出 x y z的值,結果是 34、56、1999、型別轉換運算的結果的精度低於原資料的精度
        //因為強制型別轉換通過截斷小數部分將浮點值轉換為整型。
        //如果想對浮點數進行舍入運算,以便得到最接近的整數,可以使用Math.round方法。
        `double x = 9.997;
        int n =(int) Math.round(x);`
    }
}

2.4運算子

2.4.1自增自減運算子

只需要記住a++和++a
區別:a++是先用a 然後再自增,可以理解為後自增,而++a是 先自增後用a,可以理解為先自增

2.4.2邏輯運算子

&與&&運算結果相同
當符號左邊是false時,&繼續執行符號右邊計算
&&不執行。 二者都為false
|與|| 當左邊為flase二者都會執行
當左邊為true時,|繼續執行右邊得運算,||不再執行右邊運算
instanceof運算子
instanceof運算子是二目運算子,左面的操作元是一個物件,右面是一個類。
當左邊的物件是右邊的類或者子類建立的物件時,該運算子結果位true,否則是false。

2.4.3三元表示式

三元表示式非常簡潔好用:
條件 ? 表示式1:表示式2
x<y?x:y 如果x<y成立,則取x,否則取y

3、輸入與輸出資料

3.1.1輸入基本型資料

Scanner scan = new Scanner(System.in);

public class FirstText {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int a = scan.nextInt();
        byte b = scan.nextByte();
        double c = scan.nextDouble();
        String d = scan.next();
    }
}

3.1.2輸出基本資料型別

System.out.println(a);
out可以使用printf()方法(類似C語言中的printf()函式)
System.out.printf("%d\n",a);
擴充:檔案的輸入與輸出
從檔案讀取內容:
Scanner in = new Scanner(Path.of("C:\\myfile.txt"),StandardCharsets.UTF_8);
寫入檔案:
PrintWriter out = new PrintWriter("C:\\myfile.txt",StandardCharsets.UTF_8);

4、字串

 Java字串就是Unicode字元序列。
String a = ""; //空串

4.1子串

String類的substring()方法可以從一個較大的字串提取一個子串。

public class FirstText {
    public static void main(String[] args) {
        String a ="Hello";
        String sub = a.substring(0, 3);
        System.out.println(sub);
        //輸出結果為 Hel
        //substring擷取範圍 [0,3) 左閉右開。
    }
}

4.2拼接

 字串的拼接在java中非常簡單:使用 +號連線兩個字串即可

public class FirstText {
    public static void main(String[] args) {
        String a ="Hello";
        String b ="World";
        System.out.println(a+b+"!");
//輸出結果為 HelloWorld!
    }
}

4.3不可變字串

String類沒有提供修改字串中某個字元的方法。如果希望修改字串的內容,不能直接操作。但是在java中我們可以靈活多變:若想將"HelloWorld"---->"HelloWorpp"

 用字串擷取辦法擷取"HelloWor" 再拼接上 + "pp"即可完成

public class FirstText {
    public static void main(String[] args) {
        String a ="HelloWorld";
        String b =a.substring(0,8);
        System.out.println(b + "pp");
//輸出結果為"HelloWorpp"
    }
}

4.4空串和null串

 空串""是長度為0的字串,可以用如下方法檢查是否為空串
if(str.length() == 0)或者if(str.equals(""))
 空串和null是不一樣的,檢查是否為null方法
if(str == null))
注意:如果再一個null值上呼叫方法,會出現錯誤!

5、if、while、for、switch語句以及break、continue用法

5.1if、while、for、switch

 if條件語句用法格式:
if(表示式){
  若干語句;
}

 if-else語句格式:
if(表示式){
  若干語句;
}else {
  若干語句;
}

 switch開關語句

public class FirstText {
    public static void main(String[] args) {
        switch (表示式){
            case 常量值1:
                若干語句;
                break;
            case 常量值2:
                若干語句;
                break;
            case 常量值n:
                若干語句;
                break;
            default:
                若干語句;
        }
    }
}

case標籤可以是:

  • 型別為char、byte、short、或者int的常量表示式
  • 列舉常量
  • 字串字面量
     do-while迴圈語句:
    do{
      若干語句;
    }while(表示式);
     while語句格式:
    while(表示式) {
    若干語句;
    }
     for語句的語法格式:
    for(表示式1;表示式2;表示式3){
      若干語句
    }

5.2中斷流程控制break、continue

  1. break
    作用:可以跳出當前迴圈
    2.continue
    作用:使程式重新開始迴圈

5.3大數

 如果基本的整數和浮點數不能滿足下需求,那麼可以使用java.math包中的兩個類:BigInteger和BigDecimal
BigInteger a = new BigInteger("2222222222222222222222222222222222222222547546235345345");
大數其實就是將它轉換成了字串的形式表達,大數的加減乘除運算要用這個方法:
BigInteger c = a.add(b); //c = a+b

6、陣列

6.1陣列宣告

int[] a;
int a[];
int[] a = new int[100]
int[] a = new int[]{1,2,3,4,5,6,7};
陣列的宣告形式有很多樣,但要記住長度為0的陣列和null是不一樣的
new arr[0]或者new arr[]{} 都可以表示長度為0

6.2陣列元素

  •  建立一個數字陣列是,所有元素都初始化為0
  •  boolean陣列的元素會初始化為false
  •  物件陣列的元素則初始化為一個特殊值null,表示這些元素還未存放任何物件。字串也如此
    再次強調不要用null的值去調方法,會報錯!!

6.3for each迴圈

 java中有一種增強for迴圈,格式如下:
for(型別 變數:集合){
  sout(變數);
}

public class FirstText {
    public static void main(String[] args) {
        int[] a = new int[]{1, 2, 3};
        for (int x : a) {//增強for each
            System.out.println(a);
        }
        for(int i=0; i < a.length;i++){
            System.out.println(a[i]);
        }
    }
}

增強for迴圈的缺點是 無法對下標進行操作,常用於對集合的遍歷使用。
若想進行下標操作,推薦使用傳統for迴圈

6.4陣列的拷貝與排序

 陣列的拷貝使用Arrays.copyOf();這裡就不詳細介紹了可以多看看API文件
 陣列的排序使用的是Arrays類中的sort方法:

public class FirstText {
    public static void main(String[] args) {
        int[] a = new int[]{2, 1, 3};
        int[] b = Arrays.copyOf(a, 3); //陣列的複製
        Arrays.sort(b);//排序
        System.out.println(Arrays.toString(b));
//輸出結果[1,2,3]
    }
}

這個方法使用的是優化了的快速排序(QuickSort)演算法

6.5二維陣列

  1. 對於二維陣列的遍歷如果要用增強for迴圈,也就是for each也要用兩層
  2. 二維陣列的遍歷方法可以使用 Arrays.deepToString(a);

7.結尾

  • 對於物件導向之前的內容就總結這麼多,如果有不足之處,希望大家多多包涵,多多支援。如果有不懂的地方可以直接私信問我,歡迎來訪!
  • 我將會繼續更新關於Java的學習知識,感興趣的小夥伴可以關注一下。
  • 文章寫得比較走心,用了很長時間,絕對不是copy過來的!
  • 尊重每一位學習知識的人,同時也尊重每一位分享知識的人。

相關文章