什麼是註釋?
註釋:就是對代碼的解釋和說明。其目的是讓人們能夠更加輕鬆地瞭解代碼。爲代碼添加註釋,是十分必須 要的,它不影響程序的編譯和運行。
- 單行註釋
- 多行註釋
- 文檔註釋 (java特有)
註釋的好處:
- 提高了代碼的閱讀性;調試程序的重要方法。
- 註釋是一個程序員必須要具有的良好編程習慣。
- 將自己的思想通過註釋先整理出來,再用代碼去體現
單行註釋
- 格式: //註釋文字
- 格式: /* 註釋文字 */
文檔註釋(Java特有)
- 格式:/**
註釋內容可以被JDK提供的工具 javadoc 所解析,生成一套以網頁文件形 式體現的該程序的說明文檔。
注意:
- 對於單行和多行註釋,被註釋的文字,不會被JVM(java虛擬機)解釋執行。
- 多行註釋裏面不允許有多行註釋嵌套。
舉例:
/*
單行註釋和多行註釋的作用:
① 對所寫的程序進行解釋說明,增強可讀性。方便自己,方便別人
② 調試所寫的代碼
特點:單行註釋和多行註釋,註釋了的內容不參與編譯。
換句話說,編譯以後生成的.class結尾的字節碼文件中不包含註釋掉的信息
文檔註釋的使用:
註釋內容可以被JDK提供的工具 javadoc 所解析,生成一套以網頁文件形式體現的該程序的說明文檔。
多行註釋不可以嵌套使用
*/
/**
* 文檔註釋
*
* @author shkstart
* @version v1.0
* 這是我的第一個java程序!非常的開森!
*/
public class HelloJava {
/*
多行註釋:
如下的main方法是程序的入口!
main的格式是固定的!
*/
/**
* 如下的方式是main(),作用:程序的入口。
*/
public static void main(String[] args) {
//單行註釋:如下的語句表示輸出到控制檯
//System.out.println("Hello World!")
System.out.println("Hello World!");
}
}
關鍵字keywords
定義:
- 被Java語言賦予了特殊含義,用做專門用途的字符串(單詞)
特點:
- 關鍵字中所有字母都爲小寫
- 智能化開發工具中顯示特殊顏色
關鍵字比較多,不能死記硬背,學到哪裏記到哪裏即可。 Java中定義的關鍵字如下圖所示
Java保留字
- 現有Java版本尚未使用,但以後版本可能會作爲關鍵字使用。自己命名標識符時要避免使用這些保留字 goto 、const
標識符(Identifier)
- Java 對各種變量、方法和類等要素命名時使用的字符序列稱爲標識符 簡單記:凡是自己可以起名字的地方都叫標識符。
命名規則: 硬性要求
如果不遵守命名規則,則編譯會報錯。
- 由26個英文字母大小寫,0-9 ,_或 $ 組成
- 數字不可以開頭。
- 不可以使用關鍵字和保留字,但能包含關鍵字和保留字。
- Java中嚴格區分大小寫,長度無限制。
- 標識符不能包含空格。
命名規範: 軟性建議
不遵守命名規範,雖然編譯可以通過但是代碼質量不高。強烈建議遵守
- 包名:多單詞組成時所有字母都小寫:xxxyyyzzz
- 類名、接口名:多單詞組成時,所有單詞的首字母大寫:XxxYyyZzz
- 變量名、方法名:多單詞組成時,第一個單詞首字母小寫,第二個單詞開始每個單詞首字母大寫:xxxYyyZzz
- 常量名:所有字母都大寫。多單詞時每個單詞用下劃線連接:XXX_YYY_ZZZ
注意1:
- 在起名字時,爲了提高閱讀性,要儘量有意義,“見名知意”。
- java採用unicode字符集,因此標識符也可以使用漢字聲明,但是不建議使用。
常量
定義:
- 是指在Java程序中固定不變的數據。
常量的分類
- 如下圖所示
舉例
/*
常量:在程序運行期間,固定不變的量。
常量的分類:
1. 字符串常量:凡是用雙引號引起來的部分,叫做字符串常量。例如:"abc"、"Hello"、"123"
2. 整數常量:直接寫上的數字,沒有小數點。例如:100、200、0、-250
3. 浮點數常量:直接寫上的數字,有小數點。例如:2.5、-3.14、0.0
4. 字符常量:凡是用單引號引起來的單個字符,就做字符常量。例如:'A'、'b'、'9'、'中'
5. 布爾常量:只有量中取值。true、false。
6. 空常量:null。代表沒有任何數據。
*/
public class Demo01Const {
public static void main(String[] args) {
// 字符串常量
System.out.println("張三");
// 字符串兩個雙引號中間的內容爲空
System.out.println("");
System.out.println("A");
// 整數常量
System.out.println(1);
System.out.println(-1);
System.out.println(0);
// 浮點數常量(小數)
System.out.println(3.14);
System.out.println(-2.5);
// 字符常量
System.out.println('c');
// System.out.println(''); 錯誤 ,兩個單引號中間必須有且僅有一個字符,沒有不行。
// System.out.println('asd'); 錯誤 ,兩個單引號中間必須有且僅有一個字符,有兩個不行。
// 布爾常量
System.out.println(false);
System.out.println(true);
// System.out.println(null); 錯誤 空常量。空常量不能直接用來打印輸出。
}
}
變量
變量概述:
- 常量是固定不變的數據,那麼在程序中可以變化的量稱爲變量。 程序中,可以使用字母保存數字的方式進行運算,提高計算能力,可以解決更多的問題。比如x保存5,x也可以保存6,這樣x保存的數據是可以改變的,也就是我們所講解的變量。Java中要求一個變量每次只能保存一個數據,必須要明確保存的數據類型。
概念
- 內存中的一個存儲區域
- 該區域的數據可以在同一類型範圍內不斷變化
- 變量是程序中最基本的存儲單元。包含變量類型、變量名和存儲的值
變量的作用:
- 用於在內存中保存數據
變量的定義
變量定義的格式包括三個要素: 數據類型 、 變量名 、 數據值 。
格式1:
- 數據類型 變量名稱; 含義: 創建了一個變量
- 變量名稱 = 數據值; 含義:將右邊的數據值,賦值交給左邊的變量
舉例:
public class Demo {
public static void main(String[] args) {
// 創建一個變量age 格式:數據類型 變量名稱;
int age;
// 向變量age當中存入一個數據 格式:變量名稱 = 數據值;
age = 10;
// 當打印輸出變量名稱的時候,顯示出來的是變量的內容
System.out.println(age); // 10
// 改變變量當中本來的數字,變成新的數字
age = 20;
System.out.println(age); // 20
}
}
格式2:
- 數據類型 變量名稱 = 數據值; 含義:在創建一個變量的同時,立刻放入指定的數據值
舉例
public class Demo {
public static void main(String[] args) {
// 創建一個變量age,並且向它裏面存儲數據 格式:數據類型 變量名稱 = 數據值;
int age = 25;
// 當打印輸出變量名稱的時候,顯示出來的是變量的內容
System.out.println(age); // 25
// 改變變量當中本來的數字,變成新的數字
age = 20;
System.out.println(age); // 20
}
}
使用變量的注意事項:
- 如果創建多個變量,那麼在同一個大括號範圍內,變量的名字不可以相同。
- 變量必須先聲明,後使用
- 對於float和long類型來說,字母后綴F和L不要丟掉。
- 變量右側的數據值不能超過左側類型的範圍。
- 沒有進行賦值的變量,不能直接使用;一定要賦值之後,才能使用。
- 變量使用不能超過作用域的範圍。【作用域】:從定義變量的一行開始,一直到直接所屬的大括號結束爲止。
- 同一個作用域內,不可以聲明兩個同名的變量
- 可以通過一個語句來創建多個變量,但是一般情況不推薦這麼寫。
代碼演示,變量的注意事項:
public class VariableNotice {
public static void main(String[] args) {
int num1 = 10; // 創建了一個新的變量,名叫num1
// int num1 = 20; 又創建了另一個新的變量,名字也叫num1,錯誤 同一個作用域裏變量名稱不能重複!
int num2; // 定義了一個變量,但是沒有進行賦值
// System.out.println(num2); // 使用沒有進行賦值的變量就是錯誤的
// System.out.println(num3); //錯誤, 在創建變量之前,不能使用這個變量
int num3 = 500;
{
int num4 = 60;
System.out.println(num4); // 60
}
// System.out.println(num4); // 已經超出了大括號的範圍,超出了作用域,變量不能再使用了。我們可以重新定義num4變量
// 同時創建了三個全都是int類型的變量
int a, b, c;
// 各自分別賦值
a = 10;
b = 20;
c = 30;
System.out.println(a); // 10
System.out.println(b); // 20
System.out.println(c); // 30
// 同時創建三個int變量,並且同時各自賦值
int x = 100, y = 200, z = 300;
System.out.println(x); // 100
System.out.println(y); // 200
System.out.println(z); // 300
}
}
數據類型
Java的數據類型分爲兩大類:
- 基本數據類型:包括 整數 、 浮點數 、 字符 、 布爾 。
- 引用數據類型:包括 類 、 數組 、 接口等等 。
基本數據類型
四類八種基本數據類型如下圖所示:
整數類型:byte、short、int、long
- Java各整數類型有固定的表數範圍和字段長度,不受具體OS的影響,以保證java程序的可移植性。
- java的整型常量默認爲 int 型,聲明long型常量須後加‘l’或‘L’
- java程序中變量通常聲明爲int型,除非不足以表示較大的數,才使用long
浮點類型:float、double
- 與整數類型類似,Java 浮點類型也有固定的表數範圍和字段長度,不受具體操作 系統的影響。
- 浮點型常量有兩種表示形式:十進制數形式:如:5.12 512.0f .512 (必須有小數點)科學計數法形式:如:5.12e2 512E2 100E-2
- float:單精度,尾數可以精確到7位有效數字。很多情況下,精度很難滿足需求。
- double:雙精度,精度是float的兩倍。通常採用此類型。
- Java 的浮點型常量默認爲double型,聲明float型常量,須後加‘f’或‘F’。
字符類型:char
- char 型數據用來表示通常意義上“字符”(2字節)
- Java中的所有字符都使用Unicode編碼,故一個字符可以存儲一個字母,一個漢字,或其他書面語的一個字符。
字符型變量的三種表現形式:
- 字符常量是用單引號(‘ ’)括起來的單個字符。例如:char c1 = 'a'; char c2 = '中'; char c3 = '9';
- Java中還允許使用轉義字符‘\’來將其後的字符轉變爲特殊字符型常量。 例如:char c3 = ‘\n’; // '\n'表示換行符
- 直接使用 Unicode 值來表示字符型常量:‘\uXXXX’。其中,XXXX代表一個十六進制整數。如:\u000a 表示 \n。
char類型是可以進行運算的。因爲它都對應有Unicode碼。
布爾類型:boolean
boolean 類型用來判斷邏輯條件,一般用於程序流程控制:
- if條件控制語句;
- while循環控制語句;
- do-while循環控制語句;
- for循環控制語句;
boolean類型數據只允許取值true和false,無null。 不可以使用0或非 0 的整數替代false和true,這點和C語言不同。Java虛擬機中沒有任何供boolean值專用的字節碼指令,Java語言表達所操作的 boolean值,在編譯之後都使用java虛擬機中的int數據類型來代替:true用1表示,false 用0表示。
舉例:
/*
變量:程序運行期間,內容可以發生改變的量。
創建一個變量並且使用的格式:
數據類型 變量名稱; // 創建了一個變量
變量名稱 = 數據值; // 賦值,將右邊的數據值,賦值交給左邊的變量
一步到位的格式:
數據類型 變量名稱 = 數據值; // 在創建一個變量的同時,立刻放入指定的數據值
*/
public class Demo02Variable {
public static void main(String[] args) {
//定義字節型變量
byte b = 100;
System.out.println(b);
//定義短整型變量
short s = 1000;
System.out.println(s);
//定義整型變量
int i = 123456;
System.out.println(i);
//定義長整型變量
long l = 12345678900L;
System.out.println(l);
//定義單精度浮點型變量
float f = 5.5F;
System.out.println(f);
//定義雙精度浮點型變量
double d = 8.5;
System.out.println(d);
//定義布爾型變量
boolean bool = false;
System.out.println(bool);
//定義字符型變量
char c = 'A';
System.out.println(c);
}
}
注意事項:
- 字符串不是基本類型,而是引用類型。
- 浮點型可能只是一個近似值,並非精確的值。
- 數據範圍與字節數不一定相關,例如float數據範圍比long更加廣泛,但是float是4字節,long是8字節。
- 浮點數當中默認類型是double。如果一定要使用float類型,需要加上一個後綴F。如果是整數,默認爲int類型,如果一定要使用long類型,需要加上一個後綴L。推薦使用大寫字母后綴。
基本數據類型轉換
Java程序中要求參與的計算的數據,必須要保證數據類型的一致性,如果數據類型不一致將發生類型的轉換。java中數據類型轉換分爲自動類型轉換和強制類型轉換。
自動轉換
一個 int 類型變量和一個 byte 類型變量進行加法運算, 結果會是什麼數據類型?
public class Demo {
public static void main(String[] args) {
int a = 41;
byte b = 66;
// byte result = a + b; 錯誤,不能使用byte類型的數據接收結果
int result = a + b;
}
}
運算結果,變量的類型將是 int 類型,這就是出現了數據類型的自動類型轉換現象。byte 類型內存佔有1個字節,在和 int 類型運算時會提升爲 int 類型 ,自動補充3個字節,因此計算後的結果還是 int 類。同樣道理,當一個 int 類型變量和一個 double 變量運算時, int 類型將會自動提升爲 double 類型進行運算。
- 概念:容量小的類型自動轉換爲容量大的數據類型就是自動類型轉換
- 轉換規則:有多種類型的數據混合運算時,系統首先自動將所有數據轉換成容量最大的那種數據類型,然後再進行計算。
- 數據類型按容 量大小排序爲:
- 特點:代碼不需要進行特殊處理,自動完成。
注意事項:
- byte,short,char之間不會相互轉換,他們三者在計算時首先轉換爲int類型。
- boolean類型不能與其它數據類型運算。
- 當把任何基本數據類型的值和字符串(String)進行連接運算時(+),基本數據類型的值將自動轉化爲字符串(String)類型。
舉例:
/*
自動類型轉換(隱式)
1. 特點:代碼不需要進行特殊處理,自動完成。
2. 規則:數據範圍從小到大。
說明:此時的容量大小指的是,表示數的範圍的大和小。比如:float容量要大於long的容量
*/
public class Demo01DataType {
public static void main(String[] args) {
// 直接寫上的整數,默認就是int類型
System.out.println(1024);//1024
// 直接寫上的浮點數,默認就是double類型
System.out.println(3.14);//3.14
/*
左邊是long類型,右邊是默認的int類型,左右不一樣
一個等號代表賦值,將右側的int常量,交給左側的long變量進行存儲
int類型賦值給long類型存儲,符合了數據範圍從小提升到大規則
這一行代碼發生了自動類型轉換。
*/
long num1 = 100;
System.out.println(num1); // 100
/*
左邊是double類型,右邊是float類型,左右不一樣
float類型 賦值給 double類型存儲,符合了數據範圍從小提升到大規則
也發生了自動類型轉換
*/
double num2 = 2.5F;
System.out.println(num2); // 2.5
/*
左邊是float類型,右邊是long類型,左右不一樣
long類型賦值給float類型存儲,範圍是float更大一些,符合從小到大的規則
也發生了自動類型轉換
*/
float num3 = 30L;
System.out.println(num3); // 30.0
}
}
強制轉換
將 1.5 賦值到 int 類型變量會發生什麼?產生編譯失敗,肯定無法賦值
int i = 1.5; // 錯誤
double 類型內存8個字節, int 類型內存4個字節。 1.5 是 double 類型,取值範圍大於 int 。可以理解爲 double 是8升的水壺, int 是4升的水壺,不能把大水壺中的水直接放進小水壺去。想要賦值成功,只有通過強制類型轉換,將 double 類型強制轉換成 int 類型才能賦值。強制類型轉換,使用時要加上強制轉換符:(),但可能造成精度降低或溢出,格外要注意。
- 概念:將 取值範圍大的類型 強制轉換成 取值範圍小的類型 。
- 格式:數據類型 變量名=(數據類型)被轉數據值;
- 特點:代碼需要進行特殊的格式處理,不能自動完成。
將 1.5 賦值到 int 類型要想成功就必須使用強制類型轉換,代碼修改爲:
// double類型數據強制轉成int類型,直接去掉小數點。
int i = (int)1.5;
同樣道理,當一個 short 類型與 1 相加,我們知道會類型提升,但是還想給結果賦值給short類型變量,就需要強制轉換。
public class Demo {
public static void main(String[] args) {
//short類型變量,內存中2個字節
short s = 1;
/*
s和1做運算的時候,1是int類型,s會被提升爲int類型 s+1後的結果是int類型,
將結果在賦值會short類型時發生錯誤 short內存2個字節,int類型4個字節
必須將int強制轉成short才能完成賦值
s = s + 1;編譯失敗
*/
s = (short) (s + 1);//編譯成功
}
}
注意事項:
- 強制類型轉換一般不推薦使用,因爲有可能發生精度損失、數據溢出。
- byte/short/char這三種類型都可以發生數學運算,例如加法“+”.
代碼舉例:
/*
Java程序中要求參與的計算的數據,必須要保證數據類型的一致性,如果數據類型不一致將發生類型的轉換。
強制類型轉換
1. 特點:代碼需要進行特殊的格式處理,不能自動完成。
2. 格式:範圍小的類型 範圍小的變量名 = (範圍小的類型) 原本範圍大的數據;
*/
public class Demo02DataType {
public static void main(String[] args) {
/* 左邊是int類型,右邊是long類型,不一樣
long 類型交給 int類型存儲,不是符合知道類型轉換的規則
不能發生自動類型轉換!要想編譯成功就必須使用強制類型轉換
格式:範圍小的類型 範圍小的變量名 = (範圍小的類型) 原本範圍大的數據;
*/
int num = (int) 100L;
System.out.println(num);//100
// long強制轉換成爲int類型,可能發生數據溢出。
int num2 = (int) 6000000000L;
System.out.println(num2); // 1705032704
// double 強制類型轉成爲 int,會發生精度損失。這並不是四捨五入,所有的小數位都會被捨棄掉
int num3 = (int) 3.99;
System.out.println(num3); // 3
/*
這是一個字符型變量,裏面是大寫字母A
計算機的底層會用一個數字(二進制)來代表字符A,就是65
一旦char類型進行了數學運算,那麼字符就會按照一定的規則翻譯成爲一個數字
*/
char c = 'A';
System.out.println(c + 1);//66
byte b1 = 40;
byte b2 = 50;
// byte + byte --> int + int --> int
int i = b1 + b2;
System.out.println(i); // 90
short s = 60;
/*
byte + short --> int + int --> int
數據範圍大的類型強制轉換爲數據範圍小的類型:
注意必須保證邏輯上真實大小本來就沒有超過short範圍,否則會發生數據溢出
*/
short result = (short) (b1 + s);
System.out.println(result); // 100
}
}
ASCII編碼表
在計算機的內部都是二進制的0、1數據,如何讓計算機可以直接識別人類文字的問題呢?就產生出了編碼表的概念。編碼表 :就是將人類的文字和一個十進制數進行對應起來組成一張表格。將所有的英文字母,數字,符號都和十進制進行了對應,因此產生了世界上第一張編碼表ASCII(American Standard Code for Information Interchange 美國標準信息交換碼)。常見的字符和十進制數的對照關係如下圖所示
查看下列代碼,請解釋出爲什麼結果是98
public class Demo {
public static void main(String[] args) {
//字符類型變量
char c = 'a';
int i = 1;
//字符類型和int類型計算
System.out.println(c + i);//98
}
}
在char類型和int類型計算的過程中,char類型的字符先查詢編碼表,得到97,再和1求和,結果爲98。char類型提升爲了int類型。char類型內存2個字節,int類型內存4個字節。