Java基礎第二天
2.1回顧
第一個代碼:
/**
這是我的第一個java程序
@author zhang
@version v1.0
*/
publicclass HelloJava{
/*
1.源文件以.java結尾
2.源文件中可以有多個class聲明的類
3.類中可以有主方法(即main()方法),其格式是固定的:public static void main(String[]args){}
4.main()方法是程序的入口,方法內是程序的執行部分。
5.一個源文件中只能有一個聲明爲public 的類,同時要求此類的類名與源文件名一致。
6.每個語句都以";"結束
7.執行程序:①編譯:javac.exe 編譯完,生成諸多個.class字節碼文件。②運行:java.exe
8.多行註釋不能夠嵌套
*/
publicstaticvoid main(String[] args){
System.out.println("Hello World!" +'\n' +"Hello it18zhang.com");
}
}
2.1 關鍵字
1關鍵字的定義和特點
關鍵字的定義和特點
定義:被Java語言賦予了特殊含義,用做專門用途的字符串(單詞)
特點:關鍵字中所有字母都爲小寫
保留字
Java保留字:現有Java版本尚未使用,但以後版本可能會作爲關鍵字使用。自己命名標記符時要避免使用這些保留字
byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const
2.2標識符
標識符:
(1)Java 對各種變量、方法和類等要素命名時使用的字符序列稱爲標識符
(2)凡是自己可以起名字的地方都叫標識符。
定義合法標識符規則:
(1)由26個英文字母大小寫,0-9 ,_或 $ 組成
(2)數字不可以開頭。
(3)不可以使用關鍵字和保留字,但能包含關鍵字和保留字
(4)Java中嚴格區分大小寫,長度無限制
(5)標識符不能包含空格
注意:在起名字時,爲了提高閱讀性,要儘量有意義,“見名知意
Java中的名稱命名規範
(1)包名:多單詞組成時所有字母都小寫:xxxyyyzzz
(2)類名、接口名:多單詞組成時,所有單詞的首字母大寫:XxxYyyZzz
(3)變量名、方法名:多單詞組成時,第一個單詞首字母小寫,第二個單詞開始每個單詞首字母大寫:xxxYyyZzz
(4)常量名:所有字母都大寫。多單詞時每個單詞用下劃線連接:XXX_YYY_ZZZ
案例:
/*
標識符:凡是可以自己命名的地方,都叫標識符。如:類名、方法名、變量名、接口名,。。。
1.標識符命名的規則:(要求嚴格遵守,否則會報編譯性的錯誤)
由26個英文字母大小寫,0-9 ,_或 $ 組成
數字不可以開頭。
不可以使用關鍵字和保留字,但能包含關鍵字和保留字。
Java中嚴格區分大小寫,長度無限制。
標識符不能包含空格。
2.Java中的名稱命名規範:(如果不遵守,也不會報錯)
包名:多單詞組成時所有字母都小寫:xxxyyyzzz
類名、接口名:多單詞組成時,所有單詞的首字母大寫:XxxYyyZzz
變量名、方法名:多單詞組成時,第一個單詞首字母小寫,第二個單詞開始每個單詞首字母大寫:xxxYyyZzz
常量名:所有字母都大寫。多單詞時每個單詞用下劃線連接:XXX_YYY_ZZZ
*/
class TestMarker
{
publicstaticvoid main(String[] args)
{
int static1 = 1;
int myInt = 12;
System.out.println("Hello World!");
}
publicvoid add(){
}
//注意:在起名字時,爲了提高閱讀性,要儘量有意義,“見名知意”。
publicvoid m1(){}
publicvoid m2(){}
}
//class 4Hello
class Static{
}
2.3變 量
變量的概念:
(1)內存中的一個存儲區域
(2)該區域有自己的名稱(變量名)和類型(數據類型)
(3)Java中每個變量必須先聲明,後使用
(4)該區域的數據可以在同一類型範圍內不斷變化
使用變量注意
(1)變量的作用域:一對{ }之間有效
(2)初始化值
定義變量的格式:數據類型 變量名 = 初始化值
變量是通過使用變量名來訪問這塊區域的
變量的分類-按數據類型
對於每一種數據都定義了明確的具體數據類型,在內存中分配了不同大小的內存空間
整數類型:byte、short、int、long
Java各整數類型有固定的表數範圍和字段長度,不受具體OS的影響,以保證java程序的可移植性。
java的整型常量默認爲 int 型,聲明long型常量須後加‘l’或‘L’
浮點類型:float、double
(1)與整數類型類似,Java 浮點類型也有固定的表數範圍和字段長度,不受具體OS的影響
(2)Java 的浮點型常量默認爲double型,聲明float型常量,須後加‘f’或‘F’。
(3)浮點型常量有兩種表示形式:
十進制數形式:如:5.12 512.0f .512 (必須有小數點)
科學計數法形式:如:5.12e2 512E2 100E-2
字符類型:char
char 型數據用來表示通常意義上“字符”(2字節)
字符型常量的三種表現形式:
(1)字符常量是用單引號(‘’)括起來的單個字符,涵蓋世界上所有書面語的字符。例如:char c1 = 'a'; char c2 = '中'; char c3= '9';
(2)Java中還允許使用轉義字符‘\’來將其後的字符轉變爲特殊字符型常量。例如:char c3 = ‘\n’; // '\n'表示換行符
(3)直接使用 Unicode值來表示字符型常量:‘\uXXXX’。其中,XXXX代表一個十六進制整數。如:\u000a表示 \n。
(4)char類型是可以進行運算的。因爲它都對應有Unicode碼
ASCII 碼
在計算機內部,所有數據都使用二進制表示。每一個二進制位(bit)有 0 和 1 兩種狀態,因此 8 個二進制位就可以組合出 256 種狀態,這被稱爲一個字節(byte)。一個字節一共可以用來表示 256 種不同的狀態,每一個狀態對應一個符號,就是 256 個符號,從 0000000 到 11111111。
ASCII碼:上個世紀60年代,美國製定了一套字符編碼,對英語字符與二進制位之間的關係,做了統一規定。這被稱爲ASCII碼。ASCII碼一共規定了128個字符的編碼,比如空格“SPACE”是32(二進制00100000),大寫的字母A是65(二進制01000001)。這128個符號(包括32個不能打印出來的控制符號),只佔用了一個字節的後面7位,最前面的1位統一規定爲0。
Unicode 編碼
亂碼:世界上存在着多種編碼方式,同一個二進制數字可以被解釋成不同的符號。因此,要想打開一個文本文件,就必須知道它的編碼方式,否則用錯誤的編碼方式解讀,就會出現亂碼
Unicode:一種編碼,將世界上所有的符號都納入其中。每一個符號都給予一個獨一無二的編碼,使用 Unicode 沒有亂碼的問題。
Unicode 的缺點:Unicode 只是一個符號集,它只規定了符號的二進制代碼,卻沒有規定這個二進制代碼應該如何存儲:無法區別 Unicode 和 ASCII:計算機無法區分三個字節表示一個符號還是分別表示三個符號
UTF-8
UTF-8 是在互聯網上使用最廣的一種 Unicode的實現方式。
UTF-8 是一種變長的編碼方式。它可以使用 1-6 個字節表示一個符號,根據不同的符號而變化字節長度。
UTF-8的編碼規則:
(1)對於單字節的UTF-8編碼,該字節的最高位爲0,其餘7位用來對字符進行編碼(等同於ASCII碼)。
(2)對於多字節的UTF-8編碼,如果編碼包含 n 個字節,那麼第一個字節的前n 位爲1,第一個字節的第 n+1 位爲0,該字節的剩餘各位用來對字符進行編碼。在第一個字節之後的所有的字節,都是最高兩位爲"10",其餘6位用來對字符進行編碼。
布爾類型:boolean
boolean 類型適於邏輯運算,一般用於程序流程控制
if條件控制語句
while循環控制語句
do-while循環控制語句;
for循環控制語句
boolean類型數據只允許取值true和false,無null。
不可以0或非 0 的整數替代false和true,這點和C語言不同
案例
//變量:基本數據類型(8個) vs 引用數據類型(類、接口、數組)
//1.java中的變量定義的格式:數據類型 變量名 = 初始化值
class TestVeriable {
publicstaticvoid main(String[] args) {
//2.變量得先定義,後使用
int myInt1 = 10;
double d = 12.3;
System.out.println(myInt1);
System.out.println(myInt1 + d);
//i1超出了其作用的範圍,不可使用。
//System.out.println(i1);
//3.整型:byte(-128~+127) short int(默認類型) long
byte b1 = 12;
//byte b2 = 128;
short s1 = 128;
int i1 = 12;
//定義long型變量,值的末尾加“L”或“l”
long l1 = 2134123351345325L;
System.out.println(l1);
//4.浮點型(帶小數點的數值):float double(默認類型)
double d1 = 12.3;
//聲明float類型的浮點型數據,末尾要加“F”或者“f”
float f1 = 12.3F;
System.out.println(f1);
//5.字符型(=兩個字節):char 只能表示一個字符(英文、中文、標點符號、日文、。。。)
char c1 = 'a';
//char c2 = 'ab';
String str = "ab";
char c3 = '中';
String str1 = "中國";
//可以表示轉義字符
char c4 = '\t';
char c5 = '\n';
System.out.println("abc" + c5 + "def");
//瞭解
char c6 = '\u1234';
System.out.println(c6);
//6.布爾類型:boolean 只能夠取值爲true 或 false 。不能取值null
boolean bool1 = true;
if(bool1){
System.out.println("今天是週五");
}else{
System.out.println("今天明明是週六!");
}
}
publicvoid method1(){
int i1 = 10;
System.out.println(i1);
}
}
基本數據類型轉換
自動類型轉換:容量小的類型自動轉換爲容量大的數據類型。數據類型按容量大小排序爲:
有多種類型的數據混合運算時,系統首先自動將所有數據轉換成容量最大的那種數據類型,然後再進行計算
byte,short,char之間不會相互轉換,他們三者在計算時首先轉換爲int類型。
當把任何基本類型的值和字符串值進行連接運算時(+),基本類型的值將自動轉化爲字符串類型。
強制類型轉換
自動類型轉換的逆過程,將容量大的數據類型轉換爲容量小的數據類型。使用時要加上強制轉換符(()),但可能造成精度降低或溢出,格外要注意。
通常,字符串不能直接轉換爲基本類型,但通過基本類型對應的包裝類則可以實現把字符串轉換成基本類型。
如: String a = “43”; int i = Integer.parseInt(a);
boolean類型不可以轉換爲其它的數據類型。
案例:
/*
變量之間的運算:(不考慮boolean。剩下:char byte short int long floatdouble)
1.自動類型轉換
2.強制類型轉換
*/
class TestVeriable1{
publicstaticvoid main(String[] args){
//1.自動類型轉換:當容量小的數據類型與容量大的數據類型做運算時,容量小的會自動轉換爲
//容量大的數據類型:char,byte,short ===>int===>long ===>float===double
int i1 = 12;
short s1 = 2;
int i2 = i1 + s1;
float f1 = 12.3F;
float f2 = f1 + i2;
//float d1 = f2 + 12.3;
long l = 12L;
float f3 = l;
System.out.println(i2);
System.out.println(f2);
char c1 = 'a';//97
c1 = 'A';//65
int i3 = c1 + 1;
System.out.println(i3);
//需要注意的:當char\byte\short之間做運算時,默認的結果爲int類型
short ss1 = 12;
byte bb1 = 1;
char cc1 = 'a';
//short ss2 = ss1 + bb1;
int ii1 = ss1 + bb1;
//char cc2 = cc1 + bb1;
int ii2 = cc1 + bb1;
short ss2 = 11;
//short ss3 = ss1 + ss2;
//2.強制類型轉換:容量大轉換爲容量小的.要使用強制類型轉換符:()
//強制類型轉換的問題:導致精度的損失
long l1 = 12345L;
int m1 = (int)l1;
System.out.println(m1);
byte by1 = (byte)m1;
System.out.println(by1);
//平時常用的字符串,也是一種數據類型:String
String nation = "我是一箇中國人";
System.out.println(nation);
//字符串與基本數據類型之間的運算:只能是連接運算:+。得到的結果仍爲一個字符串
String str = "abc";
String str1 = str +m1;//abc12345
System.out.println(str1);
//題目:
String st1 = "hello";
int myInt1 = 12;
char ch1 = 'a';//97
System.out.println(str1+ myInt1 + ch1);//hello12a
System.out.println(myInt1+ ch1 + str1);//109hello
System.out.println(ch1+ str1 + myInt1);//ahello12
String st2 = "12";
str2 = 12 + "";
}
}
練習:
String str1 = 4; //判斷對錯:錯
String str2 = 3.5f + “”; //判斷str2對錯:對System.out.println(str2); //輸出:3.5
System.out .println(3+4+“Hello!”); //輸出:7Hello!
System.out.println(“Hello!”+3+4); //輸出:Hello!34
System.out.println(‘a’+1+“Hello!”); //輸出:98Hello!
System.out.println(“Hello”+‘a’+1); //輸出:Hello!a1
進 制
對於整數,有四種表示方式
(1)二進制:0,1 ,滿2進1.以0b或0B開頭。
(2)十進制:0-9 ,滿10進1
(3)八進制:0-7 ,滿8進1. 以數字0開頭表示
(4)十六進制:0-9及A-F,滿16進1. 以0x或0X開頭表示。此處的A-F不區分大小寫。
(5)如:0x21AF +1=0X21B0
原碼、反碼、補碼
所有數字在計算機底層都以二進制形式存在。
計算機以補碼的形式保存所有的整數。
正數的原碼、反碼、補碼都相同
負數的補碼是其反碼加1。
原碼:直接將一個數值換成二進制數。
反碼:是對原碼按位取反,只是最高位(符號位)確定爲1。
Java整數常量默認是int類型,當用二進制定義整數時,其第32位是符號位;當是long類型時,二進制默認佔64位,第64位是符號位
進制間轉化
進制的基本轉換
十進制 二進制互轉
(1)二進制轉成十進制 乘以2的冪數
(2)十進制轉成二進制 除以2取餘數
(3)二進制 八進制互轉
(4)二進制 十六進制互轉
(5)十進制 八進制互轉
(6)十進制 十六進制互轉
算術運算符
//測試算術運算符: + - + - * / % ++ -- +
class TestAri{
publicstaticvoid main(String[] args){
// 除:/
int i = 12;
int j = i/5;
double d = i / 5;
double d1 = i/5.0;
System.out.println(j);//2
System.out.println(d);//2.0
System.out.println(d1);//2.4
//取模:%:取餘數. 結果的符號取決於被模數
int i1 = 12 % 5;
int i2 = -12 % 5;
int i3 = 12 % (-5);
int i4 = -12 % (-5);
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
System.out.println(i4);
//前++:先自增1,後做運算
//後++:先做運算,後自增1
int myInt1 = 10;
int myInt2 = myInt1++;//後++
System.out.println(myInt1);//11
System.out.println(myInt2);//10
int myInt3 = 10;
int myInt4 = ++myInt3;//前++
System.out.println(myInt3);//11
System.out.println(myInt4);//11
//前--:先自減1,後做運算
//後--:先做運算,後自減1
}
}
class PrintGrap{ public static void main(String[] args){ System.out.print("\t"); System.out.print("*"); System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); System.out.println("*"); System.out.print("*"); System.out.print("\t"); //System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); System.out.print("I love java"); System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); System.out.println("*"); System.out.print("\t"); System.out.print("*"); System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); System.out.println("*"); System.out.print("\t"); System.out.print("\t"); System.out.print("*"); System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); System.out.println("*"); System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); System.out.print("*"); System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); System.out.println("*"); System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); System.out.print("*"); System.out.print("\t"); System.out.println("*"); System.out.print("\t"); System.out.print("\t"); System.out.print("\t"); //System.out.print("\t"); System.out.print(" "); System.out.print("*"); } } class Test1 { public static void main(String[] args) { String str1 = "4"; String str2 = 3.5f+""; System.out.println(str2); System.out.println(str1); System.out.println(3+4+"hello!"); //輸出:7Hello! System.out.println("Hello!"+3+4); //輸出:Hello!34 System.out.println("a"+1+"Hello!"); //輸出:98Hello! System.out.println("Hello"+"a"+1); //輸出:Hello!a1 } } class TestAri { public static void main(String[] args) { /*int i = 12; int j = i/5; double d = (double)i/5; double e = i/5.0; System.out.println(j); System.out.println(d); System.out.println(e); */ /*int i1 = 12%5; int i2 = -12%5; int i3 = 12%(-5); int i4 = -12%(-5);//取模的符號和百分號前面的數字符號相同。 System.out.println(i1); System.out.println(i2); System.out.println(i3); System.out.println(i4); */ /*int myInt1 = 10; int myInt2 = myInt1++; System.out.println(myInt1);//11 System.out.println(myInt2);//10 */ int myInt3 = 10; int myInt4 = ++myInt3; System.out.println(myInt3);//11 System.out.println(myInt4);//11 int myInt5 = 10; int myInt6 = myInt5--; System.out.println(myInt5);//9 System.out.println(myInt6);//10 int myInt7 = 10; int myInt8 = --myInt7; System.out.println(myInt7);//9 System.out.println(myInt8);//9 } } class TestMarker { public static void main(String[] args) { int myInt = 15; myInt = 15+1; System.out.println(myInt); boolean top = false; top = true; System.out.println(top); //int myByte = 128.01; float myFloat = 128.01f; myFloat = 200.0f; double myDouble = 128; System.out.println(myFloat); //System.out.println(myByte); System.out.println(myDouble); } } class TestVeriable { public static void main(String[] args) { int myInt1 = 10; double d = 12.3; byte b1 = 12; short s1 = 128; int i1 = 12; long l1 = 213412335134532L; double d1 =12.3; float f1 = 12.3F; char c1 = 'a'; String str1 = "中國"; char c3 = '中'; char c4 = '\t'; char c5 = '\n'; char c6 = '\u1234'; boolean bool1 = true; if (bool1) { System.out.println("今天是週五"); }else{ System.out.println("今天明明是週六!"); } System.out.println(myInt1); System.out.println(myInt1+d); System.out.println(b1); System.out.println(s1); System.out.println(i1); System.out.println(l1); System.out.println(d1); System.out.println(f1); System.out.println("abc"+c5+"def"); System.out.println(c6); } }