1. 程式人生 > 其它 >3java基礎補充(今天和昨天學習內容整理)

3java基礎補充(今天和昨天學習內容整理)

1.java單機專案

2.JavaSE又被稱為J2SE,JavaEE和JavaME類同。

3.Java特性(總結)

(1)跨平臺/可移植性:相同的Java程式碼可以在任何一個支援的平臺(作業系統)上執行,這是因為.java原始檔首先會編譯為.class的位元組碼檔案,這個位元組碼檔案會在不同作業系統的不同JVM上執行,最終獲得相同的效果。這也正是“一次編譯,處處執行”的原理。同時,Java規定所有的資料型別在所有平臺上佔得記憶體都相同,保證了跨平臺性的可行性。

(2)面向物件:Java是完全面向物件的程式語言,其他面向物件的語言還有C#,C++,Python等。

(3)安全性:Java適合於其分散式/網路服務的開發,是安全性很高的語言。

(4)簡單:Java較C語言比較簡單。同時去除了指標的概念。

(5)高效性:Java通過即時編譯技術,即將一些經常容易用到的熱點程式碼的機器碼儲存在本地,這樣大大提升了Java的執行效率。

(6)分散式:

(7)多執行緒:Java可以同時開啟多個執行緒、多級執行緒,可以提供更好的互動響應和實時行為。

(9)健壯性:Java的健壯性體現在一是在編寫程式碼時就顯示了許多C系語言在編譯時才會出現的錯誤;二是Java會處理一些可能的異常,將他們在try-catch塊中處理或是丟擲。

(10)垃圾處理機制:也稱GC,是一種系統級執行緒,可以實時跟蹤java中用不到的記憶體並自動將其釋放,避免了C系語言需要程式設計師自己清除垃圾的工作。但仍可能造成記憶體的溢位或崩潰。

4.開發一個Java程式:

(1)安裝jdk(java development kit) jdk = jre+開發工具包 jre = 核心API+JVM。其中jdk用於開發java程式,jre用於執行java程式。

(2)配置環境變數:配置%JAVA_HOME%為jdk目錄,PATH新增%JAVA_HOME%/bin。目的是為了在系統中處處可以直接執行java命令。

(3)建立.java原始檔,在其中新增java程式碼。其中如果有主類,主類名必須和檔名一致。

(4)在原始檔目錄下,使用cmd,輸入javac 原檔名.java 命令,進行編譯。編譯完成後輸入java 原始檔名 命令,執行位元組碼檔案。在jdk11中也可以直接輸入java 原始檔名.java 編譯+執行。

(5)注意事項:在程式碼中所有的標點符號都必須是英文狀態;程式碼需要有良好的格式:在java程式碼中 以大括號進行層級區分 在同一個大括號中的程式碼 應該具有相同的縮排層次 縮排一般一個層級縮排一個製表符(Tab);在java程式碼中 每條語句結束必須以分號結尾;在java中 所有檔案的存放路徑或者軟體的安裝路徑都必須是全英文的,路徑中不能出現中文或空格 等特殊符號;

當修改了java源程式之後 每次都需要重新編譯執行。

5.java的兩個核心:jvm和gc

6.資料型別、運算子、表示式要點

(1)輸入整數預設為int型別。bool、char、short型別的變數,一旦經過運算,其型別都會變成int型別,不能直接賦值。但是賦值運算子可以自動將其型別強制轉換。

(2)發生上溢(正變負)時,數值的計算使用補碼的計算過程。

(3)字串拼接中有整型時,在字串前面的整型進行計算,在字串後面的整型視為字串。

(4)表示式的計算,首先是按照從左向右的順序,其次注意自增自減變數在表示式中的變化,如

  int y = x++ + x++ + x++;
  System.out.println(y);// 10 +11 + 12 = 33

(5)模運算規則:被取餘數的符號決定餘數的符號,如

int ss1 =  7 % 3;// 1
int ss2 = -7 % 3; //-1
int ss3 = 7 % -3 ; // 1

(6)資料型別表示的範圍大小:bool->char/short->int->long->float->double。大的自動相容小的,多個型別進行運算,結果自動轉為大的型別。

(7)浮點數運算,兩個float型別運算結果仍然為float型別。

(8)字元運算中使用的是字元的ascii碼。常用的有'a'=97 'A'=65 '0'=48。注意區分(char)0、(int)'0'和'0'。

(9)區分Java中邏輯與/或和按位與/或:看運算子兩邊的型別,如果是整型則為位運算子,如果是boolean型別則為邏輯運算子。

(10)交換兩數記憶體最少、時間最短的方法是異或再異或。

(11)long型別表示超出int範圍的數,需要在後面加上l。

(12)十進位制直接輸入,8進位制前面加0,16進位制前面加0x,2進位制前面加0b。

(13)由於double和float型別並不能夠儲存精確的數值,因此最好不要使用浮點數型別比較,會得到一定精度以上的數值相等的情況。如果要儲存很大的數可以使用大整數或者字串。

(14)char可以存英文、中文字元、數字以及unicode碼,因此它的大小是2位元組。boolean只有true和false兩個值,因此它的大小是1bit。

(*15)utf-8是一種unicode編碼,它使用變長儲存,一個n位元組的utf-8碼,第一個位元組前n位是1,後面每個位元組高兩位都是10。這樣保證了只有128個的ascii碼不會浪費空間。

(16)如圖所示,兩個int整數相乘發生了上溢,但在轉化為long型別之前運算就結束了,錯誤的結果還是儲存到了long型別中。正確的寫法應該是將任意一個強轉為long型別。

int money =1000000000;
int year = 20;
long total = money * year;
System.out.println(total);//-1474836480

(17)一般只針對兩個整型求餘,但浮點數也可以求餘。

7.switch語句

(1)switch的表示式的型別: char, byte, short, int及其對應的引用型別, enum(列舉) , String(jdk7+)

(2)default可以出現在任意位置

(3)switch語句只能實現具體、有限的值的邏輯判斷switch語句可以實現的,if語句一定可以實現

8.帶標籤的break和continue

 outter: for(int i = 101; i < 150 ;i ++){
            for(int j = 2; j < i/2 ; j++){
                if(i % j == 0 ){
                    continue outter;
                }
            }
            System.out.println(i);
        }

9.錯題(2)

解析:java方法中可以一次傳入多個引數,通過陣列/list/set以及不定陣列等,但是不可以一次返回多個引數,只能放在陣列/集合中返回。

D:(char)0 == 0 ,由於陣列中的字元一定是可以輸入的ascii字元,一定成立;a[i]<=(char)9表示ascii表中前9個ascii字元,而0-9是ascii碼中48-57的字元。