| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
27 | 28 | 29 | 30 | 1 | 2 | 3 | |||
4 | 5 | 6 | 7 | 8 | 9 | 10 | |||
11 | 12 | 13 | 14 | 15 | 16 | 17 | |||
18 | 19 | 20 | 21 | 22 | 23 | 24 | |||
25 | 26 | 27 | 28 | 29 | 30 | 31 | |||
1 | 2 | 3 | 4 | 5 | 6 | 7 |
自動類型轉(zhuǎn)換(也叫隱式類型轉(zhuǎn)換)
實現(xiàn)這種轉(zhuǎn)換要滿足兩個條件,第一是兩種類型彼此兼容,第二是目標(biāo)類型的取值范圍大于源類型。如,當(dāng)byte型向int型轉(zhuǎn)換時,由于int型取值范圍大于byte型,就會發(fā)生自動轉(zhuǎn)換。所有的數(shù)字類型,包括整型和浮點型彼此都可以進行這樣的轉(zhuǎn)換。如:
byte b=3;
int x=b;
強制類型轉(zhuǎn)換(也叫顯式類型轉(zhuǎn)換)
當(dāng)兩種類型彼此不兼容,或目標(biāo)類型取值范圍小于源類型時,自動轉(zhuǎn)換無法進行,這時就需要進行強制類型轉(zhuǎn)換。強制類型轉(zhuǎn)換的通用格式如下:
目標(biāo)類型 變量=(目標(biāo)類型)值,如:
byte a;
int b;
a=(byte)b;
表達式的數(shù)據(jù)類型自動提升
所有的byte型、short型和char的值將被提升到int型。
如果一個操作數(shù)是long型,計算結(jié)果就是long型;
如果一個操作數(shù)是float型,計算結(jié)果就是float型;
如果一個操作數(shù)是double型,計算結(jié)果就是double型。
5.變量的作用域
public class TestScope
{
}
6.局部變量的初始化
Java 的循環(huán)語句有for,while 和 do-while 。這些語句創(chuàng)造了我們通常所稱的循環(huán)(loops)。你可能知道,一個循環(huán)重復(fù)執(zhí)行同一套指令直到一個結(jié)束條件出現(xiàn)。你將看到,Java 有
Java 的循環(huán)語句有for,while 和 do-while 。這些語句創(chuàng)造了我們通常所稱的循環(huán)(loops)。你可能知道,一個循環(huán)重復(fù)執(zhí)行同一套指令直到一個結(jié)束條件出現(xiàn)。你將看到,Java 有適合任何編程所需要的循環(huán)結(jié)構(gòu)。
5.2.1 while 語句
while 語句是Java 最基本的循環(huán)語句。當(dāng)它的控制表達式是真時,while 語句重復(fù)執(zhí)行一個語句或語句塊。它的通用格式如下:
while(condition) {
// body of loop
}
條件condition 可以是任何布爾表達式。只要條件表達式為真,循環(huán)體就被執(zhí)行。當(dāng)條件condition 為假時,程序控制就傳遞到循環(huán)后面緊跟的語句行。如果只有單個語句需要重復(fù),大括號是不必要的。
下面的while 循環(huán)從10開始進行減計數(shù),打印出10行“tick”。
// Demonstrate the while loop.
class While {
public static void main(String args[]) {
int n = 10;
while(n > 0) {
System.out.println("tick " + n);
n--;
}
}
}
當(dāng)你運行這個程序,它將“tick”10次:
tick 10
tick 9
tick 8
tick 7
tick 6
tick 5
tick 4
tick 3
tick 2
tick 1
因為while 語句在循環(huán)一開始就計算條件表達式,若開始時條件為假,則循環(huán)體一次也不會執(zhí)行。例如,下面的程序中,對println( ) 的調(diào)用從未被執(zhí)行過:
int a = 10, b = 20;
while(a > b)
System.out.println("This will not be displayed");
while 循環(huán)(或Java 的其他任何循環(huán))的循環(huán)體可以為空。這是因為一個空語句(null statement) (僅由一個分號組成的語句)在Java 的語法上是合法的。例如,下面的程序:
// The target of a loop can be empty.
class NoBody {
public static void main(String args[]) {
int i, j;
i = 100;
j = 200;
// find midpoint between i and j
while(++i < --j) ; // no body in this loop
System.out.println("Midpoint is " + i);
}
}
該程序找出變量i和變量j的中間點。它產(chǎn)生的輸出如下:
Midpoint is 150
該程序中的while 循環(huán)是這樣執(zhí)行的。值i自增,而值j自減,然后比較這兩個值。如果新的值i仍比新的值j小,則進行循環(huán)。如果i等于或大于j,則循環(huán)停止。在退出循環(huán)前,i 將保存原始i和j的中間值(當(dāng)然,這個程序只有在開始時i比j小的情況下才執(zhí)行)。正如你看到的,這里不需要循環(huán)體。所有的行為都出現(xiàn)在條件表達式自身內(nèi)部。在專業(yè)化的Java 代碼中,一些可以由控制表達式本身處理的短循環(huán)通常都沒有循環(huán)體。
5.2.2 do-while 循環(huán)
如你剛才所見,如果while 循環(huán)一開始條件表達式就是假的,那么循環(huán)體就根本不被執(zhí)行。然而,有時需要在開始時條件表達式即使是假的情況下,while 循環(huán)至少也要執(zhí)行一次。換句話說,有時你需要在一次循環(huán)結(jié)束后再測試中止表達式,而不是在循環(huán)開始時。幸運的是,Java 就提供了這樣的循環(huán):do-while 循環(huán)。do-while 循環(huán)總是執(zhí)行它的循環(huán)體至少一次,因為它的條件表達式在循環(huán)的結(jié)尾。它的通用格式如下:
do {
// body of loop
} while (condition);
do-while 循環(huán)總是先執(zhí)行循環(huán)體,然后再計算條件表達式。如果表達式為真,則循環(huán)繼續(xù)。否則,循環(huán)結(jié)束。對所有的Java 循環(huán)都一樣,條件condition 必須是一個布爾表達式。下面是一個重寫的“tick”程序,用來演示do-while 循環(huán)。它的輸出與先前程序的輸出相同。
// Demonstrate the do-while loop.
class DoWhile {
public static void main(String args[]) {
int n = 10;
do {
System.out.println("tick " + n);
n--;
} while(n > 0);
}
}
該程序中的循環(huán)雖然在技術(shù)上是正確的,但可以像如下這樣編寫更為高效:
do {
System.out.println("tick " + n);
} while(--n > 0);
在本例中,表達式“-- n > 0 ”將n值的遞減與測試n是否為0組合在一個表達式中。它的執(zhí)行過程是這樣的。首先,執(zhí)行-- n 語句,將變量n遞減,然后返回n的新值。這個值再與0比較,如果比0大,則循環(huán)繼續(xù)。否則結(jié)束。
do-while 循環(huán)在你編制菜單選擇時尤為有用,因為通常都想讓菜單循環(huán)體至少執(zhí)行一次。下面的程序是一個實現(xiàn)Java 選擇和重復(fù)語句的很簡單的幫助系統(tǒng):
// Using a do-while to process a menu selection
class Menu {
public static void main(String args[])
throws java.io.IOException {
char choice;
do {
System.out.println("Help on:");
System.out.println(" 1. if");
System.out.println(" 2. switch");
System.out.println(" 3. while");
System.out.println(" 4. do-while");
System.out.println(" 5. for ");
System.out.println("Choose one:");
choice = (char) System.in.read();
} while( choice < '1' || choice > '5');
System.out.println(" ");
switch(choice) {
case '1':
System.out.println("The if: ");
System.out.println("if(condition) statement;");
System.out.println("else statement;");
break;
case '2':
System.out.println("The switch: ");
System.out.println("switch(expression) {");
System.out.println(" case constant:");
System.out.println(" statement sequence");
System.out.println(" break;");
System.out.println(" // ...");
System.out.println("}");
break;
case '3':
System.out.println("The while: ");
System.out.println("while(condition) statement;");
break;
case '4':
System.out.println("The do-while: ");
System.out.println("do {");
System.out.println(" statement;");
System.out.println("} while (condition);");
break;
case '5':
System.out.println("The for: ");
System.out.print("for(init; condition; iteration)");
System.out.println(" statement;");
break;
}
}
}
下面是這個程序執(zhí)行的一個樣本輸出:
Help on:
1. if
2. switch
3. while
4. do-while
5. for
Choose one:
4
The do-while:
do {
statement;
} while (condition);
在程序中,do-while 循環(huán)用來驗證用戶是否輸入了有效的選擇。如果沒有,則要求用戶重新輸入。因為菜單至少要顯示一次,do-while 循環(huán)是完成此任務(wù)的合適語句。
關(guān)于此例的其他幾點:注意從鍵盤輸入字符通過調(diào)用System.in.read( ) 來讀入。這是一個Java 的控制臺輸入函數(shù)。盡管Java 的終端 I/O (輸入/輸出)方法將在第12章中詳細(xì)討論,在這里使用System.in.read ( ) 來讀入用戶的選擇。它從標(biāo)準(zhǔn)的輸入讀取字符(返回整數(shù),因此將返回值choice 定義為字符型)。默認(rèn)地,標(biāo)準(zhǔn)輸入是按行進入緩沖區(qū)的,因此在你輸入的任何字符被送到你的程序以前,必須按回車鍵。
Java 的終端輸入功能相當(dāng)有限且不好使用。進一步說,大多數(shù)現(xiàn)實的Java 程序和applets (小應(yīng)用程序)都具有圖形界面并且是基于窗口的。因此,這本書使用終端的輸入并不多。然而,它在本例中是有用的。另外一點:因為使用System.in.read ( ) ,程序必須指定throws java.io.IOException 子句。這行代碼對于處理輸入錯誤是必要的。這是Java 的異常處理的一部分,將在第10章討論。
5.2.3 for 循環(huán)
在第2章曾使用過一個for循環(huán)的簡單格式。你將看到,for循環(huán)是一個功能強大且形式靈活的結(jié)構(gòu)。下面是for 循環(huán)的通用格式:
for(initialization; condition; iteration) {
// body
}
如只有一條語句需要重復(fù),大括號就沒有必要。
for循環(huán)的執(zhí)行過程如下。第一步,當(dāng)循環(huán)啟動時,先執(zhí)行其初始化部分。通常,這是設(shè)置循環(huán)控制變量值的一個表達式,作為控制循環(huán)的計數(shù)器。重要的是你要理解初始化表達式僅被執(zhí)行一次。下一步,計算條件condition 的值。條件condition 必須是布爾表達式。它通常將循環(huán)控制變量與目標(biāo)值相比較。如果這個表達式為真,則執(zhí)行循環(huán)體;如果為假,則循環(huán)終止。再下一步執(zhí)行循環(huán)體的反復(fù)部分。這部分通常是增加或減少循環(huán)控制變量的一個表達式。接下來重復(fù)循環(huán),首先計算條件表達式的值,然后執(zhí)行循環(huán)體,接著執(zhí)行反復(fù)表達式。這個過程不斷重復(fù)直到控制表達式變?yōu)榧佟?
下面是使用for 循環(huán)的“tick”程序:
// Demonstrate the for loop.
class ForTick {
public static void main(String args[]) {
int n;
for(n=10; n>0; n--)
System.out.println("tick " + n);
}
}
在for 循環(huán)中聲明循環(huán)控制變量
控制for循環(huán)的變量經(jīng)常只是用于該循環(huán),而不用在程序的其他地方。在這種情況下,可以在循環(huán)的初始化部分中聲明變量。例如,下面重寫了前面的程序,使變量 n 在for循環(huán)中被聲明為整型:
// Declare a loop control variable inside the for.
class ForTick {
public static void main(String args[]) {
// here, n is declared inside of the for loop
for(int n=10; n>0; n--)
System.out.printl
本篇文章來源于 黑基網(wǎng)-中國最大的網(wǎng)絡(luò)安全站點 原文鏈接:file:///C:/Documents%20and%20Settings/Administrator/桌面/網(wǎng)頁學(xué)習(xí)資料/java%20循環(huán)語句-知識-黑基網(wǎng).htm
分支語句根據(jù)一定的條件,動態(tài)決定程序的流程方向,從程序的多個分支中選擇一個或幾個來執(zhí)行。分支語句共有兩種:if語句和switeh語句。
1.if語句
if語句的基本語法是:
if{邏輯表達式}
語句1;
[else
語句2:
]
if語句中的else子句是可選的。if關(guān)鍵字之后的邏輯表達式必須得到一個邏輯值,不能像其他語言那樣以數(shù)值來代替。因為Java不提供數(shù)值與邏輯值之間的轉(zhuǎn)換。例如, C語言中的語句形式:
iF(x)
{…}
應(yīng)該寫作:
int X=3;
if(x!=O)
{…}
if語句的含義是:當(dāng)邏輯表達式結(jié)果為true時,執(zhí)行語句1,然后繼續(xù)執(zhí)行if后面的語句。當(dāng)邏輯表達式為false時,如果有else子句,則執(zhí)行語句2,否則跳過該if語句,繼續(xù)執(zhí)行后面的語句。語句1和語句2既可以是單語句,也可以是語句塊。
運算符