概述:
【課前思考】
1. Java中的標識符是由哪些字符組成的?
2. Java中有哪些保留字?簡單數據類型包含哪幾種?各種數據類型變量的定義方法和常量的表示方法及取值範圍。
3. Java 中各簡單數據類型間的優先次序和自動轉換規則是什麼?
各數據類型間在什麼情況下,進行自動轉換,在什麼情況下使用強制轉換?
4. Java中有哪些運算符?這些運算符的優先關係是怎樣的?
5. Java 中有哪些控制語句?你瞭解每一種控制語句的語法規則嗎?
6. Java 中的一維數組和多維數組在數組動態初始化和靜態初始化時有何不同?
7. Java中的字符串有兩種表示方法,這兩種表示方法有什麼不同?
8. 如何訪問字符串?如何修改字符串?如何對兩個字符串進行比較?
【難 重 點】
重點:
1. 深刻理解各知識點的概念,並熟記java 的語法規範。
2. 熟練使用各種數據類型的定義,表示和引用。
3. 能熟練使用各種控制語句。
4. 能熟練處理字符串。
難點:
1. 動態初始化複雜類型數組時,要先爲數組中的元素開闢引用空間,再爲每個元素開闢空間。
2. 使用StringBuffer類表示和操作字符串時,要注意它可以處理可變字符串,即當在 StringBuffer類型的字符串中插入字符而超出已分配的緩衝區時,系統會自動地爲它分配額外的空間。String類不可以。
2.1.1 標識符和保留字
1.標識符
程序員對程序中的各個元素加以命名時使用的命名記號稱爲標識符(identifier)。Java語言中,標識符是以字母,下劃線(_),美元符($)開始的一個字符序列,後面可以跟字母,下劃線,美元符,數字。例如,identifier,userName,User_Name,_sys_val, $change爲合法的標識符,而2mail room#,class 爲非法的標識符。
2.保留字
具有專門的意義和用途,不能當作一般的標識符使用,這些標識符稱爲保留字(reserved word),也稱爲關鍵字,下面列出了java語言中的所有保留字:
abstract,break,byte,boolean,catch,case,class,char,continue,default,double,do,else,extends,false,final,float,for,finally,if,import,implements,int,interface,instanceof,long,length,native,new,null,package,private,protected,public,return,switch,synchronized,short,static,super,try,true,this,throw,throws,threadsafe,transient,void,while 。
java語言中的保留字均用小寫字母表示。
2.1.2 數據類型概述
1. java中的數據類型劃分
java語言的數據類型有簡單類型和複合類型:
簡單數據類型包括:
整數類型(Integer):byte, short, int, long
浮點類型(Floating):float,double
字符類型(Textual):char
布爾類型(Logical):boolean
複合數據類型包括:
class
interface
數組
2.常量和變量
常量:用保留字final來實現
final typeSpecifier varName=value[,varName[=value]…];
如:final int NUM=100;
變量:是java 程序中的基本存儲單元,它的定義包括變量名、變量類型和作用域幾個部分。其定義格式如下:
typeSpecifier varName[=value[,varName[=value]…];
如:int count; char c='a';
變量的作用域指明可訪問該變量的一段代碼,聲明一個變量的同時也就指明瞭變量的作用域。按作用域來分,變量可以有下面幾種:局部變量、類變量、方法參數和例外處理參數。在一個確定的域中,變量名應該是唯一的。局部變量在方法或方法的一個塊代碼中聲明,它的作用域爲它所在的代碼塊(整個方法或方法中的某塊代碼)。類變量在類中聲明,而不是在類的某個方法中聲明,它的作用域是整個類。方法參數傳遞給方法,它的作用域就是這個方法。例外處理參數傳遞給例外處理代碼,它的作用域就是例外處理部分。
2.1.3 簡單數據類型
1.布爾類型--boolean
布爾型數據只有兩個值true和false,且它們不對應於任何整數值。布爾型變量的定義如:
boolean b=true;
2.字符類型--char
字符常量: 字符常量是用單引號括起來的一個字符,如'a','A';
字符型變量: 類型爲char,它在機器中佔16位,其範圍爲0~65535。字符型變量的定義如:
char c='a'; /*指定變量c爲char型,且賦初值爲'a'*/
3.整型數據
整型常量:
◇ 十進制整數: 如123,-456,0
◇ 八進制整數: 以0開頭,如0123表示十進制數83,-011表示十進制數-9。
◇ 十六進制整數: 以0x或0X開頭,如0x123表示十進制數291,-0X12表示十進制數-18。
整型變量:
數據類型 |
所佔位數 |
數的範圍 |
Byte |
8 |
-27~27-1 |
Short |
16 |
-215~215-1 |
Int |
32 |
-231~231-1 |
Long |
64 |
-263~263-1 |
4.浮點型(實型)數據
實型常量:
◇ 十進制數形式
由數字和小數點組成,且必須有小數點,如0.123, 1.23, 123.0
◇ 科學計數法形式
如:123e3或123E3,其中e或E之前必須有數字,且e或E後面的指數必須爲整數。
◇ float型的值,必須在數字後加f或F,如float t = 1.23f。
實型變量:
數據類型 |
所佔位數 |
數的範圍 |
float |
32 |
3.4e-038 ~3.4e+038 |
double |
64 |
1.7e-038 ~1.7e+038 |
2.1.4 簡單數據類型中各類型數據間的優先關係和相互轉換
自動類型轉換規則
整型,實型,字符型數據可以混合運算。運算中,不同類型的數據先轉化爲同一類型,然後進行運算,轉換從低級到高級;
操作數1類型 |
操作數2類型 |
轉換後的類型 |
byte、short、char |
int |
int |
byte、short、char、int |
long |
long |
byte、short、char、int、long |
float |
float |
byte、short、char、int、long、float |
double |
double |
3.強制類型轉換
高級數據要轉換成低級數據,需用到強制類型轉換,如:
int i;
byte b=(byte)i;
2.2.1 運算符
基本的運算符按功能劃分,有下面幾類:
1 算術運算符: +,―,*,/,%,++,--
2 關係運算符: >,<,>=,<=,==,!=
3 布爾邏輯運算符: !,&&,|| 。
4 位運算符: >>,<<,>>>,&,|,^,~。
>>>爲右移後零填充, ^爲按位異或
例如:
a=10011101; b=00111001;則有如下結果:
a<<3 =11101000;
a>>3 =11110011 a>>>3=00010011;
a&b=00011001; a|b=10111101;
~a=01100010; a^b=10100100;
5 賦值運算符 =,及其擴展賦值運算符如+=,-=,*=,/=等。
operand?statement1:statement2
operand爲一個布爾表達式,若爲真則執行statement1,爲statement2
7 其它:
包括分量運算符· ,下標運算符 [],實例運算符instanceof,內存分配運算符new,強制類型轉換運算符 (類型),方法調用運算符 () 等。例如:
2.2.2 表達式
表達式是由操作數和運算符按一定的語法形式組成的符號序列。一個常量或一個變量名字是最簡單的表達式,其值即該常量或變量的值;表達式的值還可以用作其他運算的操作數,形成更復雜的表達式。
1.表達式的類型
表達式的類型由運算以及參與運算的操作數的類型決定,可以是簡單類型,也可以是複合類型:
布爾型表達式: x&&y||z;
整型表達式: num1+num2;
2.運算符的優先次序
表達式的運算按照運算符的優先順序從高到低進行,同級運算符從左到右進行:
優先次序 |
運算符 |
1 |
. [] () |
2 |
++ -- ! ~ instanceof |
3 |
new (type) |
4 |
* / % |
5 |
+ - |
6 |
>> >>> << |
7 |
> < >= <= |
8 |
= = != |
9 |
& |
10 |
^ |
11 |
| |
12 |
&& |
13 |
|| |
14 |
?: |
15 |
= += -= *= /= %= ^= |
16 |
&= |= <<= >>= >>>= |
先單運算符,而後乘除加減,然後位運算符,之後比較運算,然後賦值運算。
2.3 控制語句
Java程序通過控制語句來執行程序流,完成一定的任務。程序流是由若干個語句組成的,語句可以是單一的一條語句,如c=a+b,也可以是用大括號{}括起來的一個複合語句。Java中的控制語句有以下幾類:
◇ 分支語句:if-else, switch
◇ 循環語句:while, do-while, for
◇ 與程序轉移有關的跳轉語句:break, continue, return
◇ 例外處理語句:try-catch-finally, throw
◇ 註釋語句://,/* */, /** */
2.3.1 分支語句
分支語句提供了一種控制機制,使得程序的執行可以跳過某些語句不執行,而轉去執行特定的語句。
1.條件語句 if-else
if(boolean-expression)
statement1;
[else statement2;]
2.多分支語句 switch
switch (expression){
case value1 : statement1;
break;
case value2 : statement2;
break;
…………
case valueN : statemendN;
break;
[default : defaultStatement; ]
}
break語句用來在執行完一個case分支後,使程序跳出switch語句,即終止switch語句的執行(在一些特殊情況下,多個不同的case值要執行一組相同的操作,這時可以不用break)。如果將default語句放在了第一行,則不管expression與case中的value是否匹配,程序會從default開始執行直到第一個break出現。
2.3.2 循環語句
1.while語句
[initialization]
while (termination){
body;
[iteration;]
}
2.do-while語句
[initialization]
do {
body;
[iteration;]
} while (termination);
3.for語句
for (initialization; termination; iteration){
body;
}
iteration:反覆
◇ for語句執行時,首先執行初始化操作,然後判斷終止條件是否滿足,如果滿足,則執行循環體中的語句,最後執行迭代部分。完成一次循環後,重新判斷終止條件。
◇ 初始化、終止以及迭代部分都可以爲空語句(但分號不能省),三者均爲空的時候,相當於一個無限循環。
◇ 在初始化部分和迭代部分可以使用逗號語句,來進行多個操作。逗號語句是用逗號分隔的語句序列。
2.3.3 跳轉語句
1.break語句
◇ 在switch語中,break語句用來終止switch語句的執行。使程序從switch語句後的第一個語句開始執行。
◇ 在Java中,可以爲每個代碼塊加一個括號,一個代碼塊通常是用大括號{}括起來的一段代碼。加標號的格式如下:
BlockLabel: { codeBlock }
break語句的第二種使用情況就是跳出它所指定的塊,並從緊跟該塊的第一條語句處執行。
}
2.continue語句
continue語句用來結束本次循環,跳過循環體中下面尚未執行的語句,接着進行終止條件的判斷,以決定是否繼續循環。對於for語句,在進行終止條件的判斷前,還要先執行迭代語句。它的格式爲:
continue;
也可以用continue跳轉到括號指明的外層循環中,這時的格式爲
continue outerLable;
例如:
outer: for( int i=0; i<10; i++ ){ //外層循環
inner: for( int j=0; j<10; j++ ){ //內層循環
if( i<j ){
……
continue outer;
}
……
}
……
}
3.返回語句return
return語句從當前方法中退出,返回到調用該方法的語句處,並從緊跟該語句的下一條語句繼續程序的執行。返回語句有兩種格式:
return expression ;
return;
return語句通常用在一個方法體的最後,否則會產生編譯錯誤,除非用在if-else語句中
2.3.4 例外處理語句
包括try,catch,finally,throw語句; 與c/c++相比,是Java特有的語句。我們將在第四講中介紹。
java語言中,數組是一種最簡單的複合數據類型。數組是有序數據的集合,數組中的每個元素具有相同的數據類型,可以用一個統一的數組名和下標來唯一地確定數組中的元素。數組有一維數組和多維數組。
2.4.1 一維數組
◇ 靜態初始化
int intArray[]={1,2,3,4};
String stringArray[]={"abc", "How", "you"};
◇ 動態初始化
1)簡單類型的數組
int intArray[];
intArray = new int[5];
2)複合類型的數組
String stringArray[ ];
String stringArray = new String[3];/*爲數組中每個元素開闢引用
空間(32位) */
stringArray[0]= new String("How");//爲第一個數組元素開闢空間
stringArray[1]= new String("are");//爲第二個數組元素開闢空間
stringArray[2]= new String("you");// 爲第三個數組元素開闢空間
3.一維數組元素的引用
數組元素的引用方式爲:
arrayName[index]
index爲數組下標,它可以爲整型常數或表達式,下標從0開始。每個數組都有一個屬性length指明它的長度,例如:intArray.length指明數組intArray的長度。
2.4.2 多維數組
1.二維數組的定義
type arrayName[ ][ ];
type[ ][ ] arrayName;
2.二維數組的初始化
◇ 靜態初始化
int intArray[ ][ ]={{1,2},{2,3},{3,4,5}};
Java語言中,由於把二維數組看作是數組的數組,數組空間不是連續分配的,所以不要求二維數組每一維的大小相同。
◇ 動態初始化
1) 直接爲每一維分配空間,格式如下:
arrayName = new type[arrayLength1][arrayLength2];
int a[ ][ ] = new int[2][3];
2) 從最高維開始,分別爲每一維分配空間:
arrayName = new type[arrayLength1][ ];
arrayName[0] = new type[arrayLength20];
arrayName[1] = new type[arrayLength21];
…
arrayName[arrayLength1-1] = new type[arrayLength2n];
3) 例:
二維簡單數據類型數組的動態初始化如下,
int a[ ][ ] = new int[2][ ];
a[0] = new int[3];
a[1] = new int[5];
對二維複合數據類型的數組,必須首先爲最高維分配引用空間,然後再順次爲低維分配空間。
而且,必須爲每個數組元素單獨分配空間。
例如:
String s[ ][ ] = new String[2][ ];
s[0]= new String[2];//爲最高維分配引用空間
s[1]= new String[2]; //爲最高維分配引用空間
s[0][0]= new String("Good");// 爲每個數組元素單獨分配空間
s[0][1]= new String("Luck");// 爲每個數組元素單獨分配空間
s[1][0]= new String("to");// 爲每個數組元素單獨分配空間
s[1][1]= new String("You");// 爲每個數組元素單獨分配空間
3.二維數組元素的引用
對二維數組中的每個元素,引用方式爲:arrayName[index1][index2]
例如: num[1][0];
2.5.1 字符串的表示
Java語言中,把字符串作爲對象來處理,類String和StringBuffer都可以用來表示一個字符串。(類名都是大寫字母打頭)
1.字符串的比較
String中提供的方法:
equals( )和equalsIgnoreCase( )
它們與運算符'= ='實現的比較是不同的。運算符'= ='比較兩個對象是否引用同一個實例,而equals( )和equalsIgnoreCase( )則比較兩個字符串中對應的每個字符值是否相同。