【Java】_2_Java程序入門第五課


  我們知道,在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="";  //空字符串

  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的內容。

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


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com