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
- break
作用:可以跳出當前迴圈
2.continue
作用:使程式重新開始迴圈
5.3大數
如果基本的整數和浮點數不能滿足下需求,那麼可以使用java.math包中的兩個類:BigInteger和BigDecimalBigInteger 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二維陣列
- 對於二維陣列的遍歷如果要用增強for迴圈,也就是for each也要用兩層
- 二維陣列的遍歷方法可以使用
Arrays.deepToString(a);
7.結尾
- 對於面向物件之前的內容就總結這麼多,如果有不足之處,希望大家多多包涵,多多支援。如果有不懂的地方可以直接私信問我,歡迎來訪!
- 我將會繼續更新關於Java的學習知識,感興趣的小夥伴可以關注一下。
- 文章寫得比較走心,用了很長時間,絕對不是copy過來的!
- 尊重每一位學習知識的人,同時也尊重每一位分享知識的人。