【Java】_2_Java程式入門第五課

來源:互聯網
上載者:User

  我們知道,在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的內容。

  哎, 學習進度有點慢啊, 這個還真需要時間啊。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.