指定相關的測試代碼數組
首先,寫一個用於測試的關於Main(String[] args)參數輸入有關的代碼類,以下:函數
using System;測試
public class Hello
{
public static void Main(String[] args)
{
switch (args[0])
{
case "老闆":
Console.WriteLine("早上好!咱們隨時準備爲您效勞!");
break;
case "僱員":
Console.WriteLine("早上好!你能夠開始工做了!");
break;
default:
Console.WriteLine("早上好!祝你好運!");命令行
break;
}
Console.WriteLine("args[1]的值爲:"+args[1]);
}
}調試
測試運行blog
如今,若是直接運行,獲得的結果將是一個 "索引超出了數組界限"的錯誤。爲何呢?由於這個時候String[] args並沒有任何內容,也就是說是一個空的數組,那麼你引用args[0]固然會致使一個越界的錯誤。索引
![](http://static.javashuo.com/static/loading.gif)
圖:直接運行致使的錯誤生命週期
如何在將args[0]的參數傳入ip
如今,怎麼樣來將參數傳入,達到咱們的目的呢?能夠有2種方法:get
1. 在運行以前將咱們的參數設定,以便傳入。在"解決方案"窗口中,右鍵你的項目名,選擇 "屬性",在彈出的新窗口中選擇 "調試" ->"啓動選項"->"命令行參數" 中,輸入你要傳入的string參數值。(多個參數之間用空格隔開)
2. 將咱們寫好的測試代碼保存,例如:Program.cs。 而後在SDK中編譯(csc Program.cs) 注意路徑。獲得一個Program.exe的文件(同目錄下),而後咱們能夠在SDK傳入args參數了,方法是:在SDK中輸入咱們編譯好的文件並連參數一塊兒傳入:Program.exe 老闆 早上好 。獲得的信息是:
早上好!咱們隨時準備爲您效勞!
args[1]的值爲:早上好
注意:
1. 若是傳入多個參數,必定要用空格隔開,不能使用逗號。格式是:Program.exe 參數1 參數2 ...。
2. 參數的個數要與你代碼中出現的參數個數保持一致,不然會出現"索引超出數組界限"的異常。
![](http://static.javashuo.com/static/loading.gif)
圖:先編譯,而後將參數傳入
至此就已經成功了!!!
問題:怎樣在程序中設定args[]的值呢?args[]不能直接用args[0]="hello"的形式訪問,也不能用args[0]=new String()的方式構造,那就只有使用傳遞了!
下面的程序能夠直接運行可以成功,但若是去除捕捉異常的try塊,仍是會出現越界問題。仔細思考try塊的做用可讓你對main參數傳遞有更深刻的瞭解。
using System;
public class Hello
{
static int i = 0;
static void print()
{
i++;
if (i == 1)
{
string[] S ={ "老闆" };
Main(S);
}
else
{
return;
}
}
static void Main(string[] args)
{
print();
try
{
switch (args[0])
{
case "老闆":
Console.WriteLine("早上好!咱們隨時準備爲您效勞!");
break;
case "僱員":
Console.WriteLine("早上好!你能夠開始工做了!");
break;
default:
Console.WriteLine("早上好!祝你好運!");
break;
}
}
catch
{
Console.WriteLine("運行完畢,finish");
Console.ReadKey();
}
}
}
分析此程序
首先假設把捕捉異常try塊去除. 在沒有try塊的狀況下,執行順序從Main()入口,調用print(),在print()中聲明S(S是一個局部變量,僅在print中有效),而後調用Main(S),傳入S執行Switch,對於args[0],打印出"早上好!咱們隨時準備爲您效勞!",print()調用完成(此時S生命週期結束). 返回到Main()繼續執行,到switch時,因爲string屬於傳遞引用,而此時S已經消亡,arg[0]爲空,出現"索引超出了數組界限"異常的報錯.
從上能夠看出,實際上switch塊要執行兩次,前一次在一個函數調用內執行,傳入args[0]的值,而第二次因爲S的消亡,致使args[0]爲空.出現"索引超出了數組界限"異常. 那麼,加上捕捉異常try塊的緣由就很明顯了, 那就是阻止switch塊的第二次運行直接進入catch, 防止args[0]在沒有值的狀況下被使用.
此程序能夠被擴展,注意關鍵字static起到的做用。反覆演練此程序,不斷去破壞和加固它,會感受受益良多。