自學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.字元型拓展
- 單引號用來表示字元常量。例如‘A’是一個字元,它與“A”是不同的,“A”表示一個字串。
- char 型別用來表示在Unicode編碼表中的字元
- 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.布林型拓展
- boolean型別(一位,不是一個位元組),就是0|1
- boolean型別有兩個值,true和false,不可以 0 或非 0 的整數替代 true 和 false ,這點和語言不同
- boolean 型別用來判斷邏輯條件,一般用於程式流程控制
型別轉換
- 由於Java是強型別語言,所以要進行有些運算的時候的,需要用到型別轉換
- 整型、實型(常量)、字元型資料可以混合運算
- 運算中,不同型別的資料先轉化為同一型別,然後進行運算
- 轉換從低階到高階(根據容量來看)
資料型別轉換必須滿足如下規則:
- 不能對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.強制型別轉換
- 強制型別轉換,又被稱為造型,用於顯式的轉換一個數值的型別
- 在有可能丟失資訊的情況下進行的轉換是通過造型來完成的,但可能造成精度降低或溢位
- 強制型別轉換的語法格式: (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)
- Java是一種強型別語言,每個變數都必須宣告其型別
- Java變數是程式中最基本的儲存單元,其要素包括變數名,變數型別和作用域
- 變數在使用前必須對其宣告, 只有在變數宣告以後,才能為其分配相應長度的儲存單元
注意事項:
- 每個變數都有型別,型別可以是基本型別,也可以是引用型別
- 變數名必須是合法的識別符號
- 變數宣告是一條完整的語句,因此每一個宣告都必須以分號結束
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.變數的命名規範
- 所有變數、方法、類名:見名知意
- 類成員變數:首字母小寫和駝峰原則 : monthSalary
- 區域性變數:首字母小寫和駝峰原則
- 常量:大寫字母和下劃線:MAX_VALUE
- 類名:首字母大寫和駝峰原則: Man, GoodMan
- 方法名:首字母小寫和駝峰原則: 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);
}
}
執行效果:
運算子優先順序