1. 學習java要用什麼編程軟體
學習java編程必須下載一個jdk,這個是開發java語言的sun公司提供的java編程環境,沒有這個環境無法編寫和運行java程序,當然也就無法學習了。
Java是由Sun Microsystems公司推出的Java面向對象程序設計語言(以下簡稱Java語言)和Java平台的總稱。由James Gosling和同事們共同研發,並在1995年正式推出。Java最初被稱為Oak,是1991年為消費類電子產品的嵌入式晶元而設計的。1995年更名為Java,並重新設計用於開發Internet應用程序。用Java實現的HotJava瀏覽器(支持Java applet)顯示了Java的魅力:跨平台、動態Web、Internet計算。從此,Java被廣泛接受並推動了Web的迅速發展,常用的瀏覽器均支持Javaapplet。另一方面,Java技術也不斷更新。Java自面世後就非常流行,發展迅速,對C++語言形成有力沖擊。在全球雲計算和移動互聯網的產業環境下,Java更具備了顯著優勢和廣闊前景。2010年Oracle公司收購Sun Microsystems
2. java 怎麼編寫程序
為了在您的機器上配置起一個Java開發環境——您將使用一個「開發環境」來「開發」(編寫)程序——您需要完成以下這些步驟:
1.下載一個包含Java開發環境(編譯器和其他工具)的大文件。點擊「下載J2SE SDK」鏈接下載SDK(軟體開發工具包)軟體。網頁會顯示一個許可協議。點擊「接受」。選擇您的操作系統,然後將文件保存到下載目錄中。這是一個巨大的文件,用電話數據機下載需要好幾個小時。接下來的兩個文件也很大。
2.下載一個包含Java文檔的大文件。選擇操作系統後點擊SDK1.4.1文檔的鏈接。
3.如果您的機器上還沒有安裝WinZip(或可執行相同功能的程序),那麼您需要下載一個包含WinZip的大文件並安裝之。如果您的機器上沒有安裝某個的版本的WinZip或其他解壓縮軟體,下載WinZip的試用版。運行EXE文件安裝。很快我們將使用它來安裝文檔。
4.安裝Java開發環境。運行第一步下載的j2sdk-1_4_1-*.exe文件。他將自動解壓並安裝開發工具包。
5.安裝文檔。閱讀安裝說明文檔。它會要求您將文檔文件移至剛才開發工具包的安裝目錄。將文檔解壓縮,文件就會被安排到適當的位置。
6.調整環境變數。按照此頁的要求,您需要改變路徑變數。最簡單的辦法是打開一個MS-DOS窗口鍵入PATH看看當前的路徑變數是什麼,然後用記事本打開autoexec.bat按要求修改PATH環境變數。
7.全面測試。現在您應該可以打開另一個MS-DOS窗口並鍵入javac了。如果一切設置妥當,那麼您將看到屏幕將輸出兩行文字告訴您如何使用javac。這意味著一切已經准備就緒了。如果您看到「錯誤的命令或文件名」這條消息,則說明還沒有準備好。請重新閱讀安裝說明檢查哪裡出了問題。確定PATH被正確設置並可用。回頭重新閱讀上面的步驟,問題不解決不要輕易放棄。現在您已自豪地擁有一台能夠編譯Java程序的機器了。您已經准備好開始編寫軟體了!
順便指出,剛才您解壓縮的內容包括一個demo(演示)目錄,其中包含許多精緻的例子。所有的例子都可以立即執行,所以您不妨找到這個目錄試運行一下其中的某些例子。許多例子都會發聲,所以請打開揚聲器。要運行例子,找到名如example1.html的網頁文件並使用您常用的瀏覽器打開即可。
您的第一個程序將是小巧可愛的。它將建立一個繪圖區域並在其上繪制一條對角線。創建此程序您需要:
1.打開記事本鍵入(或復制粘貼)程序 。建立一個新目錄以保存程序。打開記事本(或其他可以創建TXT文件的文本編輯器)。將范常式序錄入或復制粘貼到記事本窗口中。切記:輸入程序的大小寫敏感。因此必須按照范常式序中字母的大小寫輸入。重審以上編程步驟。如果錄入內容和范常式序不是完全一致,則程序將無法正常運行。
2.保存程序 。將文件在第一步創建的路徑下保存,文件名為FirstApplet.java。文件名大小寫敏感。請確保字母「F」和「A」大寫,其他字母小寫,如前所示。
3.使用Java編譯器編譯程序生成一個Java程序 。
打開一個MS-DOS窗口。改變至包含FirstApplet.java的路徑下(cd),鍵入:
javac FirstApplet.java
記住大小寫敏感!或者編譯成功,這時屏幕不輸出任何信息,或者有錯誤發生。若沒有錯誤,則會在目錄里生成一個名為FirstApplet.class的文件與FirstApplet.java並列。
(請確保程序保存的文件名為FirstApplet.java而不是FirstApplet.java.txt。最簡單的辦法就是在MS-DOS窗口下鍵入dir然後查看文件名。若擴展名是.txt 則請重命名文件去掉此擴展名。也可以運行Windows資源管理器在「查看」菜單下點擊「選項」。確保「隱藏已注冊的MS-DOS文件擴展名」選項處於未選中狀態,然後在資源管理器中查看文件名。若需要則將文件改名。)
4.排除問題。若有問題產生則想辦法解決。將您的程序與上面的范常式序對比,使之完全相同。修改過程中不斷編譯程序,直到沒有錯誤發生。
5.建立一個HTML網頁「包含」剛創建的Java程序 。
創建一個HTML頁面來包含小程序。另開一個記事本窗口。錄入下面的內容:
將此文件存於同一目錄中,文件名為applet.htm。
1.運行Java程序 。
在您的MS-DOS窗口中鍵入:
appletviewer applet.htm
應該可以看見一條從左上角到右下角的對角線:(如上圖所示)
將小程序查看器的窗口拉大一些以查看整條對角線。您也可以將此HTML網頁裝載到任何現用的瀏覽器中,如Netscape Navigator或微軟IE,看到的結果是大致相同的。
使用Java語言編程就需要一個Java編譯器。下一節將指導您下載並安裝一個編譯器。一旦有了編譯器我們就可以開始學習編程了。下載和安裝過程將會持續幾個小時,大部分時間用來下載幾個很大的文件。您還需要有大約40兆位元組的空閑磁碟空間(開始前請確定有足夠的空間)。
這里是本節的示範程序:
import java.awt.Graphics;
public class FirstApplet extends java.applet.Applet
{
public void paint(Graphics g)
{
g.drawLine(0, 0, 200, 200);
}
}
3. 如何運行Applet程序
1、在記事本中新建一個文本文檔,在裡面寫入Applet程序代碼。也可以在Eclipse中寫入一個Applet小程序,並復制粘貼到記事本中,節省了編譯錯誤。保存文本文檔,更改文件名為Text.java,保存為java類型。
4. java軟體是怎麼做的
-軟體:數據+文檔+命令;
軟體開發:根據用戶的需求,分析建立相應的程序或者系統,滿足需求的過程
Java工作原理
由四方面組成:
(1)Java編程語言
(2)Java類文件格式
(3)Java虛擬機
(4)Java應用程序介面
當編輯並運行一個Java程序時,需要同時涉及到這四種方面。使用文字編輯軟體(例如記事本、寫字板、UltraEdit等)或集成開發環境(Eclipse、MyEclipse等)在Java源文件中定義不同的類 ,通過調用類(這些類實現了Java API)中的方法來訪問資源系統,把源文件編譯生成一種二進制中間碼,存儲在class文件中,然後再通過運行與操作系統平台環境相對應的Java虛擬機來運行class文件,執行編譯產生的位元組碼,調用class文件中實現的方法來滿足程序的Java API調用 。
5. 怎樣把Java Applet嵌入HTML
在HTML文件中加入Java Applet
1.編寫Java Applet小應用程序
首先你要找一個文字處理工具來編寫你的小應用程序,比方在Windows下 的小作家、記事本就可以。為了簡單,我們以一個能在屏幕上顯示「Hello World!」字樣的小應用程序為例,你也可以用一個你喜歡的其它小應用程序 來作,但不管是什麼小應用程序,編寫好存儲時必須用純文本格式。 // 程序名是HelloApplet . java import java . awt . Graphics; import java . applet. Applet; public class HelloApplet extends Applet { public void paint (Graphics g ) { g.drawString ("Hello World!", 50, 25); } }
2.編譯Java小應用程序
編寫並存儲好你的小應用程序後,接著就可以編譯它了。說到編譯,自然是使用Sun公司的Java開發工具JDK最好了,若你已連入WWW,JDK可以從Sun公司的網頁取到或從以下地址下載:http://java.sun.com/JDK-1.0/ installation.html。用戶在使用JDK時,要在路徑中增加 c:\java\bin, 並 要更新環境變數GLASSPATH, 關於這方面的內容請查看有關資料。有了JDK,編譯HelloApplet.java很簡單,對於Windows 95/NT (在DOS Shell下)用戶,你只要在命令行鍵入:javac HelloApplet.java編譯成功將產生一個HelloApplet.class的文件。
3.把小應用程序嵌入HTML文件
如前所述,Applet小應用程序是在網路? 器中執行的程序,它不能獨立運行,為了觀察小應用程序的結果,先編寫一個HTML文件,編寫HTML文件最好使用普通的文本編輯器。 為了在HTML文件中嵌入小應用程序,Sun公司在HTML語言規范中加入"applet"標簽,在這個標簽中,可以在「CODE=」後指定小應用程序的位元組碼文件的名字,在「WIDTH=」和「HEIGHT=」後分別指定小應用程序運行時所佔位置的寬度和高度(以象素為單位)。值得注意的是,在"APPLET"標簽中指定的寬度和高度一定要比小應用程序的繪圖或列印的位置大,否則你在屏幕上就不會看到它了。在"APPLET"標簽中還可以利用CODEBASE、ALIGN、HSPACE及VSPACE等其它屬性。
4.觀察小應用程序的執行結果
現在有了HTML文件,啟動瀏覽器。你可以先不必理會網路問題,即使瀏覽 器或網路連接軟體提示缺少網路連接,你也可以不必管它。運行瀏覽器後,找到標有Open Local, Open File或Open的菜單或按鈕,它能使你瀏覽本地的磁碟文件,Open File命令告訴瀏覽器從本地磁碟讀HTML文件,進行語法分析並顯示,就如同它是Web頁一樣。通過運用瀏覽器的Open Local命令,你可以在 自己的計算機上編寫測試你的HTML文件,從而看到小應用程序運行結果。
三、 把Java小應用程序連接到自己的網頁中
如果你的小應用程序運行結果同自己預期的一樣,你就可以把它鏈接到自 己的網頁中了,方法是在網頁中安排一個超鏈接指向HelloApplet.html。
6. java工作原理
作為一名Java使用者,掌握JVM的體系結構也是必須的。
說起Java,人們首先想到的是Java編程語言,然而事實上,Java是一種技術,它由四方面組成:Java編程語言、Java類文件格式、Java虛擬機和Java應用程序介面(Java API)。它們的關系如下圖所示:
運行期環境代表著Java平台,開發人員編寫Java代碼(.java文件),然後將之編譯成位元組碼(.class文件),再然後位元組碼被裝入內存,一旦位元組碼進入虛擬機,它就會被解釋器解釋執行,或者是被即時代碼發生器有選擇的轉換成機器碼執行。
Java平台由Java虛擬機和Java應用程序介面搭建,Java語言則是進入這個平台的通道,用Java語言編寫並編譯的程序可以運行在這個平台上。
在Java平台的結構中, 可以看出,Java虛擬機(JVM) 處在核心的位置,是程序與底層操作系統和硬體無關的關鍵。它的下方是移植介面,移植介面由兩部分組成:適配器和Java操作系統, 其中依賴於平台的部分稱為適配器;JVM 通過移植介面在具體的平台和操作系統上實現;在JVM 的上方是Java的基本類庫和擴展類庫以及它們的API, 利用Java API編寫的應用程序(application) 和小程序(Java applet) 可以在任何Java平台上運行而無需考慮底層平台, 就是因為有Java虛擬機(JVM)實現了程序與操作系統的分離,從而實現了Java 的平台無關性。
JVM在它的生存周期中有一個明確的任務,那就是運行Java程序,因此當Java程序啟動的時候,就產生JVM的一個實例;當程序運行結束的時候,該實例也跟著消失了。下面我們從JVM的體系結構和它的運行過程這兩個方面來對它進行比較深入的研究。
1、Java虛擬機的體系結構
·每個JVM都有兩種機制:
①類裝載子系統:裝載具有適合名稱的類或介面
②執行引擎:負責執行包含在已裝載的類或介面中的指令
·每個JVM都包含:
方法區、Java堆、Java棧、本地方法棧、指令計數器及其他隱含寄存器
對於JVM的學習,在我看來這么幾個部分最重要:
Java代碼編譯和執行的整個過程
JVM內存管理及垃圾回收機制
下面分別對這幾部分進行說明:
2、Java代碼編譯和執行的整個過程
也正如前面所說,Java代碼的編譯和執行的整個過程大概是:開發人員編寫Java代碼(.java文件),然後將之編譯成位元組碼(.class文件),再然後位元組碼被裝入內存,一旦位元組碼進入虛擬機,它就會被解釋器解釋執行,或者是被即時代碼發生器有選擇的轉換成機器碼執行。
(1)Java代碼編譯是由Java源碼編譯器來完成,也就是Java代碼到JVM位元組碼(.class文件)的過程。
(2)Java位元組碼的執行是由JVM執行引擎來完成。
Java代碼編譯和執行的整個過程包含了以下三個重要的機制:
·Java源碼編譯機制
·類載入機制
·類執行機制
(1)Java源碼編譯機制
Java 源碼編譯由以下三個過程組成:
①分析和輸入到符號表
②註解處理
③語義分析和生成class文件
最後生成的class文件由以下部分組成:
①結構信息:包括class文件格式版本號及各部分的數量與大小的信息
②元數據:對應於Java源碼中聲明與常量的信息。包含類/繼承的超類/實現的介面的聲明信息、域與方法聲明信息和常量池
③方法信息:對應Java源碼中語句和表達式對應的信息。包含位元組碼、異常處理器表、求值棧與局部變數區大小、求值棧的類型記錄、調試符號信息
(2)類載入機制
JVM的類載入是通過ClassLoader及其子類來完成的,類的層次關系和載入順序可以由下圖來描述:
①Bootstrap ClassLoader
負責載入$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++實現,不是ClassLoader子類
②Extension ClassLoader
負責載入java平台中擴展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目錄下的jar包
③App ClassLoader
負責記載classpath中指定的jar包及目錄中class
④Custom ClassLoader
屬於應用程序根據自身需要自定義的ClassLoader,如tomcat、jboss都會根據j2ee規范自行實現ClassLoader
載入過程中會先檢查類是否被已載入,檢查順序是自底向上,從Custom ClassLoader到BootStrap ClassLoader逐層檢查,只要某個classloader已載入就視為已載入此類,保證此類只所有ClassLoader載入一次。而載入的順序是自頂向下,也就是由上層來逐層嘗試載入此類。
(3)類執行機制
JVM是基於堆棧的虛擬機。JVM為每個新創建的線程都分配一個堆棧.也就是說,對於一個Java程序來說,它的運行就是通過對堆棧的操作來完成的。堆棧以幀為單位保存線程的狀態。JVM對堆棧只進行兩種操作:以幀為單位的壓棧和出棧操作。
JVM執行class位元組碼,線程創建後,都會產生程序計數器(PC)和棧(Stack),程序計數器存放下一條要執行的指令在方法內的偏移量,棧中存放一個個棧幀,每個棧幀對應著每個方法的每次調用,而棧幀又是有局部變數區和操作數棧兩部分組成,局部變數區用於存放方法中的局部變數和參數,操作數棧中用於存放方法執行過程中產生的中間結果。棧的結構如下圖所示:
3、JVM內存管理及垃圾回收機制
JVM內存結構分為:方法區(method),棧內存(stack),堆內存(heap),本地方法棧(java中的jni調用),結構圖如下所示:
(1)堆內存(heap)
所有通過new創建的對象的內存都在堆中分配,其大小可以通過-Xmx和-Xms來控制。
操作系統有一個記錄空閑內存地址的鏈表,當系統收到程序的申請時,會遍歷該鏈表,尋找第一個空間大於所申請空間的堆結點,然後將該結點從空閑結點鏈表中刪除,並將該結點的空間分配給程序,另外,對於大多數系統,會在這塊內存空間中的首地址處記錄本次分配的大小,這樣代碼中的delete語句才能正確的釋放本內存空間。但由於找到的堆結點的大小不一定正好等於申請的大小,系統會自動的將多餘的那部分重新放入空閑鏈表中。這時由new分配的內存,一般速度比較慢,而且容易產生內存碎片,不過用起來最方便。另外,在WINDOWS下,最好的方式是用VirtualAlloc分配內存,它不是在堆,也不是在棧,而是直接在進程的地址空間中保留一塊內存,雖然這種方法用起來最不方便,但是速度快,也是最靈活的。堆內存是向高地址擴展的數據結構,是不連續的內存區域。由於系統是用鏈表來存儲的空閑內存地址的,自然是不連續的,而鏈表的遍歷方向是由低地址向高地址。堆的大小受限於計算機系統中有效的虛擬內存。由此可見,堆獲得的空間比較靈活,也比較大。
(2)棧內存(stack)
在Windows下, 棧是向低地址擴展的數據結構,是一塊連續的內存區域。這句話的意思是棧頂的地址和棧的最大容量是系統預先規定好的,在WINDOWS下,棧的大小是固定的(是一個編譯時就確定的常數),如果申請的空間超過棧的剩餘空間時,將提示overflow。因此,能從棧獲得的空間較小。只要棧的剩餘空間大於所申請空間,系統將為程序提供內存,否則將報異常提示棧溢出。 由系統自動分配,速度較快。但程序員是無法控制的。
堆內存與棧內存需要說明:
基礎數據類型直接在棧空間分配,方法的形式參數,直接在棧空間分配,當方法調用完成後從棧空間回收。引用數據類型,需要用new來創建,既在棧空間分配一個地址空間,又在堆空間分配對象的類變數 。方法的引用參數,在棧空間分配一個地址空間,並指向堆空間的對象區,當方法調用完成後從棧空間回收。局部變數new出來時,在棧空間和堆空間中分配空間,當局部變數生命周期結束後,棧空間立刻被回收,堆空間區域等待GC回收。方法調用時傳入的literal參數,先在棧空間分配,在方法調用完成後從棧空間收回。字元串常量、static在DATA區域分配,this在堆空間分配。數組既在棧空間分配數組名稱,又在堆空間分配數組實際的大小。
如:
(3)本地方法棧(java中的jni調用)
用於支持native方法的執行,存儲了每個native方法調用的狀態。對於本地方法介面,實現JVM並不要求一定要有它的支持,甚至可以完全沒有。Sun公司實現Java本地介面(JNI)是出於可移植性的考慮,當然我們也可以設計出其它的本地介面來代替Sun公司的JNI。但是這些設計與實現是比較復雜的事情,需要確保垃圾回收器不會將那些正在被本地方法調用的對象釋放掉。
(4)方法區(method)
它保存方法代碼(編譯後的java代碼)和符號表。存放了要載入的類信息、靜態變數、final類型的常量、屬性和方法信息。JVM用持久代(Permanet Generation)來存放方法區,可通過-XX:PermSize和-XX:MaxPermSize來指定最小值和最大值。
垃圾回收機制
堆里聚集了所有由應用程序創建的對象,JVM也有對應的指令比如 new, newarray, anewarray和multianewarray,然並沒有向 C++ 的 delete,free 等釋放空間的指令,Java的所有釋放都由 GC 來做,GC除了做回收內存之外,另外一個重要的工作就是內存的壓縮,這個在其他的語言中也有類似的實現,相比 C++ 不僅好用,而且增加了安全性,當然她也有弊端,比如性能這個大問題。
上面對虛擬機的各個部分進行了比較詳細的說明,下面通過一個具體的例子來分析它的運行過程。
虛擬機通過調用某個指定類的方法main啟動,傳遞給main一個字元串數組參數,使指定的類被裝載,同時鏈接該類所使用的其它的類型,並且初始化它們。例如對於程序:
編譯後在命令行模式下鍵入: java HelloApp run virtual machine
將通過調用HelloApp的方法main來啟動java虛擬機,傳遞給main一個包含三個字元串"run"、"virtual"、"machine"的數組。現在我們略述虛擬機在執行HelloApp時可能採取的步驟。
開始試圖執行類HelloApp的main方法,發現該類並沒有被裝載,也就是說虛擬機當前不包含該類的二進制代表,於是虛擬機使用ClassLoader試圖尋找這樣的二進制代表。如果這個進程失敗,則拋出一個異常。類被裝載後同時在main方法被調用之前,必須對類HelloApp與其它類型進行鏈接然後初始化。鏈接包含三個階段:檢驗,准備和解析。檢驗檢查被裝載的主類的符號和語義,准備則創建類或介面的靜態域以及把這些域初始化為標準的默認值,解析負責檢查主類對其它類或介面的符號引用,在這一步它是可選的。類的初始化是對類中聲明的靜態初始化函數和靜態域的初始化構造方法的執行。一個類在初始化之前它的父類必須被初始化。