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

深入理解CLASSPATH

開發 后端
類路徑,也就是CLASSPATH是 Java™ 對Java初學者來說是最復雜也最令人頭痛的部分之一,但熟練掌握類路徑對成為一名專業 Java 程序員來說卻又十分關鍵。在本文中,Elliotte Rusty Harold 為您闡述了類路徑和源路徑的復雜性,并向您展示了如何在 Windows 中熟練掌握它們。

通過類路徑可以連接 Java 運行庫和文件系統。它告訴編譯器和解釋器應該在何處查找要加載的 .class 文件。它的基本思想是:文件系統的層次結構反映了 Java 包的層次結構,而類路徑則定義了文件系統中的哪個目錄可以作為 Java 包層次結構的根。

遺憾的是,通常文件系統非常復雜并依賴于平臺,而且和 Java 包也不能很好地匹配。尤其是在 Windows 環境中更是如此。Java 是一些 Unix 高手設計的,因而從很多方面來說,這也就意味著它無法很好地與 Windows 約定同步。這樣一來,不論是新用戶還是資深 Java 程序員都深感類路徑的棘手。沒錯,它的確不是 Java 平臺好的一面,它讓您到了下班的時候還在忙于調試一個頑固的小問題。

當然采用 Eclipse 這樣的優秀 IDE 可以減少管理類路徑的一些困難,但只能說是一些,而且前提還必須是一切都正常(但這不大可能,因為總會有一些意外出現)。因此,每個 Java 程序員都必須要全面了解類路徑,惟有如此,才有希望調試類路徑中所出現的問題。

包結構

要掌握類路徑,首先應從其源代碼入手。每個類都屬于一個包,而此包必須 遵守標準的命名約定。簡單地說,包的名稱要由顛倒的兩級域名開始,比如 com.example 或 edu.poly,之后是至少一個或多個單詞用于描述包的內容。比方說,假設有一個域名為 elharo.com,如果要創建一個 Fraction 類,可以將其放入如下包中:

◆com.elharo.math

◆com.elharo.numbers

◆com.elharo.math.algebra.fields

在顛倒的域名之后,需要使用單一單詞的子包名。不要使用縮寫形式,并要保證拼寫正確。如果需要,可以使用拼寫檢查器。大部分與類路徑相關的問題都是由在源代碼中使用某個單詞而在文件系統中使用的卻是與之稍有不同的拼寫或縮寫而引起的。所以最好的做法就是總是使用拼寫正確且沒有縮寫的名稱。

整個包名稱應該是小寫的,即使該名稱是在別處常采取大寫形式的一些慣用名稱和縮寫詞。Windows 通常不區分文件名中的大小寫,但 Java 和一些 UNIX 文件系統卻區分。如果需要在不同的系統間移動文件,大小寫問題肯定會帶來一些麻煩。

包名稱必須要全部由 ASCII 字符組成。一些編譯器也接受用 Hebrew、Cyrillic、Greek 或其他腳本編寫的包名稱,但大多數文件系統并不接受;您稍后就會看到,這樣的包名稱必須擔負充當目錄名這樣的雙重任務。Java 包和類名是 Unicode,但很多文件系統(包括 FAT)卻不能識別 Unicode。遺憾的是,FAT 系統非常之多。如果只簡單地用不同的默認編碼將文件復制到系統將會使編譯器和解釋器無法找到正確的類。

不要試圖在包名稱方面節約成本。長遠來看,這只會有百害而無一利。如果需要域名就買一個。如果名稱太長就買個短些的(我曾經買到了 xom.nu 這樣一個域名,因而我的包前綴就只有 6 個字符)。不要將類放到默認包中(默認包是指如果未在類中包含一條包語句時系統默認給出的包)。如果包訪問不利于對象間的通信,就需要向類中添加更多的公共方法。需要多次使用的類必須要放到包中。

配置 Windows

文件擴展名和路徑對于 Java 和 Windows 來說都很重要。所以在開始下面的步驟之前,務必確保能夠看到它們。隱藏部分文件名對終端用戶來說還可以接受(但我并不完全這么認為),但對于開發人員來說顯然不行。要解決這個問題,需要對 Windows Explorer 的一些默認設置做些更改。

首先在 Windows 桌面打開任意一個文件夾。找到 Tools 菜單,選擇 Folder Options。在隨后打開的對話框中,確認選擇了如下三個選項,如圖 1 所示:

◆“Display the full path in the address bar” 應該選中。

◆“Display the full path in title bar” 應該選中。

◆“Hide file extensions for known file types” 應該清除。

 

 

 

圖 1. Windows Explorer 選項

您可能還想選中 “Show hidden files and folders”,它對您的 Java 作業沒有多大影響,但就我個人而言,我很希望能夠看到所操作的所有內容。選中這些選項可以顯露關于所做事情的更多細節,使您能更輕松地調試所出現的問題。

#p#

目錄結構

下一步要做的是組織源文件來匹配包結構。在某處創建一個干凈的空白目錄。本文中,我將其命名為 project。如果將該目錄放到根級別(比如 C:\project)就會更容易一些。也可以將其放到桌面或 Documents and Settings 文件夾。但這會讓輸入的命令更長也更為復雜,所以只在十分必要的情況下才這么做(如果您運行的是 Windows XP 或更高,而且沒有管理員權限,那您沒有什么其他的選擇。在單用戶系統上,最好是要有管理員權限,這會使情況大大簡化)。

無論如何,不要將此目錄(或任何其他目錄)放到 JDK 文件夾(例如 C:\jdk1.6.0 或 C:\Program Files\Java\j2sdk1.5.0_09)。JDK 和 JRE 目錄在初始安裝之后應該保持不動。

在 project 目錄內,另外創建兩個目錄: bin 和 src(一些人更喜歡將其分別命名為 build 和 source)。

接下來,在 src 目錄,建一個與包層次結構相匹配的層次結構。例如,如果給定類名為 com.elharo.math.Fraction,我會將 com 目錄放到 src 目錄中,然后在 com 目錄中創建一個 elharo 目錄,再在 elharo 目錄內放一個 math 目錄,最后在 math 目錄內放上 Fraction.java,如圖 2 所示:

 

 

 

圖 2. 符合包結構的目錄結構

要點:不要在 src 目錄中放置除源代碼之外的任何內容。通常這里放入的文件都是 .java 文件。在有些情況下,也可放置 .html 文件(用于 JavaDoc)或其他類型的源代碼。然而,決不能在此結構內放置 .class 文件或任何其他編譯并生成的工件。這樣做只會帶來麻煩。遺憾的是,如果不夠謹慎,javac 編譯器就會 “明知故犯”。在下一節,將介紹如何修復這一問題。

#p#

編譯

編譯 Java 代碼需要一些技巧,原因是必須要跟蹤如下幾方面相關但又有所不同的內容:

◆正在編譯的目標文件。

◆編譯器在其中尋找目標文件導入 .java 文件的那個目錄。

◆編譯器在其中尋找目標文件導入 .class 文件的那個目錄。

◆編譯器在其中放置編譯輸出的目錄。

默認地,javac 編譯器將上述目錄都認為是當前目錄,而這并不是您所希望的。因此,需要在編譯時顯式地指定這些元素。

要編譯的文件

指定的第一個要編譯的文件是 .java 文件,以從當前目錄到該文件的整個路徑的形式給出。比如,假設當前所在目錄是 圖 1 所示的 project 目錄。該目錄包含 src 目錄。此 src 目錄包含 com 目錄,而 com 目錄又包含 example 目錄,example 目錄下是 Fraction.java 文件。如下命令行對它進行編譯:

C:\project> javac src\com\elharo\math\Fraction.java

如果路徑不正確,就會給出這樣的錯誤消息:

error: cannot read: src\com\example\mtah\Fraction.java

如果出現這樣的錯誤消息,就需要檢查路徑的各個部分,確保它們拼寫正確。在本例中,錯誤消息顯示 math 的第二和第三個字母顛倒了。

如果沒有發現拼寫錯誤,請檢查該文件是否處于它應該出現的位置,方法是按如下所示發出一個 dir 命令:

C:\project\src> dir src\com\example\math

ls: src/com/example/math: No such file or directory

出現問題的原因通常是因為路徑拼寫錯誤,但也可能是由于當前的目錄不對。在本例中,需要檢查當前的工作目錄是不是 project 目錄。檢查命令行上 C: 和 > 之間的文本,以確認當前目錄是否是預期的目錄。在本例中,當前目錄為 C:\project\src,而預期的目錄卻是 C:\project。

輸出到何處?

假設沒有出現任何語法錯誤,javac 將編譯后的 .class 文件放到與之對應的.java 文件所在的相同目錄內。這并不是您所想要的結果。將 .class 和 .java 文件混在一起常常會使清理編譯后的文件十分困難,因為很可能會意外刪除本應保留的 .java 文件。這常會使清理構建十分困難,而且還會導致版本問題。發布一個二進制時,只對編譯后的 .class 文件進行歸檔也會十分困難。因此,需要告知編譯器將編譯后的輸出放到一個完全不同的目錄內。-d 開關用來指定輸出目錄(通常稱為 bin、build 或 class):

C:\project> javac -d bin src\com\elharo\math\Fraction.java

這時的輸出將如圖 3 所示。請注意 javac 已經創建了完整的 com\elharo\math 目錄層次結構。不需要手動建立。

 

 

 

圖 3. 并行源和編譯后的層次結構

源路徑

源路徑 就是 Java 在其中尋找源文件的那個目錄。具體到本例,就是 src 目錄。該目錄必須包含源文件的層次結構,這些源文件可以被放到它們自己的目錄中。因此它不是 com 目錄也不是 src\com\elharo\math 目錄。

很多項目都使用不止一個類和包。它們通過導入語句和完整的包限定類名連接起來。例如,假設您在 com.elharo.gui 包中創建了 MainFrame 類,如清單 1 所示:

  1. package com.elharo.gui;  
  2. import com.elharo.math.*;  
  3. public class MainFrame{  
  4.     public static void main(String[] args) {  
  5.         Fraction f = new Fraction();  
  6.         // ...  
  7.     }  
  8. }  

清單 1. 一個包中的類可以導入另一個包中的類

該類使用的是與 MainFrame 類所在的包不同的包中的 com.elharo.math.Fraction 類。源設置現在應該如圖 4 所示(我將編譯后的輸出從之前的步驟中刪除了。但這沒有關系,因為我總是能重新編譯它)。

  

圖 4. 幾個包的源結構

現在來看一下試著像以前一樣編譯 MainFrame.java 會出現什么情況。

C:\project> javac -d bin src\com\elharo\gui\MainFrame.java src\com\elharo\gui\MainFrame.java:

3: package com.elharo.math does not exist
import com.elharo.math.*;
^
src\com\elharo\gui\MainFrame.java:7: cannot find symbol
symbol  : class Fraction
location: class com.elharo.gui.MainFrame
  private Fraction f = new Fraction();
          ^
src\com\elharo\gui\MainFrame.java:7: cannot find symbol
symbol  : class Fraction
location: class com.elharo.gui.MainFrame
  private Fraction f = new Fraction();
                           ^
3 errors

出現錯誤的原因是,雖然 javac 知道到何處可以找到 MainFrame.java,但它卻并不知道到何處可以找到 Fraction.java(您可能覺得它應該具備足夠的智能來識別匹配的層次結構,但事實并非如此)。為了給它提供一些線索,必須指定源路徑。用源路徑指定編譯器應該到哪些目錄查找源文件的層次結構。在清單 2 中,源路徑是 src。所以我使用了 -sourcepath 選項,如下所示:

C:\project> javac -d bin -sourcepath src src\com\elharo\gui\MainFrame.java

現在再編譯程序,就不會出現錯誤,并會產生如圖 5 所示的輸出。請注意 javac 也編譯了文件 Fraction.java,Fraction.java 被當前編譯的文件引用。

 

圖 5. 多類輸出

編譯源路徑中的多個目錄

在源路徑中可以有多個目錄,使用分號分隔各目錄,但通常沒有必要這么做。例如,若我想包括本地的 src 目錄和用來存放另一個項目的源代碼的 C:\Projects\XOM\src 目錄,我可以這樣進行編譯:

C:\project> javac -d bin -sourcepath src;C:\Projects\XOM\src

src/com/elharo/gui/MainFrame.java

該命令并不編譯在這兩個層次結構中所找到的每個文件。它只編譯由單個的 .java 文件直接或間接引用的文件,而此 .java 文件必須被編譯。

更常見的情況是,為 .java 文件用一個單一的源目錄,為類或放置了預編譯的第三方庫的 JAR 歸檔文件用多個目錄。而這正是類路徑的作用所在。

設置類路徑

在大中型項目中,每次都要對每個文件進行重編譯會非常耗時。為減少這種編譯負擔,可以在不同的 bin 目錄分別編譯和存儲相同項目的獨立部分。這些目錄被添加到類路徑。

將類添加到類路徑有幾種方法可選。但您只能使用 -classpath 命令行開關。例如,假設我想從另一個之前已經編譯到目錄 C:\lib\classes 中的項目導入文件,那么我會向命令行添加 -classpath C:\lib\classes,如下所示:

C:\project> javac -d bin -sourcepath src -classpath C:\lib\classes

src\com\elharo\gui\MainFrame.java

現在假設需要添加兩個目錄:C:\project1\classes 和 C:\project2\classes,可以將它們用分號分開,如下所示:

C:\project> javac -d bin -sourcepath src

-classpath C:\project1\classes;C:\project2\classes

src\com\elharo\gui\MainFrame.java

 當然,您也可以使用自己喜歡的各種相對路徑的格式。比如,如果 project1 和 project2 是當前工作目錄的同級目錄(即它們有相同的父目錄),那么我會這樣引用它們:

C:\project> javac -d bin -sourcepath src

-classpath ..\project1\classes;..\project2\classes

src\com\elharo\gui\MainFrame.java

到目前為止,我都一直假設程序完全獨立并且沒有使用任何單獨的編譯后的第三方庫。如果需要使用第三方庫,還必須將它們也添加到類路徑。庫通常是 JAR 文件的格式,比如 junit.jar 或 icu4j.jar。在本例中,需要向類路徑添加的只是 JAR 文件本身,而不是包含 JAR 文件的目錄(從實質上講,JAR 文件可以充當包含編譯后的 .class 文件的一種目錄)。例如,如下命令會向類路徑添加三項內容:目錄 C:\classes、當前工作目錄中的文件 icu4j.jar 以及 E:\lib 中的文件 junit.jar:

C:\project> javac -d bin -sourcepath src

-classpath C:\classes;icu4j.jar;E:\lib\junit.jar

src\com\elharo\gui\MainFrame.java

JAR 文件僅用于 .class 文件和類路徑,不用于 .java 文件和源路徑。

#p#

運行程序

現在您已經成功地編譯了程序,可以運行它了。運行與編譯相似但更為簡單一些。當運行程序時,只需指定兩項內容:

◆類路徑

◆包含 main() 方法的類的完全限定包名

無需指定源路徑。

通常這里的類路徑與編譯程序所使用的類路徑相同,只是多了一個放置編譯后的輸出的目錄。例如,如果編譯命令如下所示:

C:\project> javac -d bin -sourcepath src

-classpath C:\classes;E:\lib\junit.jar

src\com\elharo\gui\MainFrame.java

并且 main() 方法在類 com.elharo.gui.Mainframe.java 內,就可以像這樣運行此程序:

C:\project> java -classpath C:\classes;E:\lib\junit.jar

com.elharo.gui.MainFrame

請務必注意命令行的最后一項是類名。它不是一個文件名,也不是 .java 或 .class。該類必須能夠在類路徑的某處找到。

#p#

可能存在類的其他地方

我強烈建議您在編譯和運行時總是顯式地指定類路徑。也可以將文件放到其他地方,以便它們可以被添加到類路徑中,并被 javac 編譯器和 java 解釋器找到。這種做法會節省一些鍵入操作,但當(注意不是如果)您無意間將一個舊版本的類放到類路徑中時,這卻會耗費大量的調試時間。

在本節,將展示類常常隱匿其中的幾個地點,這些類很可能會出乎意料地冒到類路徑中并導致問題的出現。在不受您控制的機器上(比如服務器),這更為多見。

當前工作目錄

編譯器總是將當前工作目錄 (.) 添加到類路徑,而不管您是否曾顯式地要求這樣做。您很容易忘記在和您所在的目錄相同的目錄中有和沒有的內容。因此,請盡量避免將任何類或層次結構放入 project 或 home 目錄。相反地,應該將 .java 文件和 .class 文件分別放入 src 目錄和 bin 目錄。

CLASSPATH

過一會,您就會發現向類路徑手工添加 bin 目錄和 JAR 歸檔文件太過繁瑣。這時您可能會想要使用 CLASSPATH 環境變量??梢灾幌?CLASSPATH 環境變量添加一次目錄和 JAR 歸檔文件,之后就不需要在每次運行 javac 或 java 時都要再鍵入這些路徑。

請務必抵制這種誘惑。這樣做,一旦加載了錯誤的類或錯誤版本的類,就會出問題。而且意外加載錯誤的類所帶來的調試時間常常會百倍于省下的那點鍵入時間。要避免輸入并自動處理類路徑有更好的方法。

jre\lib\ext

放在 jre\lib\ext 目錄中的 JAR 歸檔文件會被添加到通過虛擬機運行的所有應用程序的類路徑。這看起來很方便,實際上它與向 CLASSPATH 環境變量添加目錄一樣,存在長遠的潛在問題。您遲早(通常很快)會在您想都想不到的地方加載類的一個錯誤版本的類并會為此付出大量的調試時間。

部署一個服務器端的應用程序時,問題就更為嚴峻。請確保部署到的服務器在其 jre\lib\ext 目錄沒有任何額外的 JAR。如果您不熟悉錯誤癥狀,也不知道該如何查找,那么由類路徑中的錯誤版本的 JAV 歸檔文件所帶來的問題可能會非常難于調試。為了避免這些問題的出現,一些框架甚至編寫了自己的類加載器,用來繞過 Java 代碼通常的類加載機制。

jre\lib\endorsed

放在 jre\lib\endorsed 目錄中的 JAR 文件也被添加到了通過虛擬機運行的所有應用程序的類路徑。不同的是,這里的文件被實際放入了 bootclasspath 而不是通常的類路徑,并可以代替 JDK 附帶的標準類。這種方式對于在 VM 更新 XML 解析器和修復 bug 尤其有用。

但是,如前所述,這種方法看起來十分方便,但實際上也存在長期的潛在問題,原因也一樣。如果需要替換 JDK 類,可以在運行時使用 -Xbootclasspath/p 選項來避免意外地加載錯誤版本的類。

C:\project> java -classpath C:\classes
-Xbootclasspath/p:xercesImpl.jar com.elharo.gui.MainFrame

#p#

自動管理類路徑

在想要使用電動射釘槍之前要先熟練使用錘子,與此相似,在試圖采用更強大的自動管理工具之前也要先能自如地手動管理這些類。如果您掌握了命令行工具集,就可以使用另外的工具來自動處理源路徑和類路徑所需的一些繁瑣過程。這些工具大部分也需要您像本文所介紹的那樣組織文件。

IDE

像 Eclipse 和 NetBeansMost 這樣的許多開發環境都能協助類路徑的自動管理。例如,當更改包的名稱時,Eclipse 能相應地移動對應的 .java 文件,如圖 6 所示:

 

  

圖 6. 在 Eclipse 中快速修復類路徑

請記住,這些 IDE 位于文件系統的頂部,必須正確設置,尤其是當需要與其他工具和其他 IDE 集成時就更應如此。這些工具最大的貢獻是用 GUI 對話框、樹視圖和選項卡代替了命令行開關參數,但其基本的文件結構還是一樣的。

Ant

Ant 是自動化構建過程的事實上的標準工具。與將目錄放在 jre\lib\ext 或 CLASSPATH 環境變量的做法不同,Ant 真的可以讓您創建單步的構建過程。但您仍然需要在 Ant build.xml 設置類路徑并手動將源文件放到正確的目錄。但至少現在您無需在每次編譯都要重新進行指定。

Maven

Maven 在組織和自動化構建過程方面比 Ant 還要更進一步。Maven 提供一個合理的默認設置讓您可以通過添加少許幾行代碼并將源文件放到 Maven 能夠找到的位置即可構建簡單的項目。您仍然需要調整文件系統和包的層次結構。Maven 在管理第三方庫的依賴性方面也有上佳的表現,雖然它不如 Ant 那么易于定制。

#p#

結束語

不管類路徑有多么棘手,您都可以通過一些簡單的規則對它加以管制,尤其是要記住如下的一些原則:

◆將類放到包中。

◆嚴格遵守包和類的命名約定和大小寫約定。

◆確保包的層次結構與目錄的層次結構匹配。

◆總是對 javac 應用 -d 選項。

◆不要在 jre\lib\ext 內放任何東西。

◆不要在 jre\lib\endorsed 內放任何東西。

◆不要將 .java 文件與 .class 文件放在同一個目錄。

◆不要將任何 .java 或 .class 文件放在當前的工作目錄。

最后一點提示:很多耗時的類路徑問題的起因大都是目錄名拼寫錯誤或從錯誤目錄進行了編譯。如果您不能找到問題的所在,可以問問周圍的朋友或同事。以我的經驗,自己發現自己的錯誤總是困難的,但這些錯誤在別人看來卻顯而易見。所以尋求他人的幫助也是一種切實有效的調試技巧。

類路徑確實不是個簡單的問題,但總會有相應的應對方法,所以它是完全可管理的。些許的謹慎加上對本文所介紹的命名約定、命令行參數和目錄結構的注意,應該能夠使您在問題最少的情況下編譯和運行程序了。

【編輯推薦】

  1. 專題:Java線程
  2. Java Swing多線程死鎖問題解析
  3. 有趣的Java對象序列化緩存問題
  4. Java實用技巧:當不能拋出checked異常時
  5. Java編程語言的優點快遞

 

責任編輯:佚名 來源: IBM
相關推薦

2016-12-08 15:36:59

HashMap數據結構hash函數

2020-07-21 08:26:08

SpringSecurity過濾器

2023-10-19 11:12:15

Netty代碼

2009-09-25 09:14:35

Hibernate日志

2021-02-17 11:25:33

前端JavaScriptthis

2013-09-22 14:57:19

AtWood

2019-06-25 10:32:19

UDP編程通信

2025-06-05 05:51:33

2017-08-15 13:05:58

Serverless架構開發運維

2017-01-10 08:48:21

2020-09-23 10:00:26

Redis數據庫命令

2025-05-06 00:43:00

MySQL日志文件MIXED 3

2024-02-21 21:14:20

編程語言開發Golang

2022-11-04 09:43:05

Java線程

2015-11-04 09:57:18

JavaScript原型

2022-09-05 08:39:04

kubernetesk8s

2017-01-13 22:42:15

iosswift

2011-04-11 16:48:12

Solaris權限

2021-04-20 23:25:16

執行函數變量

2024-03-12 00:00:00

Sora技術數據
點贊
收藏

51CTO技術棧公眾號

国产精品高清网站| 欧美成人猛片aaaaaaa| 亚洲蜜桃在线| 一起草av在线| 99精品免费视频| 中国日韩欧美久久久久久久久| 中文字幕亚洲影院| 妞干网免费在线视频| 国产精品毛片a∨一区二区三区| 92福利视频午夜1000合集在线观看| 日韩三级一区二区三区| 精品欧美激情在线观看| 欧美成人三级在线| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 麻豆视频网站在线观看| 成人午夜私人影院| 91精品免费久久久久久久久| 亚洲午夜18毛片在线看| 综合在线视频| 伊人伊成久久人综合网站| www.欧美com| 草民电影神马电影一区二区| 亚洲二区视频在线| 正在播放国产精品| 久久久资源网| 成人精品一区二区三区四区 | 玛雅亚洲电影| 亚洲国产人成综合网站| 自拍另类欧美| 成人p站proumb入口| 99久久精品免费看国产| 91久久精品国产91久久性色tv | 免费看欧美女人艹b| 96精品视频在线| 麻豆国产尤物av尤物在线观看| 成人羞羞视频播放网站| 日韩精品视频在线观看免费| 特级特黄刘亦菲aaa级| 国产精品一区二区三区四区在线观看| 色婷婷av一区| 激情六月丁香婷婷| 欧美日韩国产观看视频| 天天射综合影视| 男人插女人视频在线观看| 日韩少妇视频| 亚洲美女一区二区三区| 三年中文高清在线观看第6集| jzzjzzjzz亚洲成熟少妇| 久久麻豆一区二区| 欧美日韩综合精品| 欧洲伦理片一区 二区 三区| 白白色亚洲国产精品| 国产欧美日韩伦理| 日本人妻丰满熟妇久久久久久| 国产精品白丝av| 99re在线国产| 天天操天天舔天天干| 成人免费视频网站在线观看| 国产精品免费观看高清| 神宫寺奈绪一区二区三区| av亚洲精华国产精华精华| 国产在线一区二区三区四区 | 狂野欧美性猛交xxxx| 欧美三级资源在线| 91福利免费观看| 国产一区二区三区视频在线| 欧美成人性福生活免费看| 亚洲乱妇老熟女爽到高潮的片| 成人h动漫免费观看网站| 亚洲国产小视频在线观看| 添女人荫蒂视频| 国产成人精品免费视| 色香阁99久久精品久久久| 国产男女猛烈无遮挡在线喷水| 欧美人成网站| 欧美一级视频在线观看| 黄色一区二区视频| 国产一区二区伦理片| 超碰97国产在线| 日本福利在线观看| 国产精品美女久久久久久久久久久 | 久久久在线视频| 国产寡妇亲子伦一区二区三区四区| 视频在线观看一区二区三区| 久久免费福利视频| 无码无套少妇毛多18pxxxx| 久久国产夜色精品鲁鲁99| 91丝袜脚交足在线播放| 天堂av在线播放| 《视频一区视频二区| 97超碰人人澡| yw.尤物在线精品视频| 日韩西西人体444www| 30一40一50老女人毛片| 99久久精品费精品国产风间由美| 欧美精品videosex极品1| 无码人妻熟妇av又粗又大| 激情综合色综合久久综合| 国产精品一级久久久| 成年网站在线| 亚洲成av人在线观看| 性刺激的欧美三级视频| 99热这里只有精品首页| 在线观看日韩欧美| 日韩成人免费在线观看| 久久超碰97中文字幕| 精品国产一区二区三区麻豆免费观看完整版 | av成人动漫在线观看| 亚洲在线视频一区二区| 1234区中文字幕在线观看| 欧美日韩精品欧美日韩精品 | 欧美激情免费视频| 中文字幕一区二区三区免费看| 成人国产免费视频| 中文字幕人成一区| 日韩美女在线看免费观看| 欧美大片在线观看| 国内毛片毛片毛片毛片毛片| 六月婷婷一区| 国产一区免费| а√天堂官网中文在线| 欧美午夜一区二区三区| 星空大象在线观看免费播放| 一区二区在线影院| 国产精品最新在线观看| 奇米影视888狠狠狠777不卡| 婷婷中文字幕综合| 又大又长粗又爽又黄少妇视频| 久久亚洲国产| 国产精品va在线播放| 五月天福利视频| 亚洲精品视频在线看| 日韩欧美国产片| 国产亚洲一区| 日本免费在线精品| 色播色播色播色播色播在线 | 成人在线超碰| 欧美日韩国产成人在线观看| 国产色在线视频| **性色生活片久久毛片| 欧美wwwwwww| 久久一级电影| 91久久久在线| 久久99精品久久久久久野外| 欧美日韩一区高清| 俄罗斯毛片基地| 蜜桃av一区二区| 亚洲成人一区二区三区| avav成人| 久久久国产在线视频| 国产精品探花视频| 最新国产精品久久精品| 亚洲欧美日韩一级| 久久综合国产| 亚洲最大激情中文字幕| 污视频网站在线免费| 欧美成人video| 日韩av在线电影| 99国产精品国产精品毛片| 国产免费一区二区三区视频| 久久99影视| 国产日韩欧美一二三区| 97caopron在线视频| 日韩美女在线视频| 日本免费观看视| 国产亚洲综合av| 黄大色黄女片18第一次| 欧美一区久久| 激情一区二区三区| 日本综合视频| 欧美xxxx综合视频| 韩国中文字幕hd久久精品| 丁香五六月婷婷久久激情| xxx在线播放| 久久国产综合精品| 欧美视频在线观看视频| 国产欧美日韩免费观看| 国产免费一区二区三区香蕉精| 麻豆网在线观看| 亚洲激情视频网| 少妇又紧又色又爽又刺激视频| 日韩一区欧美小说| 秘密基地免费观看完整版中文| 欧美一级视频| dy888午夜| 亚洲宅男网av| 91视频88av| 亚洲人体视频| 久久国产精品亚洲| 青青免费在线视频| 91精品国产美女浴室洗澡无遮挡| 欧美福利视频一区二区| 中文字幕亚洲一区二区av在线| 亚洲欧美日韩偷拍| 麻豆91在线看| 欧美成人xxxxx| 欧美在线国产| 新呦u视频一区二区| 最新国产一区二区| 国产精品视频公开费视频| 9999在线视频| xxx一区二区| 亚洲欧美丝袜中文综合| 宅男噜噜噜66一区二区66| 黄色大片网站在线观看| 亚洲视频综合在线| 亚洲AV无码成人精品区明星换面| 国产99一区视频免费| 中文字幕在线观看第三页| 亚洲精选在线| 欧美少妇在线观看| 日韩精品久久| 欧美精品欧美精品| 国产精品超碰| 亚洲999一在线观看www| 国产精品99| 国产999精品| 交100部在线观看| 欧美大胆在线视频| 免费在线看a| 亚洲天堂日韩电影| 神马亚洲视频| 亚洲国产精品yw在线观看| 午夜精品一二三区| 91麻豆精品国产91| 亚洲无码久久久久| 欧美三级蜜桃2在线观看| 欧美一区二区三区网站| 亚洲.国产.中文慕字在线| 欧美国产日韩综合| 亚洲欧美色综合| 日韩三级久久久| 国产精品嫩草影院av蜜臀| 中国女人特级毛片| 久久久噜噜噜久久中文字幕色伊伊 | 中文无码日韩欧| 92国产精品久久久久首页| 亚洲伊人伊成久久人综合网| 国产精品视频在线观看| 中文字幕日本一区二区| 国产精品久久久久久久app| 三上悠亚国产精品一区二区三区| 2019亚洲男人天堂| 第84页国产精品| 日本欧美一二三区| 精品免费av在线| 日韩av色综合| 97久久网站| 国产欧美一区二区三区四区| 日韩一区二区三区四区五区| 国产日韩欧美日韩| 欧洲大片精品免费永久看nba| 99re国产在线播放| 欧美久久精品| 日本婷婷久久久久久久久一区二区 | 日韩欧美中文字幕一区| 精品人妻一区二区三区含羞草| 日韩美女在线视频| 日韩永久免费视频| 亚洲毛片在线观看| av在线首页| 久久精品国产视频| 色操视频在线| 欧美一区二区色| 99re久久| 亚洲综合成人婷婷小说| 亚洲网址在线观看| 精品无人乱码一区二区三区的优势| 一区二区三区四区在线看| 日韩免费电影一区二区三区| 91亚洲国产成人久久精品| 中文字幕在线中文| 亚洲黄色免费| www.精品在线| 粉嫩13p一区二区三区| 久久久久久久无码| 国产精品女同互慰在线看| 国产黄在线免费观看| 亚洲成人精品影院| 国产九色91回来了| 精品日韩一区二区| 黄色av免费在线看| 美日韩丰满少妇在线观看| 丰满诱人av在线播放| 国产成人精品久久| 看亚洲a级一级毛片| 鲁片一区二区三区| 99久久www免费| 自慰无码一区二区三区| 久久国产精品露脸对白| 亚洲av成人精品一区二区三区 | 色综合久久88色综合天天提莫| 综合一区二区三区| 成年人网站大全| 国产精品一区二区你懂的| 亚洲av无码国产精品久久| 日韩毛片一二三区| 在线观看日本视频| 日韩久久精品一区| aaa在线观看| 97在线看免费观看视频在线观看| 欧洲精品久久久久毛片完整版| 国产伦精品一区二区| 99视频精品全部免费在线视频| 久久国产午夜精品理论片最新版本| 日韩黄色在线观看| 亚洲色偷偷色噜噜狠狠99网| 中文字幕一区二区日韩精品绯色| 秋霞精品一区二区三区| 日韩欧美三级在线| 青青影院在线观看| 国产精品7m视频| 看全色黄大色大片免费久久久| 免费在线观看污污视频| 丝袜美腿亚洲一区二区图片| 久久久高清视频| 亚洲欧美福利一区二区| 中文字幕乱码视频| 亚洲精品白浆高清久久久久久| 在线网址91| 成人亚洲欧美一区二区三区| 久草成人资源| 337p粉嫩大胆噜噜噜鲁| 懂色av中文字幕一区二区三区| 日韩国产第一页| 欧美日韩国产小视频| 成人影视在线播放| 国产成人精品综合久久久| 天堂av一区二区三区在线播放| 精品国偷自产一区二区三区| 国内精品伊人久久久久av一坑| 制服丨自拍丨欧美丨动漫丨| 91黄色在线观看| 国产污视频在线| 日本中文字幕不卡免费| 香蕉久久99| 欧美a在线视频| 久久久综合视频| 国产suv精品一区二区33| 亚洲男人第一网站| 欧美18av| 日产精品高清视频免费| 首页国产欧美日韩丝袜| 日本性高潮视频| 欧美午夜一区二区三区| 午夜视频在线观看网站| 国产中文字幕亚洲| 国产精品传媒精东影业在线| 亚洲午夜精品一区| 亚洲嫩草精品久久| 国内毛片毛片毛片毛片| 久久久久久国产精品美女| 成人高潮a毛片免费观看网站| 欧美精品久久久久久久自慰| 99久久精品久久久久久清纯| 尤物视频在线观看国产| 亚洲欧洲在线视频| 欧美日一区二区三区| 一区二区三区四区五区视频| 麻豆成人综合网| 久草免费新视频| 日韩国产精品视频| 电影亚洲一区| 成人在线免费高清视频| 成人高清免费观看| 无码人妻一区二区三区线| 久久精品国产成人| aiai久久| 成人免费在线观看视频网站| 亚洲天堂精品在线观看| 蜜臀av免费在线观看| 国产aaa精品| 亚洲一区二区三区| 亚洲av成人片无码| 欧美体内she精视频| 制服丝袜在线播放| 久久精品一二三区| 国内精品久久久久影院一蜜桃| 国产一级一片免费播放放a| 精品一区二区三区四区在线| 巨大黑人极品videos精品| 蜜臀精品一区二区| 国产亚洲一二三区| 亚洲AV午夜精品| 国产成人91久久精品| 自拍欧美日韩| 亚洲精品乱码久久久久久久久久久久| 欧美日韩国产经典色站一区二区三区| 色呦呦呦在线观看| 日韩亚洲不卡在线| 国产成人av电影在线观看| 国产又粗又猛又爽又| 欧美日本高清视频| 国产一区二区三区探花| 日本中文字幕有码| 欧美色精品在线视频| 6699嫩草久久久精品影院| 一区二区av| 久久综合狠狠综合久久综合88 | 日本一区免费网站|