摘要: 類與對象 【學習目標】本章主要介紹類類型的定義、構造函數與析構函數的定義與作用、友元函數與友元類的聲明與作用、派生類的定義與作用、虛函數和多態性的概念、靜態數據成員的聲明與定義、模板類的定義與實例化等內容。通過本章的學習,要求同學們:掌握類的概念,類類型的定義格式,類與結構的關系,類與操作符重載,類的成員屬性,類的封裝性,類的繼承性,構造函數和析構函數的作用,this指針的含義,類對象的...
摘要: 1 類和結構類和結構可以看作是創建對象的模板。每個對象都包括數據,并提供處理和訪問數據的方法。類定義了每個對象(實例)包含什么樣的數據與功能1.1封裝“封裝”有時被稱為面向對象的編程的第一個支柱或原則。根據封裝的原則,類或結構可以指定其每個成員對于該類或結構外部的代碼的可訪問性。可將無意在類或程序集外部使用的方法和變量隱藏起來,以減小編碼錯誤或遭惡意利用的可能性。1.2&n...
Java 的循環語句有for,while 和 do-while 。這些語句創造了我們通常所稱的循環(loops)。你可能知道,一個循環重復執行同一套指令直到一個結束條件出現。你將看到,Java 有
Java 的循環語句有for,while 和 do-while 。這些語句創造了我們通常所稱的循環(loops)。你可能知道,一個循環重復執行同一套指令直到一個結束條件出現。你將看到,Java 有適合任何編程所需要的循環結構。
5.2.1 while 語句
while 語句是Java 最基本的循環語句。當它的控制表達式是真時,while 語句重復執行一個語句或語句塊。它的通用格式如下:
while(condition) {
// body of loop
}
條件condition 可以是任何布爾表達式。只要條件表達式為真,循環體就被執行。當條件condition 為假時,程序控制就傳遞到循環后面緊跟的語句行。如果只有單個語句需要重復,大括號是不必要的。
下面的while 循環從10開始進行減計數,打印出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--;
}
}
}
當你運行這個程序,它將“tick”10次:
tick 10
tick 9
tick 8
tick 7
tick 6
tick 5
tick 4
tick 3
tick 2
tick 1
因為while 語句在循環一開始就計算條件表達式,若開始時條件為假,則循環體一次也不會執行。例如,下面的程序中,對println( ) 的調用從未被執行過:
int a = 10, b = 20;
while(a > b)
System.out.println("This will not be displayed");
while 循環(或Java 的其他任何循環)的循環體可以為空。這是因為一個空語句(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的中間點。它產生的輸出如下:
Midpoint is 150
該程序中的while 循環是這樣執行的。值i自增,而值j自減,然后比較這兩個值。如果新的值i仍比新的值j小,則進行循環。如果i等于或大于j,則循環停止。在退出循環前,i 將保存原始i和j的中間值(當然,這個程序只有在開始時i比j小的情況下才執行)。正如你看到的,這里不需要循環體。所有的行為都出現在條件表達式自身內部。在專業化的Java 代碼中,一些可以由控制表達式本身處理的短循環通常都沒有循環體。
5.2.2 do-while 循環
如你剛才所見,如果while 循環一開始條件表達式就是假的,那么循環體就根本不被執行。然而,有時需要在開始時條件表達式即使是假的情況下,while 循環至少也要執行一次。換句話說,有時你需要在一次循環結束后再測試中止表達式,而不是在循環開始時。幸運的是,Java 就提供了這樣的循環:do-while 循環。do-while 循環總是執行它的循環體至少一次,因為它的條件表達式在循環的結尾。它的通用格式如下:
do {
// body of loop
} while (condition);
do-while 循環總是先執行循環體,然后再計算條件表達式。如果表達式為真,則循環繼續。否則,循環結束。對所有的Java 循環都一樣,條件condition 必須是一個布爾表達式。下面是一個重寫的“tick”程序,用來演示do-while 循環。它的輸出與先前程序的輸出相同。
// 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);
}
}
該程序中的循環雖然在技術上是正確的,但可以像如下這樣編寫更為高效:
do {
System.out.println("tick " + n);
} while(--n > 0);
在本例中,表達式“-- n > 0 ”將n值的遞減與測試n是否為0組合在一個表達式中。它的執行過程是這樣的。首先,執行-- n 語句,將變量n遞減,然后返回n的新值。這個值再與0比較,如果比0大,則循環繼續。否則結束。
do-while 循環在你編制菜單選擇時尤為有用,因為通常都想讓菜單循環體至少執行一次。下面的程序是一個實現Java 選擇和重復語句的很簡單的幫助系統:
// 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;
}
}
}
下面是這個程序執行的一個樣本輸出:
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 循環用來驗證用戶是否輸入了有效的選擇。如果沒有,則要求用戶重新輸入。因為菜單至少要顯示一次,do-while 循環是完成此任務的合適語句。
關于此例的其他幾點:注意從鍵盤輸入字符通過調用System.in.read( ) 來讀入。這是一個Java 的控制臺輸入函數。盡管Java 的終端 I/O (輸入/輸出)方法將在第12章中詳細討論,在這里使用System.in.read ( ) 來讀入用戶的選擇。它從標準的輸入讀取字符(返回整數,因此將返回值choice 定義為字符型)。默認地,標準輸入是按行進入緩沖區的,因此在你輸入的任何字符被送到你的程序以前,必須按回車鍵。
Java 的終端輸入功能相當有限且不好使用。進一步說,大多數現實的Java 程序和applets (小應用程序)都具有圖形界面并且是基于窗口的。因此,這本書使用終端的輸入并不多。然而,它在本例中是有用的。另外一點:因為使用System.in.read ( ) ,程序必須指定throws java.io.IOException 子句。這行代碼對于處理輸入錯誤是必要的。這是Java 的異常處理的一部分,將在第10章討論。
5.2.3 for 循環
在第2章曾使用過一個for循環的簡單格式。你將看到,for循環是一個功能強大且形式靈活的結構。下面是for 循環的通用格式:
for(initialization; condition; iteration) {
// body
}
如只有一條語句需要重復,大括號就沒有必要。
for循環的執行過程如下。第一步,當循環啟動時,先執行其初始化部分。通常,這是設置循環控制變量值的一個表達式,作為控制循環的計數器。重要的是你要理解初始化表達式僅被執行一次。下一步,計算條件condition 的值。條件condition 必須是布爾表達式。它通常將循環控制變量與目標值相比較。如果這個表達式為真,則執行循環體;如果為假,則循環終止。再下一步執行循環體的反復部分。這部分通常是增加或減少循環控制變量的一個表達式。接下來重復循環,首先計算條件表達式的值,然后執行循環體,接著執行反復表達式。這個過程不斷重復直到控制表達式變為假。
下面是使用for 循環的“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 循環中聲明循環控制變量
控制for循環的變量經常只是用于該循環,而不用在程序的其他地方。在這種情況下,可以在循環的初始化部分中聲明變量。例如,下面重寫了前面的程序,使變量 n 在for循環中被聲明為整型:
// 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
本篇文章來源于 黑基網-中國最大的網絡安全站點 原文鏈接:file:///C:/Documents%20and%20Settings/Administrator/桌面/網頁學習資料/java%20循環語句-知識-黑基網.htm
Java中的main()方法詳解
在Java中,main()方法是Java應用程序的入口方法,也就是說,程序在運行的時候,第一個執行的方法就是main()方法,這個方法和其他的方法有很大的不同,比如方法的名字必須是main,方法必須是public static void 類型的,方法必須接收一個字符串數組的參數等等。
在看Java中的main()方法之前,先看一個最簡單的Java應用程序HelloWorld,我將通過這個例子說明Java類中main()方法的奧秘,程序的代碼如下:
/**
* Java中的main()方法詳解
*/
public class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello World!");
}
}
一、先說類:
HelloWorld 類中有main()方法,說明這是個java應用程序,通過JVM直接啟動運行的程序。
既然是類,java允許類不加public關鍵字約束,當然類的定義只能限制為public或者無限制關鍵字(默認的)。
二、再說main()方法
這個main()方法的聲明為:public static void main(String args[])。必須這么定義,這是Java的規范。
為什么要這么定義,和JVM的運行有關系。
當一個類中有main()方法,執行命令“java 類名”則會啟動虛擬機執行該類中的main方法。
由于JVM在運行這個Java應用程序的時候,首先會調用main方法,調用時不實例化這個類的對象,而是通過類名直接調用因此需要是限制為public static。
對于java中的main方法,jvm有限制,不能有返回值,因此返回值類型為void。
main方法中還有一個輸入參數,類型為String[],這個也是java的規范,main()方法中必須有一個入參,類細必須String[],至于字符串數組的名字,這個是可以自己設定的,根據習慣,這個字符串數組的名字一般和sun java規范范例中mian參數名保持一致,取名為args。
因此,main()方法定義必須是:“public static void main(String 字符串數組參數名[])”。
三、main()方法中可以throw Exception
因此main()方法中可以拋出異常,main()方法上也可以聲明拋出異常。
比如,下面這個寫法是正確的:
public class TestMain {
public static void main(String[] args) throws Exception {
System.out.println("哈哈哈哈哈");
throw new Exception("");
}
}
運行結果:
哈哈哈哈哈
Exception in thread "main" java.lang.Exception:
at maintest.TestMain.main(TestMain.java:11)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
Process finished with exit code 1
四、main()方法中字符串參數數組作用
main()方法中字符串參數數組作用是接收命令行輸入參數的,命令行的參數之間用空格隔開。
下面給出一個例子,看看如何初始化和使用這個數組的。
/**
* 打印main方法中的輸入參數
*/
public class TestMain {
public static void main(String args[]){
System.out.println("打印main方法中的輸入參數!");
for(int i=0;i<args.length;i++){
System.out.println(args[i]);
}
}
}
執行方法和運行結果
D:\Study\basetest\src>javac TestMain.java
D:\Study\basetest\src>java TestMain 1 2 3
打印main方法中的輸入參數!
1
2
3
五、給出HelloWorld的另外一個版本
/**
* 變態版的HelloWorld.呵呵
*/
public class HelloWorld2 {
static {
System.out.println("Hello Wordld!");
}
public static void main(String args[]){
System.exit(0);
}
}
這個main()方法執行的內容就一句"System.exit(0);" ,目的是讓程序正常結束。那“HelloWorld!”是從哪里打印的,秘密就是在static打印的,因為static代碼塊的內容會在main調用前調用。
總結:
main方法作為一個特殊的規范,與普通的方法有很大區別,限制很多,理解其原理需要學習JVM相關知識。是Java中學習中大障礙。這是我對main原理和使用的總結,歡迎各位在此討論。