基礎語法
-
每一條語句都必須以分號結尾
-
Java中的方法就是其他編程語言中的函數
-
main方法是程序的入口
沒有main方法, Java程序是無法啓動的
方法必須包含在class內部, 先有class, 再有方法 -
public class 的名稱必須要和文件名保持一致
註釋(Comment)
Java的註釋有3種書寫格式
- 單行註釋
//啦啦啦
- 多行註釋
/*
拉拉
啦啦啦
*/
- 文檔註釋(一種特殊的多行註釋)
很多時候用來描述這個方法是幹嘛用的或者這個類幹嘛用的或者這個成員變量的用途
/**
* 計算2個整數的和
* @param a 第1個整數
* @param b 第2個整數
* @return 2個整數的和
*/
public static int add(int a, int b) {
return a + b;
}
- 多行註釋不能嵌套多行註釋
數據類型
Java的數據類型主要分爲2大類
- 基本類型(Primitive Type)
byte: 8位的整數, 取值範圍是[-128, 127]
short: 16位的整數, 取值範圍是[-32768, 32767]
int: 32位的整數, 取值範圍是[-2^31, 2^31-1]
long: 64位的整數
float: 單精度32位浮點數
double: 雙精度64位浮點數
boolean: 布爾類型, 有true, false兩個取值
char: 單個16位的Unicode字符, 2個字節意味着可以存儲中文 - 引用類型(Reference Type)
引用類型的值是對對象的引用
引用類型的變量裏面存儲的值是對象的地址值
字面量(Literal)
字面量:直接寫出來的值就叫字面量
- 整數
// 十進制
byte v1 = 123;
// 二進制0b或者0B
short v2 = 0b11001;
// 十六進制0x或者0Xf78a
int v3 = 0xF78A;
// 以用L或者l結尾表示long類型
long v4 = 199L;
- 浮點數
// 以F或者f結尾表示float類型(或者123.4f)
float v1 = 123.4F;
// 以D或者d結尾表示double類型(或者123.4d)
double v2 = 123.4D;
// 默認就是double類型
double v3 = 123.4;
// 可以用科學計數法(E或者e)
float v4 = 1.234E2F;
double v5 = 1.234e2;
- 字符和字符串
// 用單引號表示字符
char v1 = 'A';
// 用雙引號表示字符串
String v2 = "ABCD";
- 布爾值
boolean v1 = true;
boolean v2 = false;
- 空值
String string = null;
與空串的區別:
String str1 = "ABCD";
String str2 = ""; // 空串
String str3 = null;
轉義序列(Escape Sequences)
和C一樣
在數字中使用下劃線
從Java7開始, 可以給數字添加下劃線增強可讀性
int v1 = 1_0000_0000;
int v2 = 0xFF_EC_DE_5E;
int v3 = 0b11010010_01101001_10010100_10010010;
double v4 = 1.23_45_67;
long v5 = 1___0000_0000; // 下劃線可以寫很多個
下面的用法是錯誤的
// 不能在浮點數的小數點前後使用下劃線
double r1 = 1._23;
double r2 = 1_.23;
// 不能在數字的最前面和最後面使用下劃線
int r3 = _123;
int r4 = 123_;
// 不能在X, B, F, D, L, E 等特殊字母的前後使用下劃線
變量的初始化
- 任何變量在使用之前都必須要先初始化(賦值)
局部變量:需要程序員手動初始化
非局部變量(實例變量, 類變量): 編譯器會自動給未初始化的變量設置一個初始值
運算符(Operator)
- 爲了保證運算符按照預期執行, 儘量多使用小括號
字符串拼接
- 可以使用加號(+)進行字符串的拼接
int age = 18;
String name = "Jack";
double height = 1.78;
System.out.println(
"My name is" + name
+ ", age is " + age
+ ", height is " + height);
位運算
>> 與 >>>
>>(有符號右移): 最左用符號位補齊
>>>(無符號右移): 最左用0補齊
& | ^ 的一般使用:
int age1 = 0b10010;
int age2 = 0b11111;
int age3 = age1 & age2;
/*
*0b10010
*0b11111
*-------
* 10010
*/
但在Java裏& | ^ 也能用在boolean值中
boolean flag1 = true;
boolean flag2 = false;
System.out.println(flag1 & flag2); // 兩個都爲true, 才爲true
System.out.println(flag1 | flag2); // 有一個爲true, 就是true
System.out.println(flag1 ^ flag2); // 不一樣就是true, 一樣就是false
對比&& ||, & | 少了短路功能
類型轉換(Type Conversion)
- 拓寬基本類型轉換(Widening Primitive Conversion)
數據範圍小的轉爲數據範圍大的(19種), 可以自動轉換(隱式轉換)
byte轉short, int, long, float, double
short轉int, long, float, double
char轉int, long, float, double
char轉int, long, float, double
int轉long, float, double
long轉float, double
float轉double
byte b = 12;
short s = b;
int i1 = s;
char c = 'A';
int i2 = c;
long l = i1;
float f = l;
double d = f;
- 窄化基本類型轉換(Narrowing Primitive Conversion)
數據範圍大的轉爲數據範圍小的(22種), 可能會丟失精度和範圍, 需要強制轉換.
一元數字提升(Unary Numeric Promotion)
一元數字提升: 將byte, short, char 類型的一元數字自動提升爲int類型(拓寬基本類型轉換)
byte b1 = 10;
byte b2 = 20;
b1 + b2
// + 是二元運算符, b1, b2不是一元數字
b1++;
++b1;
// ++是一元運算符(單目運算符), 所以b1是一元數字
下面的情況會執行一元數字提升:
1.數組的索引, 創建數組時的數組長度
注意:數組的索引必須是int類型
int[] array = {11, 22, 33, 44};
byte index = 10;
array[index] = 20; // byte類型自動提升爲int類型
char number = 10;
int[] array = new int[number]; // char類型自動提升爲int類型
2.一元運算符+
3.一元運算符-
int age = 10;
System.out.println(+age); // 代表正數
System.out.println(-age); // 代表負數
char c = 'A' // 存儲的是它的ASCII值65
System.out.println(c); // 打印A
System.out.println(+c); // c是一元數字自動提升爲int類型所以打印65
System.out.println((int)c); // 和上面等價
4.按位取反(~)
5.位移(<< >> >>>)
二元數字提升(Binary Numeric Promote)
二元數字提升: 提升一個或兩個數字(拓寬基本類型轉換)
標識符(Identifier)
命名建議
其他
Integer.toBinaryString() // 這個函數會返回一個數的二進制, 返回值是字符串
System.out.println(Integer.toBinaryString(-128));
- Java裏面if條件判斷裏面的條件必須是布爾類型, 如果用比較運算符的話返回的結果就是布爾類型
不可以
int age = 10;
// 不可以
if (age) {
}
// 可以
if (age > 5) {
}
因爲age不是布爾類型.可以比較.