溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java應(yīng)用程序的運(yùn)行環(huán)境以及參數(shù)的傳遞

發(fā)布時間:2021-09-10 09:06:24 來源:億速云 閱讀:115 作者:chen 欄目:云計算

本篇內(nèi)容介紹了“Java應(yīng)用程序的運(yùn)行環(huán)境以及參數(shù)的傳遞”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

1Java應(yīng)用程序的運(yùn)行環(huán)境

Java應(yīng)用程序是指可以獨(dú)立運(yùn)行在Java虛擬機(jī)上的程序,它是一種中間代碼(byte-code?copy;。比如你的應(yīng)用程序叫my.java,程序里有一個名稱為app1的類,用Javac或其它編譯器,編譯后將會生成app1.class,則在命令行狀態(tài)下輸入:javaapp1就可以運(yùn)行此程序。注意,用java命令運(yùn)行的類必須有main函數(shù),否則不能執(zhí)行。與普通java應(yīng)用程序不同的另一種另一種Java程序叫JavaApplet。我們把它譯成Java小程序,這種程序后綴也是.class,但它不能直接在java虛擬機(jī)上運(yùn)行,也就是輸入java*.class不能運(yùn)行,這種程序里可以沒有main函數(shù),它必須由某個瀏覽器來運(yùn)行,比如Appletviewer或Netscape2.02以上等。這種程序我們將在后面章節(jié)中介紹。

2最簡單的Java程序解釋

讓我們來看一看最簡單的Java應(yīng)用程序例子,來理解一下它的結(jié)構(gòu):Filename:1.java

classmyfirst{publicstaticvoidmain(Stringargs[]){System.out,println("ThisismyfirstJavaApplication");}}

這就是一個完整的Java應(yīng)用程序,將它編譯:Javac1.java在當(dāng)前目錄下,它將生成myfirst.class文件,Javamyfirst屏幕上將會輸出:ThisismyfirstJavaApplication

讓我們來一步一步分析每句話含義(1?copy;classmyfirst這一行用關(guān)鍵詞class來定義名為myfirst的新類,myfirst是新類的名稱,必須是一個有效的標(biāo)識符,有效標(biāo)識符定義請見程序設(shè)計基礎(chǔ)章節(jié)。類的說明包括數(shù)據(jù)說明和成員函數(shù)說明,都放在類后面的大括號里面。一般類定義如下:class類名稱{數(shù)據(jù)定義;函數(shù)定義;}

(2)publicstaticvoidmain(Stringargs[])public是一個表示訪問權(quán)限的關(guān)鍵字,表示此成員函數(shù)是公有的,可以被其他類直接調(diào)用,包括java解釋器。相對應(yīng)的關(guān)鍵字有private和protected,friend。private表示只能被本類訪問,protected表示只能被子類訪問,friend是缺省的訪問權(quán)限,表示能被本包(package)中任意類訪問,對其它包中的類是不可訪問的。static表示main成員函數(shù)在myfirst類的所有對象中是唯一的,因此如果本程序生成另一個myfirst類對象,調(diào)用的main函數(shù)將是同一個函數(shù)。void表示main函數(shù)沒有返回值,如果有返回類型值,則可加上interger或boolean諸如此類,對于有返回值的函數(shù),其函數(shù)實(shí)體的最后應(yīng)加上return語句。main這個函數(shù)是這運(yùn)行應(yīng)用程序的入口點(diǎn),因此編寫應(yīng)用程序是必須有main()函數(shù),且是唯一的。

(3?copy;System.out.println一句這一句是main函數(shù)里的功能語句,是調(diào)用Java里System包里的out類的println成員函數(shù),是標(biāo)準(zhǔn)輸入輸出。

3Java應(yīng)用程序參數(shù)的傳遞

Java語言很類似C和C++語言。在C語言里,通過在命令行輸入?yún)?shù),C程序可由main函數(shù)讀入這?copy;參數(shù),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文件。

運(yùn)行:javaMy2輸出:Applicationhavenoargs!

運(yùn)行:javaMy2arg1arg2arg3輸出:arg1arg2arg3這說明,java里參數(shù)的傳遞是這樣的,命令行里類名后第一個參數(shù)放在args[0]里,第二個參數(shù)放在args[1]里,以此類推。

4建立窗口Java程序基本框架

Frame介紹在Java語言里,F(xiàn)rame類的功能是創(chuàng)建圖形用戶界面(GUI)的基本窗口。在典型瀏覽器里,F(xiàn)rame類是顯示GUI的父類。

類的層次結(jié)構(gòu)如下:java.lang.Objectjava.awt.Componentjava.awt.Containerjava.awt.Windowjava.awt.Frame

Frame是從沒有邊框和菜單條的空白窗口?copy;充來的。這種窗口主要用在彈出式窗口方式下。Frame給窗口一個邊框,一個布局和一個窗口條。

你可以通過創(chuàng)建自己的多個Frame來創(chuàng)建圖形用戶界面的應(yīng)用程序。我們已知道怎樣建立獨(dú)立的java應(yīng)用程序,那么怎樣將各種迷人的圖形結(jié)合在一塊呢?我們通過建立一個Frame來實(shí)現(xiàn)這個功能。Frame讓我們訪問窗口,和applet工作區(qū)有許多相同的地方。下面是一個小的應(yīng)用程序,它彈出一個框架并且在框架里顯示信息。(信息可以是命令行參數(shù),也可以是缺省的信息?copy;。如果你在窗口里點(diǎn)一下,程序退出。

基本框架程序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聯(lián)系起來l熟悉的函數(shù)paint()和mouseDown(),看起來有點(diǎn)眼熟。這?copy;函數(shù)與applet的函數(shù)一樣。實(shí)際上,一個frame包含各種GUI組件與applet的形式一樣。另一個熟悉的函數(shù)是start()。這個函數(shù)并不必要,因?yàn)槲覀儧]有覆蓋任何已存在的函數(shù)。但你想繼承applet編程的風(fēng)格,你還是可以使用start(),stop(),init()與destroy()等函數(shù)。

l新函數(shù)我們熟悉的函數(shù)start()調(diào)用了show()。show()函數(shù)是Window類的繼承,它顯示Fame及其所有組件。在mouseDown()函數(shù)里我們看到兩個函數(shù):hide()和dispose()。hide()只簡單地使Frame不可見。你可以在任何時候調(diào)用它來隱藏窗口。dispose()函數(shù)釋放由Frame占有的系統(tǒng)資源。只有在你不需要Frame時才調(diào)用它。

l構(gòu)造函數(shù)Memo例子還包含了一個新函數(shù)Memo()。其實(shí)這個類有兩個Memo()函數(shù)!任何與類名相同的函數(shù)都是構(gòu)造函數(shù)。它在創(chuàng)建一個新對象時被調(diào)用。你可以認(rèn)為它是一個對象的init()初始化函數(shù)。為什么需要兩個構(gòu)造函數(shù)呢?有了兩個構(gòu)造函數(shù),我們可以利用多態(tài)性的優(yōu)點(diǎn),有兩種方法創(chuàng)建一個新Memo對象。我們可以簡單的創(chuàng)建使用缺省信息的Memo對象:m=newMemo();或者,我們可以自己提?copy;信息:m=newMemo("Ourmessage");

Frame控制本程序的最后功能是在main()里建立并顯示frame。它由以下兩步實(shí)現(xiàn)://Step1m=newMemo();

//Step2m.start();第一步初始化memo對象。我們象操作其它對象一樣操作m。為顯示frame,我們需要調(diào)用show()。這在第二步里實(shí)現(xiàn)。另一個要注意的是程序的健壯性:我們基本的frame里沒有包含處理標(biāo)準(zhǔn)WINDOW_DESTROY消息的函數(shù)。這樣,你將不能在窗口的控制菜單里選中"Quit"或"Exit"。為了增加這個功能,你需要增加以下的處理程序:

publicbooleanhandleEvent(Evente){if(e.id==Event.WINDOW_DESTROY){dispose();System.exit(1);returntrue;}else{//Goaheadanddowhatwenormallywouldhavedonereturnsuper.handleEvent(e);}}

菜單圖形界面依靠菜單來指導(dǎo)用戶操作。設(shè)計獨(dú)立的Java應(yīng)用程序時,Java提?copy;創(chuàng)建和使用菜單的直接方法。象其它組件一樣,new將創(chuàng)建一個菜單:

MenuoptionMenu;optionsMenu=newMenu("Options");

菜單項(xiàng)一?copy;你創(chuàng)建了一個菜單,你可以使用add()來組建菜單項(xiàng):

optionsMenu.add(newMenuItem("Option1");optionsMenu.add(newMenuItem("Option2");

菜單事件當(dāng)你選中某個菜單項(xiàng)時,你創(chuàng)建此菜單項(xiàng)的字符?reg;將在事件中返回。你可以象測試按鈕選擇一樣測試菜單選擇:

publicbooleanaction(Evente,Objectarg){...if(e.targetinstanceofMenuItem){System.out.println((String)arg);}...}

其它菜單項(xiàng)除了上面描述的簡單菜單項(xiàng)外,你還可增加CheckBox菜單項(xiàng),分割線,以及子菜單。下面是一?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);

菜單條你創(chuàng)建好菜單后,你應(yīng)將?reg;放在應(yīng)用程序的菜單條上:mb=newMenubar();

mb.add(m);mb.add(optionsMenu);

然后你可為applet設(shè)置菜單條:setMenuBar(mb);

5獨(dú)立應(yīng)用程序例子

為了看一個更復(fù)雜的獨(dú)立的圖形界面應(yīng)用程序,下面有一個數(shù)字轉(zhuǎn)換的例子:

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應(yīng)用程序的運(yùn)行環(huán)境以及參數(shù)的傳遞”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI