您好,登錄后才能下訂單哦!
本篇內容介紹了“Java應用程序的運行環境以及參數的傳遞”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Java應用程序是指可以獨立運行在Java虛擬機上的程序,它是一種中間代碼(byte-code?copy;。比如你的應用程序叫my.java,程序里有一個名稱為app1的類,用Javac或其它編譯器,編譯后將會生成app1.class,則在命令行狀態下輸入:javaapp1就可以運行此程序。注意,用java命令運行的類必須有main函數,否則不能執行。與普通java應用程序不同的另一種另一種Java程序叫JavaApplet。我們把它譯成Java小程序,這種程序后綴也是.class,但它不能直接在java虛擬機上運行,也就是輸入java*.class不能運行,這種程序里可以沒有main函數,它必須由某個瀏覽器來運行,比如Appletviewer或Netscape2.02以上等。這種程序我們將在后面章節中介紹。
讓我們來看一看最簡單的Java應用程序例子,來理解一下它的結構:Filename:1.java
classmyfirst{publicstaticvoidmain(Stringargs[]){System.out,println("ThisismyfirstJavaApplication");}}
這就是一個完整的Java應用程序,將它編譯:Javac1.java在當前目錄下,它將生成myfirst.class文件,Javamyfirst屏幕上將會輸出:ThisismyfirstJavaApplication
讓我們來一步一步分析每句話含義(1?copy;classmyfirst這一行用關鍵詞class來定義名為myfirst的新類,myfirst是新類的名稱,必須是一個有效的標識符,有效標識符定義請見程序設計基礎章節。類的說明包括數據說明和成員函數說明,都放在類后面的大括號里面。一般類定義如下:class類名稱{數據定義;函數定義;}
(2)publicstaticvoidmain(Stringargs[])public是一個表示訪問權限的關鍵字,表示此成員函數是公有的,可以被其他類直接調用,包括java解釋器。相對應的關鍵字有private和protected,friend。private表示只能被本類訪問,protected表示只能被子類訪問,friend是缺省的訪問權限,表示能被本包(package)中任意類訪問,對其它包中的類是不可訪問的。static表示main成員函數在myfirst類的所有對象中是唯一的,因此如果本程序生成另一個myfirst類對象,調用的main函數將是同一個函數。void表示main函數沒有返回值,如果有返回類型值,則可加上interger或boolean諸如此類,對于有返回值的函數,其函數實體的最后應加上return語句。main這個函數是這運行應用程序的入口點,因此編寫應用程序是必須有main()函數,且是唯一的。
(3?copy;System.out.println一句這一句是main函數里的功能語句,是調用Java里System包里的out類的println成員函數,是標準輸入輸出。
Java語言很類似C和C++語言。在C語言里,通過在命令行輸入參數,C程序可由main函數讀入這?copy;參數,java程序也一樣,請看下面程序:Filename:2.java
classMy2{publicstaticvoidmain(Stringargs[]){intarc=args.length;if(arc>0){for(inti=0;i<arc;i++)System.out.println(args[i])}else{System.out.println("Applicationhavenoargs!");}}}
編譯:javac2.java將在本目錄下生成My2.class文件。
運行:javaMy2輸出:Applicationhavenoargs!
運行:javaMy2arg1arg2arg3輸出:arg1arg2arg3這說明,java里參數的傳遞是這樣的,命令行里類名后第一個參數放在args[0]里,第二個參數放在args[1]里,以此類推。
Frame介紹在Java語言里,Frame類的功能是創建圖形用戶界面(GUI)的基本窗口。在典型瀏覽器里,Frame類是顯示GUI的父類。
類的層次結構如下:java.lang.Objectjava.awt.Componentjava.awt.Containerjava.awt.Windowjava.awt.Frame
Frame是從沒有邊框和菜單條的空白窗口?copy;充來的。這種窗口主要用在彈出式窗口方式下。Frame給窗口一個邊框,一個布局和一個窗口條。
你可以通過創建自己的多個Frame來創建圖形用戶界面的應用程序。我們已知道怎樣建立獨立的java應用程序,那么怎樣將各種迷人的圖形結合在一塊呢?我們通過建立一個Frame來實現這個功能。Frame讓我們訪問窗口,和applet工作區有許多相同的地方。下面是一個小的應用程序,它彈出一個框架并且在框架里顯示信息。(信息可以是命令行參數,也可以是缺省的信息?copy;。如果你在窗口里點一下,程序退出。
基本框架程序importjava.awt.*;
/**Memo.java*Asimplestand-alonegraphicalapplication*/
publicclassMemoextendsFrame{publcStringmotd;
publicMemo(Strings){//setourtitlesuper("MemoFrame");
motd=s;resize(300,300);}
publicMemo(){this("ThisisaMemo");}
publicvoidpaint(Graphicsg){g.drawString(motd,15,15);g.drawString("ClickanywheretoExit",15,25);}
publicvoidstart(){show();}
publicbooleanmouseDown(Evente,intx,inty){//hidethewindowhide();//freeupsystemresourcesdispose();//Quittheapp.System.exit(0);returnfalse;}
publicstaticvoidmain(Stringargs[]){Memom;if(args.length>){m=newMemo(args[0]);}else{m=newMemo();}m.start();}}
將Frame聯系起來l熟悉的函數paint()和mouseDown(),看起來有點眼熟。這?copy;函數與applet的函數一樣。實際上,一個frame包含各種GUI組件與applet的形式一樣。另一個熟悉的函數是start()。這個函數并不必要,因為我們沒有覆蓋任何已存在的函數。但你想繼承applet編程的風格,你還是可以使用start(),stop(),init()與destroy()等函數。
l新函數我們熟悉的函數start()調用了show()。show()函數是Window類的繼承,它顯示Fame及其所有組件。在mouseDown()函數里我們看到兩個函數:hide()和dispose()。hide()只簡單地使Frame不可見。你可以在任何時候調用它來隱藏窗口。dispose()函數釋放由Frame占有的系統資源。只有在你不需要Frame時才調用它。
l構造函數Memo例子還包含了一個新函數Memo()。其實這個類有兩個Memo()函數!任何與類名相同的函數都是構造函數。它在創建一個新對象時被調用。你可以認為它是一個對象的init()初始化函數。為什么需要兩個構造函數呢?有了兩個構造函數,我們可以利用多態性的優點,有兩種方法創建一個新Memo對象。我們可以簡單的創建使用缺省信息的Memo對象:m=newMemo();或者,我們可以自己提?copy;信息:m=newMemo("Ourmessage");
Frame控制本程序的最后功能是在main()里建立并顯示frame。它由以下兩步實現://Step1m=newMemo();
//Step2m.start();第一步初始化memo對象。我們象操作其它對象一樣操作m。為顯示frame,我們需要調用show()。這在第二步里實現。另一個要注意的是程序的健壯性:我們基本的frame里沒有包含處理標準WINDOW_DESTROY消息的函數。這樣,你將不能在窗口的控制菜單里選中"Quit"或"Exit"。為了增加這個功能,你需要增加以下的處理程序:
publicbooleanhandleEvent(Evente){if(e.id==Event.WINDOW_DESTROY){dispose();System.exit(1);returntrue;}else{//Goaheadanddowhatwenormallywouldhavedonereturnsuper.handleEvent(e);}}
菜單圖形界面依靠菜單來指導用戶操作。設計獨立的Java應用程序時,Java提?copy;創建和使用菜單的直接方法。象其它組件一樣,new將創建一個菜單:
MenuoptionMenu;optionsMenu=newMenu("Options");
菜單項一?copy;你創建了一個菜單,你可以使用add()來組建菜單項:
optionsMenu.add(newMenuItem("Option1");optionsMenu.add(newMenuItem("Option2");
菜單事件當你選中某個菜單項時,你創建此菜單項的字符?reg;將在事件中返回。你可以象測試按鈕選擇一樣測試菜單選擇:
publicbooleanaction(Evente,Objectarg){...if(e.targetinstanceofMenuItem){System.out.println((String)arg);}...}
其它菜單項除了上面描述的簡單菜單項外,你還可增加CheckBox菜單項,分割線,以及子菜單。下面是一?copy;例子:Menum,n;m=newMenu("Examples");m.add(newMenuItem("Basic"));m.add(newMenuItem("Simple"));
//addaseparatorm.add(newMenuItem("-"));
//addaCheckboxitemm.add(newCheckboxMenuItem("Check"));
//addasubmenun=newMenu("MoreExamples");n.add(newMenuItem("SubBasic"));n.add(newMenuItem("SubSimple"));m.add(n);
菜單條你創建好菜單后,你應將?reg;放在應用程序的菜單條上:mb=newMenubar();
mb.add(m);mb.add(optionsMenu);
然后你可為applet設置菜單條:setMenuBar(mb);
為了看一個更復雜的獨立的圖形界面應用程序,下面有一個數字轉換的例子:
importjava.awt.*;
publicclassd2xextendsFrame{intdecimalValue=0;StringbaseXValue=newString("0");TextFielddDisplay,xDisplay;
//d2xconstructorpublicd2x(){super("DecimalConverter");//setthetitleoftheframeMenuBarmb=newMenuBar();Buttond2Binary=newButton("Binary");Buttond2Octal=newButton("Octal");Buttond2Hex=newButton("Hex");Buttond2Base36=newButton("Base36");Panelp1=newPanel();Panelp2=newPanel();Panelp3=newPanel();
//addasimplemenuMenum=newMenu("Application");m.add(newCheckboxMenuItem("Base36Active");m.add(newMenuItem("Exit"));
//addmenutomenubarmb.add(m);setMenuBar(mb);//installthismenubarintheframe
//Addbuttonstotheirownpanelp3.setLayout(newFlowLayout());p3.add(d2Binary);p3.add(d2Octal);p3.add(d2Hex);p3.add(d2Base36);
//AddtextfieldsLabeldLabel=newLabel("EnterDeecimal:");LabelxLabel=newLabel("ConvertedValue:");dDisplay=newTextField(integer.toString(decimalValue),7);xDisplay=newTextField(baseXValue,32);xDisplay.setEditable(false);p1.setLayout(newFlowLayout(FlowLayout.LEFT));p2.setLayout(newFlowLayout(FlowLayout.LEFT));p1.add(dLabel);p1.add(dDisplay);p2.add(xLabel);p2.add(xDisplay);
//Addthepanelsadd("North",p1);add("Center",p2);add("South",p3);}//endd2xconstructor
publicvoidstart(){resize(400,150);show();}
publicvoidupdateXDisplay(){xDisplay.setText(baseXValue);}
publicbooleanhandleEvent(Eventevt){if(evt.targtintanceofMenuItem){if("Exit".equals(((MenuItem)evt.target).getLabel())){hide();dispose();System.exit(0);returnfalse;}retruntrue;}elseif(evt.targetinstanceofButton){Stringwhick=((Button)evt.target).getLabel();if(whick.equals("Binary")){decimalValue=Integer.parseInt(dDisplay.getText());baseXValue=Interger.toString(decimalValue,2);}if(whick.equals("Octal")){decimalValue=Integer.parseInt(dDisplay.getText());baseXValue=Interger.toString(decimalValue,8);}if(whick.equals("Hex")){decimalValue=Integer.parseInt(dDisplay.getText());baseXValue=Interger.toString(decimalValue,16);}if(whick.equals("36")){decimalValue=Integer.parseInt(dDisplay.getText());baseXValue=Interger.toString(decimalValue,36);}updateXDisplay();returntrue;}returnfalse;}
publicstaticvoidmain(Stringargs[]){d2xm=newd2x();m.start();}}
“Java應用程序的運行環境以及參數的傳遞”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。