Java入門之~基礎語法

      網友投稿 800 2022-05-28

      java基礎語法

      1. Java概述

      1.1 Java語言發展史(了解)

      語言:人與人交流溝通的表達方式

      計算機語言:人與計算機之間進行信息交流溝通的一種特殊語言

      Java語言是美國Sun公司(Stanford University Network)在1995年推出的計算機語言

      Java之父:詹姆斯·高斯林(James Gosling)

      2009年,Sun公司被甲骨文公司收購,所以我們現在訪問oracle官網即可:https://www.oracle.com

      當前,我們課程使用的JDK版本:11.0

      1.2 Java語言跨平臺原理(理解)

      Java程序并非是直接運行的,Java編譯器將Java源程序編譯成與平臺無關的字節碼文件(class文件),然后由Java虛擬機(JVM)對字節碼文件解釋執行。所以在不同的操作系統下,只需安裝不同的Java虛擬機即可實現java程序的跨平臺。

      1.3 JRE和JDK(記憶)

      JVM(Java Virtual Machine),Java虛擬機

      JRE(Java Runtime Environment),Java運行環境,包含了JVM和Java的核心類庫(Java API)

      JDK(Java Development Kit)稱為Java開發工具,包含了JRE和開發工具

      總結:我們只需安裝JDK即可,它包含了java的運行環境和虛擬機。

      1.4 JDK的下載和安裝(應用)

      通過官方網站獲取JDK

      http://www.oracle.com

      注意:針對不同的操作系統,需要下載對應版本的JDK。

      具體下載步驟請參見《JDK下載及安裝說明文檔》

      傻瓜式安裝,下一步即可。但默認的安裝路徑是在C:\Program Files下,為方便統一管理建議修改安裝路徑,將與開發相關的軟件都安裝到一個目錄下,例如:E:\develop。

      注意:安裝路徑不要包含中文或者空格等特殊字符(使用純英文目錄)。

      具體安裝步驟請參見《JDK下載及安裝說明文檔》

      Java入門之~基礎語法

      2. 入門程序HelloWorld

      2.1 常用DOS命令(應用)

      在接觸集成開發環境之前,我們需要使用命令行窗口對java程序進行編譯和運行,所以需要知道一些常用DOS命令。

      1、打開命令行窗口的方式:win + r打開運行窗口,輸入cmd,回車。

      2、常用命令及其作用

      2.2 Path環境變量的配置(應用)

      開發Java程序,需要使用JDK提供的開發工具(比如javac.exe、java.exe等命令),而這些工具在JDK的安裝目錄的bin目錄下,如果不配置環境變量,那么這些命令只可以在該目錄下執行。我們不可能把所有的java文件都放到JDK的bin目錄下,所以配置環境變量的作用就是可以使bin目錄下的java相關命令可以在任意目錄下使用。

      注意:目前較新的JDK安裝時會自動配置javac、java命令的路徑到Path環境變量中去 ,所以javac、java可以直接使用。

      但是以前下載的老版本的JDK是沒有自動配置的,此時必需要自己配置Path環境變量。

      ①JAVA_HOME:告訴操作系統JDK安裝在了哪個位置(未來其他技術要通過這個找JDK)

      ②Path:告訴操作系統JDK提供的javac(編譯)、java(執行)命令安裝到了哪個位置

      注意:新版本的JDK只是自動配置了Path,沒有自動配置JAVA_HOME。

      2.3 HelloWorld案例(應用)

      HelloWorld案例是指在計算機屏幕上輸出“HelloWorld”這行文字。各種計算機語言都習慣使用該案例作為第一個演示案例。

      開發Java程序,需要三個步驟:編寫程序,編譯程序,運行程序。

      1、新建文本文檔文件,修改名稱為HelloWorld.java。

      2、用記事本打開HelloWorld.java文件,輸寫程序內容。

      public class HelloWorld { public static void main(String[] args) { System.out.println("HelloWorld"); } }

      存文件,打開命令行窗口,將目錄切換至java文件所在目錄,編譯java文件生成class文件,運行class文件。

      編譯:javac 文件名.java

      范例:javac HelloWorld.java

      執行:java 類名

      范例:java HelloWorld

      2.4 HelloWorld案例常見問題(理解)

      在電腦系統或程序中,隱藏著的一些未被發現的缺陷或問題統稱為bug(漏洞)。

      1、具備識別BUG的能力:多看

      2、具備分析BUG的能力:多思考,多查資料

      3、具備解決BUG的能力:多嘗試,多總結

      1、非法字符問題。Java中的符號都是英文格式的。

      2、大小寫問題。Java語言對大小寫敏感(區分大小寫)。

      3、在系統中顯示文件的擴展名,避免出現HelloWorld.java.txt文件。

      4、編譯命令后的java文件名需要帶文件后綴.java

      5、運行命令后的class文件名(類名)不帶文件后綴.class

      3、IDEA安裝使用

      參見**“IDEA安裝詳解.pdf”**

      4. java基礎語法

      注釋是對代碼的解釋和說明文字,可以提高程序的可讀性,因此在程序中添加必要的注釋文字十分重要。Java中的注釋分為三種:

      單行注釋。單行注釋的格式是使用//,從//開始至本行結尾的文字將作為注釋文字。

      // 這是單行注釋文字

      多行注釋。多行注釋的格式是使用/* 和 */將一段較長的注釋括起來。

      /* 這是多行注釋文字 這是多行注釋文字 這是多行注釋文字 */ 注意:多行注釋不能嵌套使用。

      文檔注釋。文檔注釋以/**開始,以*/結束。(以后講)

      作用:告訴程序員,數據在程序中的書寫格式。

      public class Demo { public static void main(String[] args) { System.out.println(10); // 輸出一個整數 System.out.println(5.5); // 輸出一個小數 System.out.println('a'); // 輸出一個字符 System.out.println(true); // 輸出boolean值true System.out.println("歡迎來到黑馬程序員"); // 輸出字符串 } }

      l計算機底層都是一些數字電路(理解成開關),用開表示0、關表示1,這些01的形式就是二進制。

      數據在計算機底層都是采用二進制存儲的,l在計算機中認為一個開關表示的0|1稱為1位(b),每8位稱為一個字節(B), 所以1B=8b

      字節是計算機中數據的最小單位。

      我們知道計算機是可以用來存儲數據的,但是無論是內存還是硬盤,計算機存儲設備的最小信息單元叫“位(bit)”,我們又稱之為“比特位”,通常用小寫的字母”b”表示。而計算機中最基本的存儲單元叫“字節(byte)”,

      通常用大寫字母”B”表示,字節是由連續的8個位組成。

      除了字節外還有一些常用的存儲單位,其換算單位如下:

      1B(字節) = 8bit

      1KB = 1024B

      1MB = 1024KB

      1GB = 1024MB

      1TB = 1024GB

      Java是一個強類型語言,Java中的數據必須明確數據類型。在Java中的數據類型包括基本數據類型和引用數據類型兩種。

      Java中的基本數據類型:

      說明:

      e+38表示是乘以10的38次方,同樣,e-45表示乘以10的負45次方。

      在java中整數默認是int類型,浮點數默認是double類型。

      變量:在程序運行過程中,其值可以發生改變的量。

      從本質上講,變量是內存中的一小塊區域,其值可以在一定范圍內變化。

      變量的定義格式:

      數據類型 變量名 = 初始化值; // 聲明變量并賦值 int age = 18; System.out.println(age);

      或者

      // 先聲明,后賦值(使用前賦值即可) 數據類型 變量名; 變量名 = 初始化值; double money; money = 55.5; System.out.println(money);

      還可以在同一行定義多個同一種數據類型的變量,中間使用逗號隔開。但不建議使用這種方式,降低程序的可讀性。

      int a = 10, b = 20; // 定義int類型的變量a和b,中間使用逗號隔開 System.out.println(a); System.out.println(b); int c,d; // 聲明int類型的變量c和d,中間使用逗號隔開 c = 30; d = 40; System.out.println(c); System.out.println(d);

      變量的使用:通過變量名訪問即可。

      在同一對花括號中,變量名不能重復。

      變量在使用之前,必須初始化(賦值)。

      定義long類型的變量時,需要在整數的后面加L(大小寫均可,建議大寫)。因為整數默認是int類型,整數太大可能超出int范圍。

      定義float類型的變量時,需要在小數的后面加F(大小寫均可,建議大寫)。因為浮點數的默認類型是double, double的取值范圍是大于float的,類型不兼容。

      關鍵字

      Java自己保留的一些單詞,作為特殊功能的,例如:public、class、byte、short、int、long、double…

      我們不能用來作為類名或者是變量名稱,否則報錯。

      注意:關鍵字很多,不用刻意去記。

      標志符

      標志符就是由一些字符、符號組合起來的名稱,用于給類,方法,變量等起名字的規矩。

      基本要求:由數字、字母、下劃線(_)和美元符($)等組成

      強制要求:不能以數字開頭、不能是關鍵字、區分大小寫

      基本命令規范

      變量名稱:滿足標識符規則,建議全英文、有意義、首字母小寫,滿足“駝峰模式”,例如:int studyNumber = 59。

      類名稱: 滿足標識符規則,建議全英文、有意義、首字母大寫,滿足“駝峰模式”,例如:HelloWorld.java。

      day02 - Java基礎語法

      0、類型轉換問題

      在Java中,會存在不同類型的數據需要一起參與運算,所以這些數據類型之間是需要相互轉換的,分為兩種情況:自動類型轉換和強制類型轉換。

      *類型范圍小的變量,可以直接賦值給類型范圍大**的變量。

      ![image-20210923101403191](C:/Typora/Java筆記/day02 - Java基礎語法.assets/image-20210923101403191.png)

      把一個表示數據范圍小的數值或者變量賦值給另一個表示數據范圍大的變量。這種轉換方式是自動的,直接書寫即可。例如:

      double num = 10; // 將int類型的10直接賦值給double類型 System.out.println(num); // 輸出10.0 byte a = 12 ; int b = a; System.out.println(b); // 12

      在表達式中,小范圍類型的變量會自動轉換成當前較大范圍的類型再運算。

      ![image-20210923101448738](C:/Typora/Java筆記/day02 - Java基礎語法.assets/image-20210923101448738.png)

      注意事項:

      表達式的最終結果類型由表達式中的最高類型決定。

      在表達式中,byte、short、char 是直接轉換成int類型參與運算的。

      類型范圍大的數據或者變量,不能直接賦值給類型范圍小的變量,會報錯,把一個表示數據范圍大的數值或者變量賦值給另一個表示數據范圍小的變量必須進行強制類型轉換。

      強制類型轉換格式:目標數據類型 變量名 = (目標數據類型)值或者變量;

      例如:

      double num1 = 5.5;int num2 = (int) num1; // 將double類型的num1強制轉換為int類型System.out.println(num2); // 輸出5(小數位直接舍棄)

      說明:

      char類型的數據轉換為int類型是按照碼表中對應的int值進行計算的。比如在ASCII碼表中,'a’對應97。

      int a = 'a';System.out.println(a); // 將輸出97

      整數默認是int類型,byte、short和char類型數據參與運算均會自動轉換為int類型。

      byte b1 = 10;byte b2 = 20;byte b3 = b1 + b2; // 第三行代碼會報錯,b1和b2會自動轉換為int類型,計算結果為int,int賦值給byte需要強制類型轉換。// 修改為:int num = b1 + b2;// 或者:byte b3 = (byte) (b1 + b2);

      boolean類型不能與其他基本數據類型相互轉換。

      1. 運算符

      1.1 算術運算符(理解)

      運算符:對常量或者變量進行操作的符號

      表達式:用運算符把常量或者變量連接起來符合java語法的式子就可以稱為表達式。

      不同運算符連接的表達式體現的是不同類型的表達式。

      舉例說明:

      int a = 10;int b = 20;int c = a + b;

      +:是運算符,并且是算術運算符。

      a + b:是表達式,由于+是算術運算符,所以這個表達式叫算術表達式。

      注意:

      /和%的區別:兩個數據做除法,/取結果的商,%取結果的余數。

      整數操作只能得到整數,要想得到小數,必須有浮點數參與運算。

      int a = 10;int b = 3;System.out.println(a / b); // 輸出結果3System.out.println(a % b); // 輸出結果1

      char類型參與算術運算,使用的是計算機底層對應的十進制數值。需要我們記住三個字符對應的數值:

      ‘a’ – 97 a-z是連續的,所以’b’對應的數值是98,'c’是99,依次遞加

      ‘A’ – 65 A-Z是連續的,所以’B’對應的數值是66,'C’是67,依次遞加

      ‘0’ – 48 0-9是連續的,所以’1’對應的數值是49,'2’是50,依次遞加

      // 可以通過使用字符與整數做算術運算,得出字符對應的數值是多少char ch1 = 'a';System.out.println(ch1 + 1); // 輸出98,97 + 1 = 98char ch2 = 'A';System.out.println(ch2 + 1); // 輸出66,65 + 1 = 66char ch3 = '0';System.out.println(ch3 + 1); // 輸出49,48 + 1 = 49

      算術表達式中包含不同的基本數據類型的值的時候,整個算術表達式的類型會自動進行提升。

      提升規則:

      byte類型,short類型和char類型將被提升到int類型,不管是否有其他類型參與運算。

      整個表達式的類型自動提升到與表達式中最高等級的操作數相同的類型

      等級順序:byte,short,char --> int --> long --> float --> double

      例如:

      byte b1 = 10;byte b2 = 20;// byte b3 = b1 + b2; // 該行報錯,因為byte類型參與算術運算會自動提示為int,int賦值給byte可能損失精度int i3 = b1 + b2; // 應該使用int接收byte b3 = (byte) (b1 + b2); // 或者將結果強制轉換為byte類型-------------------------------int num1 = 10;double num2 = 20.0;double num3 = num1 + num2; // 使用double接收,因為num1會自動提升為double類型

      tips:正是由于上述原因,所以在程序開發中我們很少使用byte或者short類型定義整數。也很少會使用char類型定義字符,而使用字符串類型,更不會使用char類型做算術運算。

      當“+”操作中出現字符串時,這個”+”是字符串連接符,而不是算術運算。

      System.out.println("itheima"+ 666); // 輸出:itheima666

      在”+”操作中,如果出現了字符串,就是連接運算符,否則就是算術運算。當連續進行“+”操作時,從左到右逐個執行。

      System.out.println(1 + 99 + "年黑馬"); // 輸出:199年黑馬System.out.println(1 + 2 + "itheima" + 3 + 4); // 輸出:3itheima34// 可以使用小括號改變運算的優先級 System.out.println(1 + 2 + "itheima" + (3 + 4)); // 輸出:3itheima7

      1.2 賦值運算符(應用)

      賦值運算符的作用是將一個表達式的值賦給左邊,左邊必須是可修改的,不能是常量。

      注意:

      擴展的賦值運算符隱含了強制類型轉換。

      short s = 10;s = s + 10; // 此行代碼報出,因為運算中s提升為int類型,運算結果int賦值給short可能損失精度s += 10; // 此行代碼沒有問題,隱含了強制類型轉換,相當于 s = (short) (s + 10);

      1.3 自增自減運算符(理解)

      注意事項:

      ++和-- 既可以放在變量的后邊,也可以放在變量的前邊。

      單獨使用的時候, ++和-- 無論是放在變量的前邊還是后邊,結果是一樣的。

      參與操作的時候,如果放在變量的后邊,先拿變量參與操作,后拿變量做++或者–。

      參與操作的時候,如果放在變量的前邊,先拿變量做++或者–,后拿變量參與操作。

      最常見的用法:單獨使用。

      int i = 10;i++; // 單獨使用System.out.println("i:" + i); // i:11int j = 10;++j; // 單獨使用System.out.println("j:" + j); // j:11int x = 10;int y = x++; // 賦值運算,++在后邊,所以是使用x原來的值賦值給y,x本身自增1System.out.println("x:" + x + ", y:" + y); // x:11,y:10int m = 10;int n = ++m; // 賦值運算,++在前邊,所以是使用m自增后的值賦值給n,m本身自增1System.out.println("m:" + m + ", m:" + m); // m:11,m:11

      練習:

      int x = 10;int y = x++ + x++ + x++;System.out.println(y); // y的值是多少?/*解析,三個表達式都是++在后,所以每次使用的都是自增前的值,但程序自左至右執行,所以第一次自增時,使用的是10進行計算,但第二次自增時,x的值已經自增到11了,所以第二次使用的是11,然后再次自增。。。所以整個式子應該是:int y = 10 + 11 + 12;輸出結果為33。*/注意:通過此練習深刻理解自增和自減的規律,但實際開發中強烈建議不要寫這樣的代碼!小心挨打!

      1.4 關系運算符(應用)

      關系運算符有6種關系,分別為小于、小于等于、大于、等于、大于等于、不等于。

      注意事項:

      關系運算符的結果都是boolean類型,要么是true,要么是false。

      千萬不要把“==”誤寫成“=”,"==“是判斷是否相等的關系,”="是賦值。

      int a = 10;int b = 20;System.out.println(a == b); // falseSystem.out.println(a != b); // trueSystem.out.println(a > b); // falseSystem.out.println(a >= b); // falseSystem.out.println(a < b); // trueSystem.out.println(a <= b); // true// 關系運算的結果肯定是boolean類型,所以也可以將運算結果賦值給boolean類型的變量boolean flag = a > b;System.out.println(flag); // 輸出false

      1.5 邏輯運算符(應用)

      邏輯運算符把各個運算的關系表達式連接起來組成一個復雜的邏輯表達式,以判斷程序中的表達式是否成立,判斷的結果是 true 或 false。

      //定義變量int i = 10;int j = 20;int k = 30;//& “與”,并且的關系,只要表達式中有一個值為false,結果即為falseSystem.out.println((i > j) & (i > k)); //false & false,輸出falseSystem.out.println((i < j) & (i > k)); //true & false,輸出falseSystem.out.println((i > j) & (i < k)); //false & true,輸出falseSystem.out.println((i < j) & (i < k)); //true & true,輸出trueSystem.out.println("--------");//| “或”,或者的關系,只要表達式中有一個值為true,結果即為trueSystem.out.println((i > j) | (i > k)); //false | false,輸出falseSystem.out.println((i < j) | (i > k)); //true | false,輸出trueSystem.out.println((i > j) | (i < k)); //false | true,輸出trueSystem.out.println((i < j) | (i < k)); //true | true,輸出trueSystem.out.println("--------");//^ “異或”,相同為false,不同為trueSystem.out.println((i > j) ^ (i > k)); //false ^ false,輸出falseSystem.out.println((i < j) ^ (i > k)); //true ^ false,輸出trueSystem.out.println((i > j) ^ (i < k)); //false ^ true,輸出trueSystem.out.println((i < j) ^ (i < k)); //true ^ true,輸出falseSystem.out.println("--------");//! “非”,取反System.out.println((i > j)); //falseSystem.out.println(!(i > j)); //!false,,輸出true

      在邏輯與運算中,只要有一個表達式的值為false,那么結果就可以判定為false了,沒有必要將所有表達式的值都計算出來,短路與操作就有這樣的效果,可以提高效率。同理在邏輯或運算中,一旦發現值為true,右邊的表達式將不再參與運算。

      邏輯與&,無論左邊真假,右邊都要執行。

      短路與&&,如果左邊為真,右邊執行;如果左邊為假,右邊不執行。

      邏輯或|,無論左邊真假,右邊都要執行。

      短路或||,如果左邊為假,右邊執行;如果左邊為真,右邊不執行。

      int x = 3;int y = 4;System.out.println((x++ > 4) & (y++ > 5)); // 兩個表達都會運算System.out.println(x); // 4System.out.println(y); // 5System.out.println((x++ > 4) && (y++ > 5)); // 左邊已經可以確定結果為false,右邊不參與運算System.out.println(x); // 4System.out.println(y); // 4

      1.6 三元運算符(理解)

      三元運算符語法格式:

      關系表達式 ? 表達式1 : 表達式2;

      解釋:問號前面的位置是判斷的條件,判斷結果為boolean型,為true時調用表達式1,為false時調用表達式2。其邏輯為:如果條件表達式成立或者滿足則執行表達式1,否則執行第二個。

      舉例:

      int a = 10;int b = 20;int c = a > b ? a : b; // 判斷 a>b 是否為真,如果為真取a的值,如果為假,取b的值

      三元運算符案例:

      1、需求:動物園里有兩只老虎,已知兩只老虎的體重分別為180kg、200kg,請用程序實現判斷兩只老虎的體重是否相同。

      public class OperatorTest01 { public static void main(String[] args) { //1:定義兩個變量用于保存老虎的體重,單位為kg,這里僅僅體現數值即可。 int weight1 = 180; int weight2 = 200; //2:用三元運算符實現老虎體重的判斷,體重相同,返回true,否則,返回false。 boolean b = weight1 == weight2 ? true : false; //3:輸出結果 System.out.println("b:" + b); }}

      2、需求:一座寺廟里住著三個和尚,已知他們的身高分別為150cm、210cm、165cm,請用程序實現獲取這三個和尚的最高身高。

      public class OperatorTest02 { public static void main(String[] args) { //1:定義三個變量用于保存和尚的身高,單位為cm,這里僅僅體現數值即可。 int height1 = 150; int height2 = 210; int height3 = 165; //2:用三元運算符獲取前兩個和尚的較高身高值,并用臨時身高變量保存起來。 int tempHeight = height1 > height2 ? height1 : height2; //3:用三元運算符獲取臨時身高值和第三個和尚身高較高值,并用最大身高變量保存。 int maxHeight = tempHeight > height3 ? tempHeight : height3; //4:輸出結果 System.out.println("maxHeight:" + maxHeight); }}

      2. 數據輸入(應用)

      我們可以通過 Scanner 類來獲取用戶的輸入。使用步驟如下:

      1、導包。Scanner 類在java.util包下,所以需要將該類導入。導包的語句需要定義在類的上面。

      import java.util.Scanner;

      2、創建Scanner對象。

      Scanner sc = new Scanner(System.in);// 創建Scanner對象,sc表示變量名,其他均不可變

      3、接收數據

      int i = sc.nextInt(); // 表示將鍵盤錄入的值作為int數返回。

      示例:

      import java.util.Scanner;public class ScannerDemo { public static void main(String[] args) { //創建對象 Scanner sc = new Scanner(System.in); //接收數據 int x = sc.nextInt(); //輸出數據 System.out.println("x:" + x); }}

      改寫三個和尚案例,數據使用鍵盤錄入。

      import java.util.Scanner;public class ScannerTest { public static void main(String[] args) { //身高未知,采用鍵盤錄入實現。首先導包,然后創建對象。 Scanner sc = new Scanner(System.in); //鍵盤錄入三個身高分別賦值給三個變量。 System.out.println("請輸入第一個和尚的身高:"); int height1 = sc.nextInt(); System.out.println("請輸入第二個和尚的身高:"); int height2 = sc.nextInt(); System.out.println("請輸入第三個和尚的身高:"); int height3 = sc.nextInt(); //用三元運算符獲取前兩個和尚的較高身高值,并用臨時身高變量保存起來。 int tempHeight = height1 > height2 ? height1 : height2; //用三元運算符獲取臨時身高值和第三個和尚身高較高值,并用最大身高變量保存。 int maxHeight = tempHeight > height3 ? tempHeight : height3; //輸出結果。 System.out.println("這三個和尚中身高最高的是:" + maxHeight +"cm"); }}

      import java.util.Scanner;public class IfTest02 { public static void main(String[] args) { //小明的考試成績未知,可以使用鍵盤錄入的方式獲取值 Scanner sc = new Scanner(System.in); System.out.println("請輸入一個分數:"); int score = sc.nextInt(); //由于獎勵種類較多,屬于多種判斷,采用if...else...if格式實現 //為每種判斷設置對應的條件 //為每種判斷設置對應的獎勵 //數據測試:正確數據,邊界數據,錯誤數據 if(score>100 || score<0) { System.out.println("你輸入的分數有誤"); } else if(score>=95 && score<=100) { System.out.println("山地自行車一輛"); } else if(score>=90 && score<=94) { System.out.println("游樂場玩一次"); } else if(score>=80 && score<=89) { System.out.println("變形金剛玩具一個"); } else { System.out.println("胖揍一頓"); } }}

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:php四種文件加載語句
      下一篇:Windows下如何同時啟動多個微信
      相關文章
      亚洲AV无码成人精品区在线观看| 亚洲剧情在线观看| 亚洲一区中文字幕在线观看| 国产成人精品日本亚洲| 亚洲人午夜射精精品日韩| 亚洲成av人片天堂网无码】| 亚洲中文字幕精品久久| 亚洲国产激情在线一区| 中文字幕亚洲第一在线| 久久精品亚洲综合| 亚洲AV无码乱码国产麻豆穿越 | 亚洲白色白色永久观看| 亚洲综合在线视频| 亚洲天天在线日亚洲洲精| 亚洲国产精华液网站w| 狠狠色伊人亚洲综合成人| 精品亚洲永久免费精品| 亚洲精品中文字幕乱码三区| 国产精一品亚洲二区在线播放| 亚洲午夜久久久影院伊人| 亚洲综合伊人久久大杳蕉| 亚洲日韩在线观看免费视频| 亚洲综合精品网站| 中文字幕亚洲专区| 国产午夜亚洲精品理论片不卡| AV在线播放日韩亚洲欧| 亚洲中文字幕无码久久2017| 亚洲人成图片小说网站| 亚洲日韩中文在线精品第一| 亚洲综合熟女久久久30p| 亚洲国产精品无码久久一区二区 | 亚洲国产精品综合久久20| 亚洲精品人成网在线播放影院 | 国产gv天堂亚洲国产gv刚刚碰| 伊人久久综在合线亚洲91 | 中文字幕乱码亚洲无线三区| 亚洲人成色777777老人头| 亚洲aⅴ天堂av天堂无码麻豆| 亚洲AⅤ视频一区二区三区| 亚洲日本一区二区一本一道| 在线A亚洲老鸭窝天堂|