Java入門之基礎程式設計

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過來的!
  • 尊重每一位學習知識的人,同時也尊重每一位分享知識的人。