精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

JAVA教程之Java語言概述

開發 后端
本文介紹的是JAVA語言概述,適合初學者閱讀,希望對你有幫助。

下面是java語言的簡述。

1.1 java語言的發展史

1.1.1java語言在互聯網時代獲得巨大成功

大家想一想,在PC下用windows編寫的程序能夠不做修改就直接拿到UNIX系統上運行嗎?顯然是不可以的,因為程序的執行最終必須轉換成為計算機硬件的機器指令來執行,專門為某種計算機硬件和操作系統編寫的程序是不能夠直接放到另外的計算機硬件上執行的,至少要做移植工作。要想讓程序能夠在不同的計算機上能夠運行,就要求程序設計語言是能夠跨越各種軟件和硬件平臺的,而java滿足了這一需求。

1995年,美國Sun Microsystems公司正式向IT業界推出了java語言,該語言具有安全、跨平臺、面向對象、簡單、適用于網絡等顯著特點,當時以web為主要形式的互聯網正在迅猛發展,java語言的出現迅速引起所有程序員和軟件公司的極大關注,程序員們紛紛嘗試用java語言編寫網絡應用程序,并利用網絡把程序發布到世界各地進行運行。包括IBM、Oracle、微軟、Netscape、Apple、SGI等大公司紛紛與Sun Microsystems公司簽訂合同,授權使用java平臺技術。微軟公司總裁比爾蓋茨先生在經過研究后認為"java語言是長時間以來最卓越的程序設計語言"。目前,java語言已經成為最流行的網絡編程語言,截止到2001年中,全世界大約有310萬java程序員,許多大學紛紛開設java課程,java正逐步成為世界上程序員最多的編程語言。

在經歷了以大型機為代表的集中計算模式和以PC機為代表的分散計算模式之后,互聯網的出現使得計算模式進入了網絡計算時代。網絡計算模式的一個特點是計算機是異構的,即計算機的類型和操作系統是不一樣的,例如SUN工作站的硬件是SPARC體系,軟件是UNIX中的Solaris操作系統,而PC機的硬件是INTEL體系,操作系統是windows或者是Linux,因此相應的編程語言基本上只是適用于單機系統,例如COBOL、FORTRAN、C、C++等等;網絡計算模式的另一個特點是代碼可以通過網絡在各種計算機上進行遷移,這就迫切需要一種跨平臺的編程語言,使得用它編寫的程序能夠在網絡中的各種計算機上能夠正常運行,java就是在這種需求下應運而生的。正是因為java語言符合了互聯網時代的發展要求,才使它獲得了巨大的成功。

1.1.2 java語言的產生

任何事物的產生既有必然的原因也有偶然的因素,java語言的出現也驗證了這一點。1991年,美國Sun Microsystems公司的某個研究小組為了能夠在消費電子產品上開發應用程序,積極尋找合適的編程語言。消費電子產品種類繁多,包括PDA、機頂盒、手機等等,即使是同一類消費電子產品所采用的處理芯片和操作系統也不相同,也存在著跨平臺的問題。當時最流行的編程語言是C和C++語言,Sun公司的研究人員就考慮是否可以采用C++語言來編寫消費電子產品的應用程序,但是研究表明,對于消費電子產品而言C++語言過于復雜和龐大,并不適用,安全性也并不令人滿意。于是,Bill Joy先生領導的研究小組就著手設計和開發出一種語言,稱之為Oak。該語言采用了許多C語言的語法,提高了安全性,并且是面向對象的語言,但是Oak語言在商業上并未獲得成功。時間轉到了1995年,互聯網在世界上蓬勃發展,Sun公司發現Oak語言所具有的跨平臺、面向對象、安全性高等特點非常符合互聯網的需要,于是改進了該語言的設計,要達到如下幾個目標:

  • 創建一種面向對象的程序設計語言,而不是面向過程的語言;
  • 提供一個解釋執行的程序運行環境,是程序代碼獨立于平臺;
  • 吸收C和C++的優點,使程序員容易掌握;
  • 去掉C和C++中影響程序健壯性的部分,使程序更安全,例如指針、內存申請和釋放;
  • 實現多線程,使得程序能夠同時執行多個任務;
  • 提供動態下載程序代碼的機制;
  • 提供代碼校驗機制以保證安全性;

最終,Sun公司給該語言取名為java語言,造就了一代成功的編程語。

#p#

1.2 java的工作原理

1.2.1 java虛擬機(1)

java虛擬機是軟件模擬的計算機,可以在任何處理器上(無論是在計算機中還是在其它電子設備中)安全并且兼容的執行保存在.class文件中的字節碼。java虛擬機的"機器碼"保存在.class文件中,有時也可以稱之為字節碼文件。java程序的跨平臺主要是指字節碼文件可以在任何具有java虛擬機的計算機或者電子設備上運行,java虛擬機中的java解釋器負責將字節碼文件解釋成為特定的機器碼進行運行。java源程序需要通過編譯器編譯成為.class文件(字節碼文件),java程序的編譯和執行過程。

1.2.1 java虛擬機(2)

但是,java虛擬機的建立需要針對不同的軟硬件平臺做專門的實現,既要考慮處理器的型號,也要考慮操作系統的種類。目前在SPARC結構、X86結構、MIPS和PPC等嵌入式處理芯片上、在UNIX、Linux、windows和部分實時操作系統上都有java虛擬機的實現。

1.2.2 無用內存自動回收機制

在程序的執行過程中,部分內存在使用過后就處于廢棄狀態,如果不及時進行無用內存的回收,就會導致內存泄漏,進而導致系統崩潰。在C++語言中是由程序員進行內存回收的,程序員需要在編寫程序的時候把不再使用的對象內存釋放掉;但是這種人為的管理內存釋放的方法卻往往由于程序員的疏忽而致使內存無法回收,同時也增加了程序員的工作量。而在java運行環境中,始終存在著一個系統級的線程,專門跟蹤內存的使用情況,定期檢測出不再使用的內存,并進行自動回收,避免了內存的泄露,也減輕了程序員的工作量。

1.2.3 代碼安全性檢查機制

安全和方便總是相對矛盾的。java編程語言的出現使得客戶端機器可以方便的從網絡上下載java程序到本機上運行,但是如何保證該java程序不攜帶病毒或者不懷有其它險惡目的呢?如果java語言不能保證執行的安全性,那么它就不可能存活到今天。雖然有時候少數程序員會抱怨說applet連文件系統也不能訪問,但是正是各種安全措施的實行才確保了java語言的生存。

字節碼的執行需要經過三個步驟,首先由類裝載器(class loader)負責把類文件(.class文件)加載到java虛擬機中,在此過程需要檢驗該類文件是否符合類文件規范;其次字節碼校驗器(bytecode verifier)檢查該類文件的代碼中是否存在著某些非法操作,例如applet程序中寫本機文件系統的操作;如果字節碼校驗器檢驗通過,由java解釋器負責把該類文件解釋成為機器碼進行執行。java虛擬機采用的是"沙箱"運行模式,即把java程序的代碼和數據都限制在一定內存空間里執行,不允許程序訪問該內存空間外的內存,如果是applet程序,還不允許訪問客戶端機器的文件系統。

1.2.4 Java語言的特點

1. 簡單、面向對象和為人所熟悉

java的簡單首先體現在精簡的系統上,力圖用最小的系統實現足夠多的功能;對硬件的要求不高,在小型的計算機上便可以良好的運行。和所有的新一代的程序設計語言一樣,java也采用了面向對象技術并更加徹底,所有的java程序和applet程序均是對象,封裝性實現了模塊化和信息隱藏,繼承性實現了代碼的復用,用戶可以建立自己的類庫。而且java采用的是相對簡單的面向對象技術,去掉了運算符重載、多繼承的復雜概念,而采用了單一繼承、類強制轉換、多線程、引用(非指針)等方式。無用內存自動回收機制也使得程序員不必費心管理內存,是程序設計更加簡單,同時大大減少了出錯的可能。java語言采用了C語言中的大部分語法,熟悉C語言的程序員會發現java語言在語法上與C語言極其相似。

2. 魯棒并且安全

java語言在編譯及運行程序時,都要進行嚴格的檢查。作為一種強制類型語言,java在編譯和連接時都進行大量的類型檢查,防止不匹配問題的發生。如果引用一個非法類型、或執行一個非法類型操作,java將在解釋時指出該錯誤。在java程序中不能采用地址計算的方法通過指針訪問內存單元,大大減少了錯誤發生的可能性;而且java的數組并非用指針實現,這樣就可以在檢查中避免數組越界的發生。無用內存自動回收機制也增加了java的魯棒性。

作為網絡語言,java必須提供足夠的安全保障,并且要防止病毒的侵襲。java在運行應用程序時,嚴格檢查其訪問數據的權限,比如不允許網絡上的應用程序修改本地的數據。下載到用戶計算機中的字節代碼在其被執行前要經過一個核實工具,一旦字節代碼被核實,便由java解釋器來執行,該解釋器通過阻止對內存的直接訪問來進一步提高java的安全性。同時java極高的魯棒性也增強了java的安全性。

3. 結構中立并且可以移植

網絡上充滿了各種不同類型的機器和操作系統,為使java程序能在網絡的任何地方運行,java編譯器編譯生成了與體系結構無關的字節碼結構文件格式。任何種類的計算機,只有在其處理器和操作系統上有java運行時環境,字節碼文件就可以在該計算機上運行。即使是在單一系統的計算機上,結構中立也有非常大的作用。隨著處理器結構的不斷發展變化,程序員不得不編寫各種版本的程序以在不同的處理器上運行,這使得開發出能夠在所有平臺上工作的軟件集合是不可能的。而使用java將使同一版本的應用程序可以運行在所有的平臺上。

體系結構的中立也使得java系統具有可移植性。java運行時系統可以移植到不同的處理器和操作系統上,java的編譯器是由java語言實現的,解釋器是由java語言和標準C語言實現的,因此可以較為方便的進行移植工作。

4. 高性能

雖然java是解釋執行的,但它仍然具有非常高的性能,在一些特定的CPU上,java字節碼可以快速的轉換成為機器碼進行執行。而且java字節碼格式的設計就是針對機器碼的轉換,實際轉換時相當簡便,自動的寄存器分配與編譯器對字節碼的一些優化可使之生成高質量的代碼。隨著java虛擬機的改進和"即時編譯"(just in time)技術的出現使得java的執行速度有了更大的提高。

5. 解釋執行、多線程并且是動態的

如果你了解C語言和C++語言,可以參考下列java與C/C++語言的比較,如果不了解C語言和C++語言,可以忽略本部分知識。

a. 全局變量

java程序不能定義程序的全局變量,而類中的公共、靜態變量就相當于這個類的全局變量。這樣就使全局變量封裝在類中,保證了安全性,而在C/C++語言中,由于不加封裝的全局變量往往會由于使用不當而造成系統的崩潰。

b. 條件轉移指令

C/C++語言中用goto語句實現無條件跳轉,而java語言沒有goto語言,通過例外處理語句try、catch、finally來取代之,提高了程序的可讀性,也增強了程序的魯棒性。

c. 指針

指針是C/C++語言中最靈活,但也是最容易出錯的數據類型。用指針進行內存操作往往造成不可預知的錯誤,而且,通過指針對內存地址進行顯示類型轉換后,可以類的私有成員,破壞了安全性。在java中,程序員不能進行任何指針操作,同時java中的數組是通過類來實現的,很好的解決了數組越界這一C/C++語言中不做檢查的缺點。

d. 內存管理

在C語言中,程序員使用庫函數malloc()和free()來分配和釋放內存,C++語言中則是運算符new和delete。再次釋放已經釋放的內存塊或者釋放未被分配的內存塊,會造成系統的崩潰,而忘記釋放不再使用的內存塊也會逐漸耗盡系統資源。在java中,所有的數據結構都是對象,通過運算符new分配內存并得到對象的使用權。無用內存回收機制保證了系統資源的完整,避免了內存管理不周而引起的系統崩潰。

e. 數據類型的一致性

在C/C++語言中,不同的平臺上,編譯器對簡單的數據類型如int、float等分別分配不同的字節數。例如:int在IBM PC上為16位,在VAX-11上就為32位,導致了代碼數據的不可移植。在java中,對數據類型的位數分配總是固定的,而不管是在任何的計算機平臺上。因此就保證了java數據的平臺無關性和可移植性。

f. 類型轉換

在C/C++語言中,可以通過指針進行任意的類型轉換,不安全因素大大增加。而在java語言中系統要對對象的處理進行嚴格的相容性檢查,防止不安全的轉換。

g. 頭文件

在C/C++語言中使用頭文件聲明類的原型和全局變量及庫函數等,在大的系統中,維護這些頭文件是非常困難的。java不支持頭文件,類成員的類型和訪問權限都封裝在一個類中,運行時系統對訪問進行控制,防止非法的訪問。同時,java中用import語句與其它類進行通信,以便訪問其它類的對象。

h. 結構和聯合

C/C++語言中用結構和聯合來表示一定的數據結構,但是由于其成員均為公有的,安全性上存在問題。java不支持結構和聯合,通過類把數據結構及對該數據的操作都封裝在類里面。

i. 預處理

C/C++語言中有宏定義,而用宏定義實現的代碼往往影響程序的可讀性,而java不支持宏定義

為易于實現跨平臺性,java設計成為解釋執行,字節碼本身包含了許多編譯時生成的信息,使連接過程更加簡單。而多線程使應用程序可以同時進行不同的操作,處理不同的事件。在多線程機制中,不同的線程處理不同的任務,互不干涉,不會由于某一任務處于等待狀態而影響了其它任務的執行,這樣就可以容易的實現網絡上的實時交互操作。

java在執行過程中,可以動態的加載各種類庫,這一特點使之非常適合于網絡運行,同時也非常有利于軟件的開發,即使是更新類庫也不必重新編譯使用這一類庫的應用程序。

1.2.5 java平臺-不斷擴展的計算平臺

java不僅是編程語言,還是一個開發平臺,java技術給程序員提供了許多工具:編譯器、解釋器、文檔生成器和文件打包工具等等。同時java還是一個程序發布平臺,有兩種主要的"發布環境",首先java運行時環境(java runtime environment,簡稱JRE)包含了完整的類文件包,其次許多主要的瀏覽器都提供了java解釋器和運行時環境。目前Sun公司把java平臺劃分成J2EE、J2SE、J2ME三個平臺,針對不同的市場目標和設備進行定位。

J2EE是Java2 Enterprise Edition,主要目的是為企業計算提供一個應用服務器的運行和開發平臺。J2EE本身是一個開放的標準,任何軟件廠商都可以推出自己的符合J2EE標準的產品,使用戶可以有多種選擇。IBM、Oracle、BEA、HP等29家已經推出了自己的產品,其中尤以BEA公司的weglogic產品和IBM公司的websphare最為著名。

J2EE將逐步發展成為可以與微軟的.NET戰略相對抗的網絡計算平臺。J2SE是Java2 Standard Edition,主要目的是為臺式機和工作站提供一個開發和運行的平臺。我們在學習java的過程中,主要是采用J2SE來進行開發。J2ME是Java2 Micro Edition,主要是面向消費電子產品,為消費電子產品提供一個java的運行平臺,使得java程序能夠在手機、機頂盒、PDA等產品上運行。上述三個java平臺的關系

#p#

1.3 一切都是對象

1.3.1面向過程

面向對象的第一個原則是把數據和對該數據的操作都封裝在一個類中,在程序設計時要考慮多個對象及其相互間的關系。有些功能并不一定由一個程序段完全實現,可以讓其它對象來實現,在本例中就由類Max完成求最大值的功能。而面向對象的另外一個好處是實現代碼的重復使用,例如其它的程序中如果需要求最大值的功能,只需要通過類Max的對象就可以達到目的。但是如果象面向過程的代碼段那樣把求最大值的算法都實現在該代碼段中,則無法復用。

早期的編程語言如FORTRAN、C基本上都是面向過程的語言,其編程的主要思路專注于算法的實現。例如下面是一個面向過程的求正整數最大值的程序:

  1. int maxSoFar=0,price=1; //最大值maxSoFar的初始值為0,price是輸入的值  
  2. while(price>0){ //循環輸入price的值  
  3. if (price>maxSoFar) //輸入的值price大于最大值maxSoFar  
  4. maxSoFar=price; //則maxSoFar的值為price的值  
  5. String input=JoptionPane.showInputDialog("Enter the next price");   
  6. //繼續輸入price  
  7. price=Double.parseDouble(input);  //把字符串input轉換成整數price  
  8. }  
  9. System.out.println("The maximum is "+maxSoFar); //打印最大值maxSoFar  

該程序段主要實現了求最大值的算法,但是,如果考慮用面向對象的編程,可以是另外一種方式:

  1. Max max=new Max( );    //max是類Max的一個對象  
  2. while(price>0){   
  3.  max.updateMax(price); //對象max調用updateMax方法,更新最大值  
  4.  price=max.getPrice( ); //對象max調用getPrice獲得下一個price的值  
  5.  }  
  6. System.out.println("The maximum is "+max.getMax( ));//對象max調用getMax方法獲得最大值,并打印出來 

1.3.2 面向對象

純粹的面向對象程序設計方法是這樣的:

1.所有的東西都是對象。

可以將對象想象成為一種新型變量,它保存著數據,而且還可以對自身數據進行操作。例如類Max中保留著數據的最大值,同時還有方法updateMax根據新加入的price值產生最新的最大值,還有getMax方法返回數據的最大值。

2.程序是一大堆對象的組合。

通過消息傳遞,各對象知道自己應該做些什么。如果需要讓對象做些事情,則須向該對象"發送一條消息"。具體來說,可以將消息想象成為一個調用請求,它調用的是從屬于目標對象的一個方法。例如上面面向對象的程序段應該是屬于某個類的,比如說是屬于類Shopping,則Shopping中就包含了類Max的對象max,調用方法updateMax就相當于Shopping對象對max對象發出一條指令"updateMax",要求對象max重新計算最大值。

3.每個對象都有自己的存儲空間。

可容納其它對象,或者說通過封裝現有的對象,可以產生新型對象。因此,盡管對象的概念非常簡單,但是經過封裝以后卻可以在程序中達到任意高的復雜程度。

4.每個對象都屬于某個類。

根據語法,每個對象都是某個"類"的一個"實例"。一個類的最重要的的特征就是"能將什么消息發給它?",也就是類本身有哪些操作。例如max是類Max的實例。

#p#

1.4 構建java程序

1.4.1 第一個java application

java程序分為java application(java 應用程序)和java applet(java小應用程序)兩種。下面讓我們編寫一個java應用程序,它能夠利用來自java標準庫的System對象的多種方法,打印出與當前運行的系統有關的資料。其中"//"代表一種注釋方式,表示從這個符號開始到這行結束的所有內容都是注釋。在每個程序文件的開頭,如果這個文件的代碼中用到了系統所提供的額外的類,就必須放置一個import語句。說它是額外的是指一個特殊的類庫"java.lang"會自動導入到每個java文件

  1. //這是我們的第一個java application,該程序保存在文件Property.java中import java.util.*;
  2.  /*下面我們用到了Date和Properties這兩個類,是屬于java.util這個包的;*/  
  3. /*而System和Runtime這兩個類,是屬于  
  4. java.lang這個包的。*/ 
  5. public class Property { //程序員給這個類取名為Property  
  6. public static void main(String args[]){ //main是類的主方法  
  7. System.out.println(new Date( )); //在命令行下面打印出日期  
  8. Properties p=System.getProperties( ); //獲得系統的Properties對象p  
  9. p.list(System.out); //在命令行下打印出p中的各個系統變量的值  
  10. System.out.println("--- Memory Usage:"); /*打印一行字符串---Memory Usage*/ 
  11. Runtime rt=Runtime.getRuntime( ); //獲得系統的Runtime對象rt  
  12. System.out.println("Total Memory= "   
  13. + rt.totalMemory( ) //打印總內存大小  
  14. +" Free Memory = " 
  15. +rt.freeMemory( )); //打印空閑內存大小  
  16. }  
  17. }  

 

在java中,程序都是以類的方式組織的,java源文件都保存在以java為后綴的.java文件當中。每個可運行的程序都是一個類文件,或者稱之為字節碼文件,保存在.class文件中。而作為一個java application,類中必須包含主方法,程序的執行是從main方法開始的,方法頭的格式是確定不變的:

  1. public static void main(String args[]) 

 

其中關鍵字public意味著方法可以由外部世界調用。main方法的參數是一個字符串數組args,雖然在本程序中沒有用到,但是必須列出來。

程序的第一行非常有意思:

  1. System.out.println(new Date()); 

打印語句的參數是一個日期對象Date,而創建Date對象的目的就是把它的值發給println()語句。一旦這個語句執行完畢,Date對象就沒用了,而后"無用內存回收器"會將其收回。

第二行中調用了System.getProperties( )。從幫助文檔中可知,getProperties( )是System類的一個靜態方法(static 方法),由于它是"靜態"的,所以不必創建任何對象就可以調用該方法。在第三行,Properties對象有一個名為list( )的方法,它將自己的全部內容都發給一個PrintStream對象,該對象就是list()方法的參數。

第四行和第六行是典型的打印語句,其中第六行通過運算符"+"的重載來連接多個字符串對象,在java中只有當"+"運算符作用于字符串時在能夠進行重載。但是讓我們仔細觀察下述語句:

  1. System.out.println("Total Memory= "   
  2.  + rt.totalMemory( ) //打印總內存大小  
  3.  +" Free Memory = " 
  4.  +rt.freeMemory( )); //打印空閑內存大小 

 

其中,totalMemory( )和freeMemory( )返回的是數值,并非String對象。如果將一個字符串與一個數值相加,結果會如何?在這種情況下,編譯器會自動調用一個toString()方法,將該數值(int型或者float型)轉換成字符串。經過這樣處理以后,就可以用"+"進行字符串連接了。

main()的第五行通過調用Runtime的getRuntime()方法創建了一個Runtime對象,該對象中包含了內存等信息。

1.4.2 java程序的編輯

java程序的編輯可以使用任何一種文本編輯器,例如UltraEdit、Notepad、Wordpad甚至word,然后只要把編輯好的文件存成.java文件。當然也可以用一些集成開發環境,例如Borland公司的JBuilder,IBM公司的Visualage for Java,此外還有cafe、kawa等其它集成開發環境。

Sun公司為全世界的java程序員提供了一個免費的java程序開發包(Java Develop Kit,簡稱JDK),其中包括了java編譯器命令"javac",以及java執行命令"java",還有幫助文檔生成器命令"javadoc"等等。所有這些命令都可以在命令行下運行,例如我們要編譯上述java文件Property.java,如果是在windows中進行開發,就可以在"命令提示符"下進行編譯,在命令行中敲入"javac Property.java"。

1.4.3 java application的執行

當編譯結束以后,在java源文件中的每一個類都會生成相應的 .class 文件,例如上圖中就會生成一個Property.class文件,而java程序在執行時調用的是.class 文件。Java application的執行是在命令行下進行的,如果是在windows系統中,就可以"命令提示符"下敲入"java Propery"進行執行,該"java"命令會啟動java虛擬機,并讀入Property.class文件進行執行。

1.4.4 第一個java applet

java程序的另一種形式是java applet,applet沒有main()方法,它必須嵌在超文本文件中,在瀏覽器中進行運行。右面這個程序將在瀏覽器中顯示一行字符串.

  1. //這是我們的第一個java applet,該程序保存在文件HelloEducation.java中  
  2.  import java.awt.Graphics; //在進行顯示輸出時,需要用到類Graphics的對象;  
  3.  import java.applet.Applet; //Applet類是所有的java applet的父類;  
  4.  
  5.  public class HelloEducation extends Applet {   
  6. //程序員給這個類取名為HelloEducation  
  7. //所有的applet程序都是Applet類的子類  
  8.  public String s;  
  9.  public void init() {  //  
  10.  s=new String("Welcome to Tongfang Education");   
  11. //生成一個字符串對象  
  12.  }  
  13.  public void paint(Graphics g){  
  14.  g.drawString(s,25,25);   
  15.  //在瀏覽器中坐標為(25,25)的位置顯示字符串s  
  16.  }  
  17.  } 

applet程序是從方法init( )開始執行的,在該方法中完成了對字符串s的初始化工作,而顯示功能是在方法paint( )中執行的。paint( )方法是類Applet的一個成員方法,其參數是圖形對象Graphics g,通過調用對象g的drawString( )方法就可以顯示輸出。

1.4.5 java applet的執行

java applet程序也是一個類,其編譯方式與java application完全一樣,HelloEducation.java程序經過編譯以后就生成了HelloEducation.class文件。java applet的執行方式與java application完全不同,java applet程序必須嵌入到html文件中才能夠執行,因此必須編寫相應的html文件。下面為HelloEducaiton.html文件的內容:

  1. <html>  
  2. <applet code=HelloEducation.class width=250 height=250>  
  3. </applet>  
  4. </html> 

 

然后可以通過JDK所提供的命令"appletviewer",在命令行下面執行java applet程序。如果是在windows操作系統中,就可以在"命令提示符"下敲入"appletviewer HelloEducation.html"。

此時系統會彈出另外一個窗口運行該applet程序,applet還可以采用另外一種方式運行,那就是直接在瀏覽器中打開HelloEducation.html程序。在主流的瀏覽器如IE、Netscape中都包含有java虛擬機,負責解釋執行java applet程序。

#p#

1.5 java程序規范

1.5.1 java源程序結構

一個完整的java源程序應該包括下列部分:

  • package語句; //該部分至多只有一句,必須放在源程序的第一句
  • import語句; /*該部分可以有若干import語句或者沒有,必須放在所有的類定義之前*/
  • public classDefinition; //公共類定義部分,至多只有一個公共類的定義
  •    //java語言規定該java源程序的文件名必須與該公共類名完全一致
  • classDefinition; //類定義部分,可以有0個或者多個類定義
  • interfaceDefinition; //接口定義部分,可以有0個或者多個接口定義

例如一個java源程序可以是如下結構,該源程序命名為HelloWorldApp.java:

  1. package javawork.helloworld; /*把編譯生成的所有.class文件放到包  
  2. javawork.helloworld中*/ 
  3.  import java.awt.*;  //告訴編譯器本程序中用到系統的AWT包  
  4.  import javawork.newcentury; /*告訴編譯器本程序中用到用戶自定義  
  5. 的包javawork.newcentury*/ 
  6.  public class HelloWorldApp{......} /*公共類HelloWorldApp的定義,  
  7.   名字與文件名相同*/ 
  8.  class TheFirstClass{......} //第一個普通類TheFirstClass的定義  
  9.  class TheSecondClass{......} //第二個普通類TheSecondClass的定義  
  10. ...... //其它普通類的定義  
  11.  interface TheFirstInterface{......} /*第一個接口  
  12. TheFirstInterface的定義*/ 
  13.  ...... //其它接口定義 

 

package語句:由于java編譯器為每個類生成一個字節碼文件,且文件名與類名相同,因此同名的類有可能發生沖突。為了解決這一問題,java提供包來管理類名空間,包實際提供了一種命名機制和可見性限制機制。而在java的系統類庫中,把功能相似的類放到一個包(package)中,例如所有的圖形界面的類都放在java.awt這個包中,與網絡功能有關的類都放到java.net這個包中。

用戶自己編寫的類(指.class文件)也應該按照功能放在由程序員自己命名的相應的包中,例如上例中的javawork.helloworld就是一個包。包在實際的實現過程中是與文件系統相對應的,例如javawork.helloworld所對應的目錄是path\javawork\helloworld,而path是在編譯該源程序時指定的。

比如在命令行中編譯上述HelloWorldApp.java文件時,可以在命令行中敲入"javac -d f:\javaproject HelloWorldApp.java",則編譯生成的HelloWorldApp.class文件將放在目錄f:\javaproject\javawork\helloworld\目錄下面,此時f:\javaprojcet相當于path。但是如果在編譯時不指定path,則生成的.class文件將放在編譯時命令行所在的當前目錄下面。

比如在命令行目錄f:\javaproject下敲入編譯命令"javac HelloWorldApp.java",則生成的HelloWorldApp.class文件將放在目錄f:\javaproject下面,此時的package語句相當于沒起作用。

但是,如果程序中包含了package語句,則在運行時就必須包含包名。例如,HelloWorldApp.java程序的第一行語句是:package p1.p2;編譯的時候在命令行下輸入"javac -d path HelloWorldApp.java",則HelloWorldApp.class將放在目錄path\p1\p2的下面,這時候運行該程序時有兩種方式:

第一種:在命令行下的path目錄下輸入字符"java p1.p2.HelloWorldApp"。

第二種:在環境變量classpath中加入目錄path,則運行時在任何目錄下輸入"java p1.p2.HelloWorldApp"即可。

import語句:如果在源程序中用到了除java.lang這個包以外的類,無論是系統的類還是自己定義的包中的類,都必須用import語句標識,以通知編譯器在編譯時找到相應的類文件。

例如上例中的java.awt是系統的包,而javawork.newcentury是用戶自定義的包。比如程序中用到了類Button,而Button是屬于包java.awt的,在編譯時編譯器將從目錄classpath\java\awt中去尋找類Button,classpath是事先設定的環境變量,比如可以設為:classpath=.;d:\jdk1.3\lib\。 classpath也可以稱為類路徑,需要提醒大家注意的是,在classpath中往往包含多個路徑,用分號隔開。例如classpath=.;d:\jdk1.3\lib\中的第一個分號之前的路徑是一個點,表示當前目錄,分號后面的路徑是d:\jdk1.3\lib\,表示系統的標準類庫目錄。

在編譯過程中尋找類時,先從環境變量classpath的第一個目錄開始往下找,比如先從當前目錄往下找java.awt中的類Button時,編譯器找不著,然后從環境變量classpath的第二個目錄開始往下找,就是從系統的標準類庫目錄d:\jdk1.3\lib開始往下找java.awt的Button這個類,最后就找到了。如果要從一個包中引入多個類則在包名后加上".*"表示。

如果程序中用到了用戶自己定義的包中的類,假如在上面程序中要用到javawork.newcentury包中的類HelloWorldApp,而包javawork.newcentury所對應的目錄是f:\javaproject\javawork\newcentury,classpath仍舊是classpath=.;d:\jdk1.3\lib\,則編譯器在編譯時將首先從當前目錄尋找包javawork.newcentury,結果是沒有找到;然后又從環境變量classpath的第二個目錄d:\jdk1.3\lib\開始往下找,但是仍然沒有找到。原因在于包javawork.newcentury是放在目錄f:\javaproject下面。

因此,需要重新設定環境變量classpath,設為classpath=.;d:\jdk1.3\lib\;f:\javaproject\ 。所以編譯器從f:\javaproject開始找包javawork.newcentury就可以找到。

源文件的命名規則:如果在源程序中包含有公共類的定義,則該源文件名必須與該公共類的名字完全一致,字母的大小寫都必須一樣。這是java語言的一個嚴格的規定,如果不遵守,在編譯時就會出錯。因此,在一個java源程序中至多只能有一個公共類的定義。如果源程序中不包含公共類的定義,則該文件名可以任意取名。如果在一個源程序中有多個類定義,則在編譯時將為每個類生成一個.class文件。

1.5.2 java編程規范

軟件開發是一個集體協作的過程,程序員之間的代碼是經常要進行交換閱讀的,因此,java源程序有一些約定成俗的命名規定,主要目的是為了提高java程序的可讀性。

包名:包名是全小寫的名詞,中間可以由點分隔開,例如:java.awt.event;

類名:首字母大寫,通常由多個單詞合成一個類名,要求每個單詞的首字母也要大寫,例如class HelloWorldApp;
 
接口名:命名規則與類名相同,例如interface Collection;

方法名:往往由多個單詞合成,第一個單詞通常為動詞,首字母小寫,中間的每個單詞的首字母都要大寫,例如:balanceAccount, isButtonPressed;

變量名:全小寫,一般為名詞,例如:length;

常量名:基本數據類型的常量名為全大寫,如果是由多個單詞構成,可以用下劃線隔開,例如:int YEAR, int WEEK_OF_MONTH;如果是對象類型的常量,則是大小寫混合,由大寫字母把單詞隔開。

1.5.3 java幫助文檔

java中所有類庫的介紹都保存在java幫助文檔中,程序員在編程過程中,必須查閱該幫助文檔,了解系統提供的類的功能、成員方法、成員變量等等信息以后,才能夠更好的編程。同時,java開發工具包(JDK)提供了
"java"、"javac"、"javadoc"、
"appletviewer"等命令,在java幫助文檔中也對此進行了詳細的介紹。java幫助文檔是以HTML文件的形式組織,通常是安裝在JDK目錄下的docs子目錄中的index.html文件,所以用瀏覽器就可以進行查閱。例如JDK是安裝在D:\jdk1.3目錄下面,則用瀏覽器打開D:\jdk1.3\docs\index.html文件,就可以看到圖1_5_1所示的幫助文檔。

如果希望查閱JDK的命令,則可以選擇"Tool Documentation",

此時瀏覽器就會把java、javac、javadoc、appletviewer等命令列出來,

但是大多時時候,我們需要查閱的是類庫的文檔,因此需要在"D:\jdk1.3\docs\index.html"文件中選擇"Java 2 Platform API Specification。然后就進入了詳細的類庫介紹。

1.5.4 java注釋

單行注釋:從"//"開始到本行結束的內容都是注釋,例如:

//這是一行單行注釋

//則是另一行單行注釋

多行注釋:在"/*"和"*/"之間的所有內容都是注釋,例如:

/*這是一段注釋分布在多行之中*/

文檔注釋:在注釋方面java提供一種C/C++所不具有的文檔注釋方式。其核心思想是當程序員編完程序以后,可以通過JDK提供的javadoc命令,生成所編程序的API文檔,而該文檔中的內容主要就是從文檔注釋中提取的。該API文檔以HTML文件的形式出現,與java幫助文檔的風格與形式完全一致。凡是在"/**"和"*/"之間的內容都是文檔注釋。例如下面的DocTest.java文件:

  1. /** 這是一個文檔注釋的例子,主要介紹下面這個類 */ 
  2. public class DocTest{  
  3. /** 變量注釋,下面這個變量主要是充當整數計數 */ 
  4. public int i;  
  5. /** 方法注釋,下面這個方法的主要功能是計數 */ 
  6. public void count( ) {}  
  7. }  

通過在命令行下面運行"javadoc -d . DocTest.java",就生成了介紹類DocTest的index.html文件,用瀏覽器瀏覽結果,注意到DocTest.java文件中的文檔注釋的內容都出現在該index.html文件中。

#p#

1.6 建立java開發環境

1.6.1 安裝Java Develop Kit(JDK)

Sun公司為所有的java程序員提供了一套免費的java開發和運行環境,取名為Java2 SDK,可以從http://sun.com上進行下載,也可以從同方教育網站上下載。但是最新的消息和版本必須從Sun的網站上才能夠得到。安裝的時候可以選擇安裝到任意的硬盤驅動器上,例如安裝到D:\jdk1.3目錄下。通常在JDK目錄下有bin、demo、lib、jre等子目錄,其中bin目錄保存了javac、java、appletviewer等命令文件,demo目錄保存了許多java的例子,lib目錄保存了java的類庫文件,jre保存的是java的運行時環境。

1.6.2 安裝java幫助文檔

由于JDK的安裝程序中并不包含幫助文檔,因此也必須從Sun的網站上下載進行安裝。通常安裝在JDK所在目錄的docs子目錄下面。用瀏覽器打開docs子目錄下的index.html文件就可以閱讀所有的幫助文檔。

1.6.3 配置類路徑

在安裝完JDK之后,必須配置類路徑classpath和環境變量path,JDK才能夠正常運行。如果是在windows98中運行,則在
C:\autoexec.bat文件的末尾添加下列語句:

  1. classpath= .;d:\jdk1.3\lib;  
  2. path=%path%;d:\jdk1.3\bin; 

如果是在windows2000中,則需要用右鍵單擊桌面上"我的電腦",選擇"屬性",則彈出一個名為"系統特性"的窗口,選擇"高級",然后選擇"環境變量",在"環境變量"窗口中編輯classpath和path。

總結

java語言的產生起源于Sun Microsystems公司為消費電子產品上應用程序的開發尋找一門編程語言的過程中,而隨著互聯網時代的到來,原有的Oak軟件就順理成章的改造成java語言推向了市場,其跨平臺、面相對象、安全等特點使其得到廣泛的應用。通過在不同的軟硬件上實現的java虛擬機,java的字節碼文件就可以跨平臺的進行運行,無用內存自動回收器也給程序員帶來了極大的方便。

java程序以兩種方式進行運行,一種是通過java虛擬機進行直接運行的java application,另一種是通過瀏覽器進行運行的java applet,但是無論是何種方式,java都是一門純粹的面向對象的編程語言。面向對象編程的思路認為程序都是對象的組合,因此要克服面向過程編程的思路,直接按照對象和類的思想去組織程序,面向對象所具有的封裝性、繼承性、多態性等特點使其具有強大的生命力。

Sun公司為全世界java開發人員提供了一套免費的軟件開發包Java2 SDK,也稱為JDK,它不僅是java的開發平臺,還是java的運行平臺。java源程序存放在.java文件中,可以通過任意一個文本編輯器編輯產生,源程序經過"javac"命令編譯過后,就生成了相應的.class文件,而用"java"命令就可以運行.class文件。

作為面向對象編程人員來說,大體可以分為兩種:類創建者和應用程序員,應用程序員是類的使用者。所以對程序的可讀性和API幫助文檔就有要求,java語言本身有一套約定成俗的編程規范,同時程序員首先要學會閱讀系統API幫助文檔,還要學會生成自己編寫的程序的API幫助文檔。

責任編輯:于鐵 來源: 清華大學計算機系&清華同方股份有限公司
相關推薦

2011-07-21 10:17:53

java

2009-09-04 08:51:33

Java語言

2009-07-22 17:45:35

ASP.NET教程

2011-06-30 10:36:22

JSF

2011-06-30 10:49:27

2009-06-12 15:01:48

Java數組Java教程

2009-10-21 14:49:46

VB入門教程

2009-06-12 14:18:20

構造方法Java語言Java教程

2021-02-20 06:13:18

C 語言C++

2021-02-21 12:09:32

C 語言基礎語法

2009-06-22 09:23:18

事件監聽器

2009-07-17 09:44:40

iBATIS教程

2021-02-08 20:25:12

C 語言C++Linux

2021-02-16 10:57:34

C++ C 語言windows

2021-02-11 08:25:17

C 語言C++ 基礎

2009-06-12 13:37:47

訪問權限修飾符Java教程

2009-06-12 14:46:05

static修飾符Java教程

2022-01-12 18:20:36

GoJava開發

2011-03-21 17:06:31

QtmediahubQMLQt

2010-07-13 15:43:57

Perl語言
點贊
收藏

51CTO技術棧公眾號

色综合天天天天做夜夜夜夜做| 韩国av一区二区三区在线观看| 日韩成人av网| 可以免费在线看黄的网站| 天堂а√在线资源在线| 国产精品一区二区久久不卡| 91av视频在线| jizzjizzjizz国产| 国产精品一线| 精品视频在线视频| 国产极品尤物在线| 久操视频在线播放| 久久综合九色综合97婷婷| 91九色视频在线| www.av视频在线观看| 成人亚洲一区| 亚洲成人久久久久| 中文字幕亚洲影院| 韩国成人动漫| 亚洲高清三级视频| 一区二区三区四区视频在线观看 | 99在线精品视频在线观看| 中文字幕亚洲精品| 久久久精品人妻无码专区| 日本一区二区三区视频在线看| 91久久精品网| 国产毛片视频网站| 午夜成年人在线免费视频| 国产清纯白嫩初高生在线观看91| 国产一区二区免费电影| 伊人网av在线| 性色一区二区三区| 97人人做人人爱| 911国产在线| 精品久久精品| 亚洲天堂男人的天堂| 五月天丁香社区| 日韩影片在线观看| 日韩视频一区二区| 日本亚洲一区二区三区| 亚洲免费资源| 欧美精品高清视频| av在线免费看片| 九九热这里有精品| 欧美亚州韩日在线看免费版国语版| 漂亮人妻被中出中文字幕| www视频在线观看| 午夜私人影院久久久久| 国产一级做a爰片久久毛片男| 国产原创在线观看| 亚洲三级在线看| 亚洲 欧洲 日韩| 免费a级毛片在线播放| 中文字幕日韩av资源站| 色一情一乱一伦一区二区三区丨| 国产精品一区在线看| 久久中文娱乐网| 欧洲精品国产| av在线免费一区| 日本一二三不卡| 一本一道久久a久久精品综合| 在线日本视频| 国产精品人成在线观看免费 | 久久久久亚洲av无码专区桃色| 欧美freesex8一10精品| 亚洲精品在线91| 精品国产成人亚洲午夜福利| 成人在线免费观看网站| 日韩视频一区在线| 美女毛片在线观看| 国产欧美丝祙| 国产suv精品一区二区| 制服丝袜在线一区| 国产最新精品免费| 国产亚洲精品美女久久久m| 欧美婷婷久久五月精品三区| 国产三级一区二区三区| 国产精品99久久久久久大便| 国产丝袜精品丝袜| 一本久久综合亚洲鲁鲁五月天| 午夜免费福利在线| 精品欧美视频| 亚洲电影成人av99爱色| 色一情一交一乱一区二区三区 | 啊v视频在线一区二区三区 | 91在线短视频| 欧美套图亚洲一区| 亚洲视频 欧洲视频| 亚洲熟妇无码一区二区三区导航| se01亚洲视频| 日韩精品中文字幕一区二区三区 | 亚洲精品久久久久久久久久| 91色九色蝌蚪| av电影一区二区三区| av免费不卡国产观看| 欧美丝袜丝交足nylons| 少妇熟女视频一区二区三区| 视频国产一区| 欧美黑人国产人伦爽爽爽| 亚洲s码欧洲m码国产av| 国内成+人亚洲+欧美+综合在线| 狠狠色噜噜狠狠色综合久| 自拍视频在线免费观看| 午夜精品久久一牛影视| 亚洲欧美在线精品| 色爱综合av| 欧美另类交人妖| 在线免费观看av网址| 国产成人av电影免费在线观看| 日本一区精品| 俺来俺也去www色在线观看| 欧美日韩一区二区欧美激情 | 女同另类激情重口| 欧美成人精品三级在线观看| 销魂美女一区二区| av亚洲精华国产精华精华| 性欧美18一19内谢| 外国电影一区二区| 日韩电影第一页| 久久亚洲AV无码| 精品一区二区三区在线观看| 欧美午夜精品久久久久久蜜| av中文资源在线资源免费观看| 欧美日韩mp4| 少妇人妻好深好紧精品无码| 亚洲久久一区| 国产精品国模大尺度私拍| 精品视频在线一区二区| 欧美日韩一级二级三级| 舐め犯し波多野结衣在线观看| 亚洲精选在线| 国产伦精品一区二区三区四区免费 | 国产欧美日韩另类| 国产ts人妖一区二区| 蜜臀在线免费观看| 4438五月综合| 久久精品国产电影| 国产精品国产av| 亚洲欧洲精品一区二区三区不卡 | 国产成人aaaa| 亚洲国产一二三精品无码| 91麻豆精品国产综合久久久| 国产一区二区三区网站| 丁香社区五月天| 久久精品一区二区三区不卡| www.亚洲天堂网| 色综合综合色| 国产精品久久久999| 国产精品一区二区婷婷| 欧美午夜理伦三级在线观看| 91精品久久久久久久久久久久| 久久精品国语| 色播亚洲视频在线观看| 福利一区在线| 精品国产欧美一区二区三区成人| 国产又大又粗又硬| 亚洲精品国产第一综合99久久| 中文字幕av一区二区三区人妻少妇| 欧美在线免费| 国产精品日韩二区| 天堂资源在线| 亚洲免费小视频| 在线观看你懂的网站| 国产日韩欧美不卡| 国产一区二区在线观看免费视频| 亚洲精品一二三区区别| 国产精品免费区二区三区观看| 国产精品一区hongkong| 日韩理论片久久| 中文字幕有码视频| 亚洲免费视频中文字幕| 国产又粗又猛又色| 久久99伊人| 伊人情人网综合| 日韩视频1区| 欧美一区第一页| 97超碰国产一区二区三区| 91精品国产欧美一区二区成人| av成人免费网站| bt欧美亚洲午夜电影天堂| 欧美日韩在线不卡视频| 国产成人短视频在线观看| 2019精品视频| 日本成人一区| 欧美丰满嫩嫩电影| 国产精品suv一区二区| 久久精品在线免费观看| 成人在线短视频| 欧美一级网站| 福利网在线观看| 欧美三级午夜理伦三级在线观看 | 成人一对一视频| 成人羞羞网站| 国内精品**久久毛片app| 99久久精品一区二区成人| 久久久久亚洲精品国产| 成人免费在线电影| 精品国产乱子伦一区| 国产91av在线播放| 亚洲一区二区精品视频| 国产精品成人在线视频| 成人av综合在线| 激情黄色小视频| 一本综合久久| 热久久最新地址| 国产探花一区| 久草精品电影| 精品网站999| 国产精品大片wwwwww| 日本在线视频www鲁啊鲁| 色系列之999| 男女污污视频在线观看| 欧美刺激脚交jootjob| 久久精品国产亚洲av麻豆蜜芽| 亚洲国产va精品久久久不卡综合| 99国产精品无码| www激情久久| 国产麻豆剧传媒精品国产av| 精品亚洲porn| 538在线视频观看| 国产精品一页| 免费看欧美黑人毛片| 香蕉视频官网在线观看日本一区二区| 久久青青草综合| 哺乳挤奶一区二区三区免费看| 国产又爽又黄的激情精品视频| 波多野结衣亚洲| 2019中文字幕在线| brazzers在线观看| 欧美疯狂性受xxxxx另类| 天天影视久久综合| 中文字幕精品www乱入免费视频| 深夜福利视频在线观看| 亚洲福利视频网站| 六月丁香色婷婷| 日韩免费视频一区| 国产毛片毛片毛片毛片| 欧美久久久久久久久| 91 中文字幕| 欧美精品久久99| 97人人爽人人爽人人爽| 欧美猛男超大videosgay| 伊人网免费视频| 欧美三级电影网站| 亚洲视频久久久| 欧美日韩一区小说| 97超碰人人草| 欧美一级黄色大片| 午夜精品久久久久久久99热黄桃| 日韩欧美成人激情| www.久久久久久久久久| 精品国产乱码久久久久久久久| 精品人妻一区二区三区三区四区| 日韩视频免费观看高清完整版| 国产视频第一页| 欧美tickling网站挠脚心| 不卡视频在线播放| 亚洲第一区中文99精品| 亚洲欧美日韩免费| 亚洲欧美中文在线视频| 成年人视频在线观看免费| 在线观看中文字幕亚洲| 老司机在线看片网av| 欧美大码xxxx| 麻豆视频在线看| 国产精品海角社区在线观看| 精品亚洲a∨| 国产女人水真多18毛片18精品| 久久人人爽人人爽人人片av不| 久久久福利视频| 成人午夜国产| www.99riav| 国产毛片久久| 色噜噜狠狠一区二区| 国产精品资源网| 黄色性生活一级片| 欧美国产日韩a欧美在线观看| 日韩一区二区不卡视频| 亚洲午夜激情av| 无码人妻丰满熟妇区五十路 | 99久久精品费精品国产风间由美| 国产精品啪啪啪视频| 国产欧美精品| 成人黄色一级大片| 99精品1区2区| 天堂а√在线中文在线鲁大师| 亚洲mv在线观看| 中文在线免费看视频| 欧美mv日韩mv国产| 成人资源www网在线最新版| 欧美成人剧情片在线观看| 天堂av中文在线观看| 91精品久久久久久| 清纯唯美亚洲经典中文字幕| 亚洲乱码一区二区三区| 亚洲激情网站| 国产免费中文字幕| 91日韩精品一区| 放荡的美妇在线播放| 色成人在线视频| www.日本在线观看| 影音先锋日韩有码| segui88久久综合9999| 成人夜晚看av| 中文字幕亚洲影视| 成人国产在线看| 麻豆精品国产传媒mv男同| 中文字幕5566| 一区二区不卡在线视频 午夜欧美不卡在 | 国产黄在线看| 久久久免费精品| 激情综合婷婷| 亚洲精品高清视频| 久久xxxx精品视频| 亚洲色图欧美日韩| 一区二区三区四区av| 伊人网av在线| 国产香蕉一区二区三区在线视频| 黄色视屏在线免费观看| 超碰国产精品久久国产精品99| 波多野结衣在线观看一区二区三区| 日韩中字在线观看| 国产大陆a不卡| 91传媒免费观看| 欧美少妇性性性| 伦理片一区二区三区| 91av在线看| 极品国产人妖chinesets亚洲人妖| 99久久久无码国产精品性色戒| 久久综合综合久久综合| 超薄肉色丝袜一二三| 日本久久一区二区| 日本天堂在线| 97视频免费观看| 日本亚洲不卡| 五十路熟女丰满大屁股| 成人18视频在线播放| 免费中文字幕在线观看| 日韩午夜精品电影| 最新日本在线观看| 亚洲综合大片69999| 五月天久久777| 91精品国产三级| 亚洲人成网站色在线观看| 一区二区日韩在线观看| 色偷偷av一区二区三区乱| 热久久久久久| 中文字幕人成一区| 国产在线精品免费| 放荡的美妇在线播放| 欧美哺乳videos| 91资源在线观看| 久99久视频| 日本亚洲最大的色成网站www| 日韩av片在线| 在线播放欧美女士性生活| 老司机午夜在线视频| 超碰97在线人人| av不卡免费看| 国产精品密蕾丝袜| 欧美色图一区二区三区| 成年人黄视频在线观看| 91在线直播亚洲| 狠狠色综合网| 欧美性xxxx图片| 欧美视频中文字幕| 日本aa在线| 久久国产精品久久精品国产| 日本中文一区二区三区| 黑人操日本美女| 精品国产乱码久久久久久久久| 小草在线视频免费播放| 亚洲一区二区三区免费看| 国产一区999| 日本天堂网在线观看| 国产亚洲精品久久久| 在线免费成人| 91丨porny丨探花| 日本一区二区在线不卡| 精品人妻一区二区三区麻豆91| 777精品视频| 99久久婷婷国产综合精品电影√| 免费黄色av网址| 在线一区二区视频| 超碰个人在线| 欧美成人一区二区在线| 国产在线不卡视频| 国产视频91在线| www.美女亚洲精品| 特黄特色欧美大片| 欧美一级免费在线| 精品毛片三在线观看| 午夜视频在线看| 久久久神马电影| 国产综合久久久久影院| 麻豆成人免费视频| 久久91精品国产91久久跳| 国产日韩视频在线| 中文字幕无码人妻少妇免费| 欧美日韩成人综合天天影院 |