我們知道,在C程式中,主入口函數(通常大家叫主函數,就是main()函數)可以擷取系統傳遞給程式的參數,其主函數的定義形式如下:
#include <stdio.h>int main(int argc;char* argv[]){ statement;
return 0;}
在C中,main函數的形式參數: argv指標數組儲存的是傳遞的參數的指標,argc儲存的是主函數擷取的參數的個數,即argc儲存的是數組argv的index
大小,並且argv[0]儲存的是可執行程式的檔案名稱(這個包括路徑?嘻嘻,這裡賣個關子)。
那麼在Java中是否具有這樣的機制呢?
【Java的命令列參數】
Java的入口函數main也提供了C語言一樣的機制,我們來看入口函數的main的定義:
/**/public class class_name{ public static void main(String args[]) { statements; }}
可以看到,main函數也存在形式參數:String args[]
這裡,系統傳遞給Java程式的參數就是儲存在形式參數 args[] 中,大家可以看到Java中的形式參數沒有:argc count項? 這是為什麼呢?
/*本程式碼測試For Each語句 和命令列參數*/public class ForEach{ public static void main(String[] args) { //測試for each語句和main函數的參數 //for(String getmain:args) //System.out.println(getmain); for(int i=0;i<args.length;i++) System.out.println(args[i]); }}
程式的執行結果如下:
通過程式我們看到,Java的main函數確實接受了系統傳遞過來的參數,並且沒有儲存Java程式的名稱。同時我們可以看到不需要
argc count計數也能完整的輸出輸入的參數;這就是Java與C語言main函數之間的差別。
【Java For Each迴圈】
如果接觸過VB,那麼大家一定會熟悉VB結構中提供的For Each迴圈結構;同樣在Java中在SDK 5.0 以後的版本也提供了這樣一個迴圈結構。
通過For Each迴圈可以處理具有集合特性的資料,例如可以處理數組、對象集合等。其文法結構是:
for(Object object_var:Object Set) statement;
對於集合Object Set中的每一個對象object_var,執行statement。
我們可以測試一下這個語句:
/*本程式碼測試For Each語句 和命令列參數*/public class ForEach{ public static void main(String[] args) { //測試for each語句和main函數的參數 for(String getmain:args) System.out.println(getmain); //for(int i=0;i<args.length;i++) //System.out.println(args[i]); }}
程式的執行結果如下所示:
可以看到上面的輸出結果和用for迴圈驅動是一致的。
【Java 程式執行的傳回值】
可以看到,Java程式的入口函數定義為void型,就是不返回任何值,但是有時候我們需要傳回值那麼怎麼辦呢?我們是否可以和C中一樣
將Java的入口函數定義為int型(或者是其他傳回型別呢)?
遺憾的是,Java程式的main函數必須定義為void類型,那麼我們是否不能有傳回值給系統了呢?
Java雖然沒有提供入口函數的return機制,但是提供的System類的方法可以說實現這個目的。文法如下:
System.exit(x); //通過這個方法實現傳回值到系統。
具體的執行個體就不做了。
【Java 字串類型】
字串:在Java中字串是Unicode字元序列。和C語言類似,Java沒有內建標準的資料類型來表示字串,而是通過在標準庫中
提供一個“預定義的類”來提供對字串處理的支援;這個類就是:String
根據OOP的思想,任何一個字串都可以認為是String類的執行個體Instance。而在Java中沿襲了C/C++體系的習慣,在Java中用
雙引號來表示字串。
Exp:
“abcde”;//Java字串
String EmptyStr=""; //Null 字元串
String Greeting=“Hello world”;//字串“Hello world”
1、子串
從字串提取的一個小字串就是一個子串,包括字串本身;這通過String提供的substring方法來實現。
其文法是:
object.substring(index_start,index_end);
由於字串引用索引是從index_start可以0開始,且index_end是第一個不需要提取的字元,因此[index_start,index_end)是左閉右開區間,
因此這裡需要注意 。
提取的子串的長度為: index_end - start_index.
Exp:
String greeting="Hello world";
String sub_greeting=greetring.substring(0,5);
String sub_sub_greeting=sub_greeting.substring(1,3);
這樣我們的子串sub_greeting就是“Hello”;而sub_sub_greeting則是“el”;
/*本程式測試字串String類*/public class string{ public static void main(String args[]) { String greeting="Hello world!"; String sub_greeting=greeting.substring(0,5); String sub_sub_greeting=sub_greeting.substring(1,3); System.out.println(sub_greeting); System.out.println(sub_sub_greeting); System.exit(0); }}
執行結果如下:
2、字串的拼接
我們知道在C++中,通過運算子多載的功能,將 + 重載提供字串拼接運算,那麼在Java中是否具有這樣的機制呢?
Java中不具有運算子多載機制,但是我們依然可以通過 + 運算子串連兩個字串。
Exp:
String string_link="hello" +" " + "world!";
這裡: string_link 將表示: “hello world!” 這個字串。
3、字串的不可改變性
接觸過C/C++的對字串的操作可能在這裡會引起部分誤解,我們知道如下:
Exp: *.c
char p[]="abcdefg";
p[1]='x' ; //是可以通過這樣的方式來改變字串的內容的。實際上並沒有改變“abcdefg”的內容,而是改不了變數p[1]的內容。
而在Java中不能通過這這機制來改變String對象中的內容;因為String 對象更像一個引用,而不是陣列變數。
Exp: *.java
String str="abc";
str[1]='x'; //這種文法是錯誤的,Java的String類是不可改變指向的內容; 這類似於C/C++中的 char *p=“abcd”一樣;不能通過p[1]
//改變“abcd”的內容一樣。
如果需要改變字串的內容,則可以通過Stringbuffer類實現。
4、檢測字串是否相等
有時候需要檢測字串是否相等,那麼我們怎麼檢測兩個字串是否相等呢?
在String類中提供了一個方法來實現這個功能:object.equals(String obj);
如果測試的object對象和obj對象相等則返回true;否則返回false。
Exp:
String str="Hello";
str.equals("Hello"); //這裡返回true。 當然也可以這樣測試 “Hello”.equals(str); 同樣返回true。
需要說明的是,equals方法使大小寫敏感的,就是說 “Hello”.equals("hello"); 返回的是false。
如果需要不區分大小小,則可以使用equalsIgnoreCase 方法來測試。
Exp:
"Hello".equalsIgnoreCase("hello"); //傳回值為true;
注意:
不能用 == 符號來測試兩個字串String對象是否相等,雖然有時候 == 確實能進行比較。== 的用途是用來比較兩個字串
的儲存位置是否一致,如果一致則運算結果是true,否則為false。
== 運算子可以用來檢測共用字串是否相等,子串串常量是共用的,而 + 或substring方法得到的字串均不是共用的。
5、字串儲存空間和字串長度(即代碼點和代碼單元)
我們知道Java中字元是採用Unicode編碼的,這樣字串儲存的空間就比char類型多了一倍。
通常可以這樣認為: 代碼點計數 就是 字串的儲存空間計數; 而代碼單元計數就是字串長度(即字元個數)計數。可以通過下面
的方法擷取字串長度:
int str_length="hello world".length();
而如果需要擷取代碼點計數則需要通過下面的方法:codePointCount(start_index,end_index);
Exp: 擷取字串“hello world”的儲存空間大小。
int cp_str="Hello world".codePointCount(0,"Hello world".length());
有時候需要擷取字串指定位置index的代碼單元的內容,我們可以通過:charAt(index);方法; 因為String的index是從0開始計數的
所以 0<= index < object.length-1 .
Exp: 擷取字串“hello world" 的第四個字元
char four_in_str="hello world"。charAt(4-1); //這樣four_in_str儲存的就是字元'l'
6、 Java的String類的API介面
Java提供了很多的String類的API介面函數,這些函數用來處理字串將非常容易,具體就不說了,太多了。
【小結】
到這裡,書第三章基本已經看完了,接下來的事情就是第四章了,粗略的看了一下,第四章主要是介紹OOP的內容。
哎, 學習進度有點慢啊, 這個還真需要時間啊。