<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    午后星期午

    2014年3月26日 #

    值傳遞、引用傳遞的區別

    所謂值傳遞,就是說僅將對象的值傳遞給目標對象,就相當于copy;系統將為目標對象重新開辟一個完全相同的內存空間。
    所謂引用,就是說將對象在內存中的地址傳遞給目標對象,就相當于使目標對象和原始對象對應同一個內存存儲空間。此時,如果對目標對象進行修改,內存中的數據也會改變。
    值傳遞,例如:
    class TestT1 
    public static void main(String[] args) 
    int i = 5; 
    int j = 6; 
    System.out.println("before exchange i = "+i);//交換前
    exchange(i, j); 
    System.out.println("after exchange i = "+i);//交換后
    }
    public static void exchange(int a,int b) 
    int k;
    k = a;a = b; b = k; 
    程序的結果是5!!! 
    這說明,原始數據類型是按值傳遞的,這個按值傳遞也是指的是進行賦值時的行為。 
    Java語言明確說明取消了指針,因為指針往往是在帶來方便的同時也是導致代碼不安全的根源,同時也會使程序的變得非常復雜難以理解,但這只是在Java語言中沒有明確的指針定義,實質上每一個new語句返回的都是一個指針的引用。
    引用傳遞,例如:
    class TestT2
    public static void main(String[] args) 
    StringBuffer s= new StringBuffer("good"); 
    StringBuffer s2=s; 
    s2.append(" afternoon."); 
    System.out.println(s); 
    對象s和s2指向的是內存中的同一個地址因此指向的是同一個對象。 
    這里的意思是進行對象賦值操作是傳遞的是對象的引用,因此對象是按引用傳遞的。 
    程序運行的輸出是: 
    good afternoon. 
    這說明s2和s是同一個對象。
    總結: 
    大家都知道,在JAVA中變量有以下兩種:
    基本類型變量,包括boolean、byte、char、short、int、long、float、double。
    引用類型變量,包括類、接口、數組(基本類型數組和對象數組)。
    對于基本類型和基本類型變量被當作參數傳遞給方法時,是值傳遞。在方法實體中,無法給原變量重新賦值,也無法改變它的值。
    而對象作為參數,如果在方法中把對象作為參數,方法調用時,參數傳遞的是對象的引用,即在方法調用時,實際參數把對對象的引用傳遞給形式參數。這是實際參數與形式參數指向同一個地址,即同一個對象,方法執行時,對形式參數的改變實際上就是對實際參數的改變,這個結果在調用結束后被保留了下來。

    形參和實參有以下顯著的區別:
        1、形參不能離開方法。形參只有在方法內才會發生作用,也只有在方法中使用,不會在方法外可見。而實參可以再程序的任何地方都使用。
        2、形參代表一個合集,具有不確定性,而形參代表一個獨立事物,具有確定性(即使是為null)。也就是說,形參不能代表具體的對象,只能代表這些對象共同的屬性(比如超類、各種其他自定義屬性等等),而實參則是具體的對象(比如超類的實例)。
        3、形參的值在調用時根據調用者更改,實參則用自身的值更改形參的值(指針、引用皆在此列)

    posted @ 2014-03-26 22:29 午后星期午 閱讀(142) | 評論 (0)編輯 收藏

    2013年12月31日 #

    java枚舉

    1.枚舉是jdk5.0以后的全新類,跟class,interface,annotation的級別一樣;關鍵字enum。

    2.第一個實例 
        public enum Color{ //定義
            Red,White,Blue;
            public static void main(){
                Color xx = Color.Red;//使用
            }
        }

    3.enum 提供的常用方法
        //兩個常用的靜態方法 values(),valueOf()
        for(Color c : c.values()){
            System.out.println(c);
        }

    4.enum 的構造方法
        publc enum Coin{
            penney(1),nickel(3),dime(10),quarter(25);

            private int value;
            public Coin(int value){
                this.value=value;
            }
            
            public static void main(String args[]){
                Coin c = Coin.quarter;
                System.out.println(c.getValue());
            } 
        }

    5.enum的使用場所
        權限控制、游戲方向、需要固定產生類對象的數量

    posted @ 2013-12-31 14:21 午后星期午 閱讀(183) | 評論 (0)編輯 收藏

    Java動態代理設計模式

     所謂動態代理類是在運行時生成的class,在生成它時,你必須提供一組interface給它,則動態代理類就宣稱它實現了這些 interface。當然,動態代理類就充當一個代理,你不要企圖它會幫你干實質性的工作,在生成它的實例時你必須提供一個handler,由它接管實際的工作。
      下面通過實例來說明:
      Subject.java 抽象借口:聲明代理對象和真實對象的共同接口
      [java]
      public interface Subject {
      public void doSomething();
      }
      public interface Subject {
      public void doSomething();
      }
      RealSubject.java 真實被tb代理對象
      [java]
      public class RealSubject implements Subject {
      @Override
      public void doSomething() {
      System.out.println("RealSubject.doSomething");
      }
      }
      public class RealSubject implements Subject {
      @Override
      public void doSomething() {
      System.out.println("RealSubject.doSomething");
      }
      }

      DynamicProxy.java 代理對象
      [java]
      import java.lang.reflect.InvocationHandler;
      import java.lang.reflect.Method;
      public class DynamicProxy implements InvocationHandler {
      private Object object;
      public DynamicProxy(Object object) {
      this.object = object;
      }
      @Override
      public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {
      System.out.println("Before Invoke ! method : " + method);
      //我們可以再代理方法調用前后添加功能
      Object result = method.invoke(object, args);
      System.out.println("object : " + object + " result : " + result + " args : " + args);
      System.out.println("After Invoke !");
      return result;
      }
      }
      import java.lang.reflect.InvocationHandler;
      import java.lang.reflect.Method;
      public class DynamicProxy implements InvocationHandler {
      private Object object;
      public DynamicProxy(Object object) {
      this.object = object;
      }
      @Override
      public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {
      System.out.println("Before Invoke ! method : " + method);
      //我們可以再代理方法調用前后添加功能
      Object result = method.invoke(object, args);
      System.out.println("object : " + object + " result : " + result + " args : " + args);
      System.out.println("After Invoke !");
      return result;
      }
      }
      Client.java 測試
      [java]
      import java.lang.reflect.InvocationHandler;
      import java.lang.reflect.Proxy;
      public class Client {
      public static void main(String[] args) throws Exception {
      //創建目標對象,也就是被代理對象
      RealSubject realSubject = new RealSubject();
      //將目標對象交給代理
      InvocationHandler handler = new DynamicProxy(realSubject);
      // Class proxyClass = Proxy.getProxyClass(Subject.class.getClassLoader()
      // , new Class[]{Subject.class});
      // Subject subject = (Subject)proxyClass.getConstructor(new Class[]{InvocationHandler.class})
      // .newInstance(new Object[]{handler});
      //返回代理對象,相當于上面兩句
      Subject subject = (Subject) Proxy.newProxyInstance(handler.getClass().getClassLoader(),
      realSubject.getClass().getInterfaces(),
      handler);
      //叫代理對象去doSomething(),其實在代理對象中的doSomething()中還是會
      //用handler來調用invoke(proxy, method, args) 參數proxy為調用者subject(this),
      //method為doSomething(),tb參數為方法要傳入的參數,這里沒有
      subject.doSomething();
      }
      }
      import java.lang.reflect.InvocationHandler;
      import java.lang.reflect.Proxy;
      public class Client {
      public static void main(String[] args) throws Exception {
      //創建目標對象,也就是被代理對象
      RealSubject realSubject = new RealSubject();
      //將目標對象交給代理
      InvocationHandler handler = new DynamicProxy(realSubject);
      // Class proxyClass = Proxy.getProxyClass(Subject.class.getClassLoader()
      // , new Class[]{Subject.class});
      // Subject subject = (Subject)proxyClass.getConstructor(new Class[]{InvocationHandler.class})
      // .newInstance(new Object[]{handler});
      //返回代理對象,相當于上面兩句
      Subject subject = (Subject) Proxy.newProxyInstance(handler.getClass().getClassLoader(),
      realSubject.getClass().getInterfaces(),
      handler);
      //叫代理對象去doSomething(),其實在代理對象中的doSomething()中還是會
      //用handler來調用invoke(proxy, method, args) 參數proxy為調用者subject(this),
      //method為doSomething(),參數為方法要傳入的參數,這里沒有
      subject.doSomething();
      }
      }
      打印結果:
      Before Invoke ! method : public abstract void Subject.doSomething()
      RealSubject.doSomething
      object : RealSubject@ec6b00 result : null args : null
      After Invoke !
      注意:
      Java動態代理涉及到的兩個類:
      InvocationHandler:該接口中僅定義了一個Object : invoke(Object proxy, Method method, Object[] args);參數proxy指代理類,method表示被代理的方法,args為method中的參數數組,返回值Object為代理實例的方法調用返回的值。這個抽象方法在代理類中動態實現。
      Proxy:所有動態代理類的父類,提供用于創建動態代理類和實例的靜態方法。

    posted @ 2013-12-31 14:07 午后星期午 閱讀(117) | 評論 (0)編輯 收藏

    Java數組使用實用的技巧

    本文分享了關于Java數組最頂級的11大方法,幫助你解決工作流程問題,無論是運用在團隊環境或是在私人項目中,你都可以直接拿來用!

    0.  聲明一個數組(Declare an array)
     
    String[] aArray = new String[5];
    String[] bArray = {"a","b","c", "d", "e"};
    String[] cArray = new String[]{"a","b","c","d","e"};

    1.  在Java中輸出一個數組(Print an array in Java)
     
    int[] intArray = { 1, 2, 3, 4, 5 };
    String intArrayString = Arrays.toString(intArray);
     
    // print directly will print reference value
    System.out.println(intArray);
    // [I@7150bd4d
     
    System.out.println(intArrayString);
    // [1, 2, 3, 4, 5]

    2. 從數組中創建數組列表(Create an ArrayList from an array)
     
    String[] stringArray = { "a", "b", "c", "d", "e" };
    ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));
    System.out.println(arrayList);
    // [a, b, c, d, e]

    3. 檢查愛淘寶數組中是否包含特定值(Check if an array contains a certain value)
     
    String[] stringArray = { "a", "b", "c", "d", "e" };
    boolean b = Arrays.asList(stringArray).contains("a");
    System.out.println(b);
    // true
     
    4. 連接兩個數組( Concatenate two arrays)
     
    int[] intArray = { 1, 2, 3, 4, 5 };
    int[] intArray2 = { 6, 7, 8, 9, 10 };
    // Apache Commons Lang library
    int[] combinedIntArray = ArrayUtils.addAll(intArray, intArray2);
    5. 聲明一個數組內鏈(Declare an array inline )
     
    method(new String[]{"a", "b", "c", "d", "e"});
     
    6. 將數組元素加入到一個獨立的字符串中(Joins the elements of the provided array into a single String)

    // containing the provided list of elements
    // Apache common lang
    String j = StringUtils.join(new String[] { "a", "b", "c" }, ", ");
    System.out.println(j);
    // a, b, c
     
    7. 將數組列表轉換成一個數組 (Covnert an ArrayList to an array)
     
    String[] stringArray = { "a", "b", "c", "d", "e" };
    ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));
    String[] stringArr = new String[arrayList.size()];
    arrayList.toArray(stringArr);
    for (String s : stringArr)
        System.out.println(s);
     
    8. 將數組轉換成一個集合(Convert an array to a set)
     
    Set<String> set = new HashSet<String>(Arrays.asList(stringArray));
    System.out.println(set);
    //[d, e, b, c, a]
     
    9. 反向數組(Reverse an array)
     
    int[] intArray = { 1, 2, 3, 4, 5 };
    ArrayUtils.reverse(intArray);
    System.out.println(Arrays.toString(intArray));
    //[5, 4, 3, 2, 1]
     
    10. 刪除數組元素(Remove element of an array)
     
    int[] intArray = { 1, 2, 3, 4, 5 };
    int[] removed = ArrayUtils.removeElement(intArray, 3);
    //create a new array
    System.out.println(Arrays.toString(removed));
     
    One more – convert int to byte array
     
    byte[] bytes = ByteBuffer.allocate(4).putInt(8).array();
     
    for (byte t : bytes) {
       System.out.format("0x%x ", t);
    }

    posted @ 2013-12-31 14:07 午后星期午 閱讀(101) | 評論 (0)編輯 收藏

    通過java獲取mac地址

    package  cc.wshao.util;

    import  java.io.BufferedReader;
    import  java.io.InputStreamReader;
    import  java.util.regex.Matcher;
    import  java.util.regex.Pattern;

    public   class  GetMacAddress {
         
         
    public   static  String callCmd(String[] cmd) {  
             String result 
    =   "" ;  
             String line 
    =   "" ;  
             
    try  {  
                 Process proc 
    =  Runtime.getRuntime().exec(cmd);  
                 InputStreamReader is 
    =   new  InputStreamReader(proc.getInputStream());  
                 BufferedReader br 
    =   new  BufferedReader (is);  
                 
    while  ((line  =  br.readLine ())  !=   null ) {  
                 result 
    +=  line;  
                 }  
             }  
             
    catch (Exception e) {  
                 e.printStackTrace();  
             }  
             
    return  result;  
         }
         
         
         
         
         
    /**  
          * 
          * 
    @param  cmd  第一個命令 
          * 
    @param  another 第二個命令 
          * 
    @return    第二個命令的執行結果 
          
    */   
         
    public   static  String callCmd(String[] cmd,String[] another) {  
             String result 
    =   "" ;  
             String line 
    =   "" ;  
             
    try  {  
                 Runtime rt 
    =  Runtime.getRuntime();  
                 Process proc 
    =  rt.exec(cmd);  
                 proc.waitFor();  
    // 已經執行完第一個命令,準備執行第二個命令  
                 proc  =  rt.exec(another);  
                 InputStreamReader is 
    =   new  InputStreamReader(proc.getInputStream());  
                 BufferedReader br 
    =   new  BufferedReader (is);  
                 
    while  ((line  =  br.readLine ())  !=   null ) {  
                     result 
    +=  line;  
                 }  
             }  
             
    catch (Exception e) {  
                 e.printStackTrace();  
             }  
             
    return  result;  
         }
         
         
         
         
    /**  
          * 
          * 
    @param  ip  目標ip,一般在局域網內 
          * 
    @param  sourceString 命令處理的結果字符串 
          * 
    @param  macSeparator mac分隔符號 
          * 
    @return   mac地址,用上面的分隔符號表示 
          
    */   
         
    public   static  String filterMacAddress( final  String ip,  final  String sourceString, final  String macSeparator) {  
             String result 
    =   "" ;  
             String regExp 
    =   " ((([0-9,A-F,a-f]{1,2} "   +  macSeparator  +   " ){1,5})[0-9,A-F,a-f]{1,2}) " ;  
             Pattern pattern 
    =  Pattern.compile(regExp);  
             Matcher matcher 
    =  pattern.matcher(sourceString);  
             
    while (matcher.find()){  
                 result 
    =  matcher.group( 1 );  
                 
    if (sourceString.indexOf(ip)  <=  sourceString.lastIndexOf(matcher.group( 1 ))) {  
                     
    break ;   // 如果有多個IP,只匹配本IP對應的Mac.  
                 }  
             }
       
             
    return  result;  
         }
         
         
         
         
    /**  
          * 
          * 
    @param  ip 目標ip 
          * 
    @return    Mac Address 
          * 
          
    */   
         
    public   static  String getMacInWindows( final  String ip){  
             String result 
    =   "" ;  
             String[] cmd 
    =  {  
                     
    " cmd " ,  
                     
    " /c " ,  
                     
    " ping  "   +   ip  
                     };  
             String[] another 
    =  {  
                     
    " cmd " ,  
                     
    " /c " ,  
                     
    " arp -a "   
                     };  
       
             String cmdResult 
    =  callCmd(cmd,another);  
             result 
    =  filterMacAddress(ip,cmdResult, " - " );  
       
             
    return  result;  
         }  
       
       
         
    /**  
         * 
         * 
    @param  ip 目標ip 
         * 
    @return    Mac Address 
         * 
         
    */   
         
    public   static  String getMacInLinux( final  String ip){  
             String result 
    =   "" ;  
             String[] cmd 
    =  {  
                     
    " /bin/sh " ,  
                     
    " -c " ,  
                     
    " ping  "   +   ip  +   "  -c 2 && arp -a "   
                     };  
             String cmdResult 
    =  callCmd(cmd);  
             result 
    =  filterMacAddress(ip,cmdResult, " : " );  
       
             
    return  result;  
         }  
         
         
    /**
          * 獲取MAC地址 
          * 
    @return  返回MAC地址
          
    */
         
    public   static  String getMacAddress(String ip){
             String macAddress 
    =   "" ;
             macAddress 
    =  getMacInWindows(ip).trim();
             
    if (macAddress == null || "" .equals(macAddress)){
                 macAddress 
    =  getMacInLinux(ip).trim();
             }
             
    return  macAddress;
         }
       
         
    /**  
         * 測試 
         
    */   
         
    public   static   void  main(String[] args) {           
             System.out.println(getMacAddress(
    " 192.168.10.203 " ));
         }
         

    }

    posted @ 2013-12-31 13:58 午后星期午 閱讀(124) | 評論 (0)編輯 收藏

    Ehcache詳細解讀

         摘要: Ehcache  是現在最流行的純Java開源緩存框架,配置簡單、結構清晰、功能強大,最初知道它,是從Hibernate的緩存開始的。網上中文的EhCache材料以簡單介紹和配置方法居多,如果你有這方面的問題,請自行google;對于API,官網上介紹已經非常清楚,請參見官網;但是很少見到特性說明和對實現原理的分析,因此在這篇文章里面,我會詳細介紹和分析EhCache的特性,加上一些自己...  閱讀全文

    posted @ 2013-12-31 13:56 午后星期午 閱讀(119) | 評論 (0)編輯 收藏

    忘掉jQuery,使用JavaScript原生API

         摘要: jQuery 目前已經成為最流行的JavaScript庫,它可以讓開發者“write less, do more(寫得更少,做得更多)”,這也是它的核心理念。通過它,用戶可以更方便地處理HTML documents、events,更輕松地實現動畫效果、AJAX交互等。  盡管jQuery幫助開發者節省了大量的工作,但是并不是所有的產品都適合使用jQuery。jQu...  閱讀全文

    posted @ 2013-12-31 13:55 午后星期午 閱讀(100) | 評論 (0)編輯 收藏

    java 泛型深入

         摘要: 泛型的好處:    泛型的主要好處就是讓編譯器保留參數的類型信息,執行類型檢查,執行類型轉換(casting)操作,編譯器保證了這些類型轉換(casting)的絕對無誤。 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.co...  閱讀全文

    posted @ 2013-12-31 13:45 午后星期午 閱讀(107) | 評論 (0)編輯 收藏

    log4j 配置

    Log4j ( Log for Java ) 是 Apache 下的一個開源項目,通過 Log4j,可以將程序運行的信息輸送到指定的目的地。這個目的地可以是控制臺、文件、郵箱等。

    Log4j 支持兩種格式的文件配置,即 properties 和 xml 兩種格式的文件。下面將要介紹的是采用 properties 格式的配置。

     log4j.properties 配置示例  


    log4j.rootLogger
    = INFO, logOutput

    log4j.appender.logOutput = org.apache.log4j.FileAppender

    log4j.appender.logOutput.file = src/main/resources/log/demoLog.log

    log4j.appender.logOutput.layout = org.apache.log4j.PatternLayout

    log4j.appender.logOutput.layout.conversionPattern = %n%n%d{yyyy-MM-dd HH:mm:ss}%n%p  %c  %L%n%m



    ① [ 配置日志級別和輸出源 ]

          log4j.rootLogger = 級別,輸出源1,輸出源2 … …

         日志信息優先級別 :  ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF

         常用優先級別 : DEBUG < INFO < WARN < ERROR

             DEBUG : 程序的調試信息

             INFO  程序的一般信息,例如,用戶的登錄、登出,方法執行成功信息等

             WARN 程序的警告信息

             ERROR 程序的嚴重錯誤信息,例如,程序的執行拋出異常

             Tips : 只有當日志信息的優先級別大于等于配置的日志信息級別,日志信息才會被記錄到日志。

         日志輸出源 : 

             日志輸出源的個數可以是一個,也可以是多個,多個輸出源的時候,輸出源與輸出源之間用逗號分隔

             日志輸出源的名字可以根據需要,自定義起名

    ② [ 指定輸出源輔助類 ]

          log4j.appender.輸出源名稱 = Appender.class

          常用的 Appender ( 在 log4j-version.jar 的 org.apache.log4j 包下 ) : 

          1. org.apache.log4j.FileAppender(文件)

          2. org.apache.log4j.ConsoleAppender(控制臺)

          3. org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件)

          4. org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)

    ③ [ 指定輸出源文件存放路徑 ]

          log4j.appender.輸出源名稱.file = path ( 日志具體存放路徑 )

    ④ [ 指定輸出源文件的格式布局 ]

          log4j.appender.輸出源名稱.layout = Layout.class

         常用的 Layout ( 在 log4j-version.jar 的 org.apache.log4j 包下 ) : 

         1. org.apache.log4j.SimpleLayout  ( 簡單的布局方式,含日志信息的級別和信息 )

         2. org.apache.log4j.PatternLayout  ( 可自定義的布局模式 )

         3. org.apache.log4j.HTMLLayout   ( 以 HTML 方式布局 )

    ⑤ [ 自定義布局模式,可選 ]

          log4j.appender.輸出源名稱.layout.conversionPattern

         %p : 輸出日志信息優先級,即DEBUG,INFO,WARN,ERROR,FATAL …

         %d : 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,例如:%d{yyy-MMM-dd HH:mm:ss},輸出類似:2012-10-10 12:20:18 

         %r : 輸出自應用啟動到輸出該log信息耗費的毫秒數

         %c : 輸出日志信息所屬的類,通常就是所在類的全名

         %t : 輸出產生該日志事件的線程名

         %l : 輸出日志事件的發生位置

         %x : 輸出和當前線程相關聯的信息

         %% : 輸出一個"%"字符

         %F : 輸出日志消息產生時所在的文件名稱

         %L : 輸出代碼中的行號

         %m : 輸出代碼中指定的消息,產生的日志具體信息

         %n : 換行

    [ 轉載出處:http://www.tkk7.com/fancydeepin ]

    posted @ 2013-12-31 13:27 午后星期午 閱讀(112) | 評論 (0)編輯 收藏

    Java生成隨機字符串

    package cc.wshao.steer.util;

    import java.util.Random;

    public class StrUtils {

     public static final String str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

     public static void main(String[] args) {
      System.out.print(getString(6));
     }

     public static String getString(int length) {
      StringBuffer sb = new StringBuffer();
      Random random = new Random();
      for (int i = 0; i < length; i++) {
       sb.append(str.charAt(random.nextInt(str.length())));
      }
      return sb.toString();
     }

    }

    posted @ 2013-12-31 13:22 午后星期午 閱讀(123) | 評論 (0)編輯 收藏

    僅列出標題  下一頁
    主站蜘蛛池模板: 日亚毛片免费乱码不卡一区| 亚洲高清日韩精品第一区| 日韩亚洲产在线观看| 99精品国产成人a∨免费看| 国产亚洲欧洲Aⅴ综合一区| 特级毛片免费播放| 亚洲AV无码乱码精品国产| 人人公开免费超级碰碰碰视频| 国产国产成年年人免费看片| 亚洲精品无码你懂的| 日韩中文字幕在线免费观看| 亚洲精品中文字幕| 国产午夜影视大全免费观看| 人人狠狠综合久久亚洲| 亚洲国产精品13p| 伊人免费在线观看| 亚洲AV日韩精品久久久久久久| 桃子视频在线观看高清免费视频| 亚洲成人中文字幕| 91免费播放人人爽人人快乐| 亚洲中文字幕无码一去台湾| 国产福利免费在线观看| 黄色网址免费在线观看| 久久久无码精品亚洲日韩蜜桃| 999久久久免费精品播放| 亚洲av永久综合在线观看尤物| 夜夜爽免费888视频| 一个人看的www视频免费在线观看| 亚洲综合无码精品一区二区三区| 97超高清在线观看免费视频| 亚洲国产精品久久66| 国产又黄又爽又猛免费app| 最新亚洲卡一卡二卡三新区| 国产午夜免费秋霞影院| 十八禁在线观看视频播放免费| 亚洲黄色在线电影| 午夜一级免费视频| 伊人免费在线观看| 亚洲AV永久无码天堂影院| 亚洲男同帅GAY片在线观看| 97热久久免费频精品99|