Java基礎(chǔ)語法_Day06

一、面向?qū)ο蟾攀?/h5>
  • 面向?qū)ο笏枷?/li>
  • 面向過程思想與面向?qū)ο笏枷?br> A:什么是面向過程
    面向過程,其實(shí)就是面向著具體的每一個(gè)步驟和過程,把每一個(gè)步驟和過程完成,然后由這些功能方法相互調(diào)用,完成需求。
    例如:吃煎餅果子利用面向過程的思想:
    1.學(xué)習(xí)攤煎餅的技術(shù)
    2.買材料雞蛋,油,蔥等等
    3.開始攤
    4.吃
    5.收拾
    B:什么是面向?qū)ο?br> 面向?qū)ο笏枷刖褪遣粩嗟膭?chuàng)建對(duì)象,使用對(duì)象,指揮對(duì)象做事情。(如果有對(duì)象,直接用對(duì)象,對(duì)我們直接提供服務(wù))
    例如:吃煎餅果子利用面向?qū)ο蟮乃枷?/li>
  1. 找會(huì)攤煎餅的大媽(創(chuàng)建一個(gè)攤煎餅大媽的對(duì)象)
  2. 調(diào)用其攤煎餅的技能(功能),傳遞進(jìn)去錢參數(shù)
  3. 返回給我們一個(gè)煎餅
  • 面向過程特點(diǎn)與面向?qū)ο筇攸c(diǎn)
    A:面向過程:
    強(qiáng)調(diào)的是過程,所有事情都需要自己完成
    B:面向?qū)ο?
    是一種更符合我們思想習(xí)慣的思想(懶人思想,我把事情自己不做,交給別人去做)
    可以將復(fù)雜的事情簡(jiǎn)單化(對(duì)使用者來說簡(jiǎn)單了,對(duì)象里面還是很復(fù)雜的)
    將我們從執(zhí)行者變成了指揮者角色發(fā)生了轉(zhuǎn)換
  • 案例代碼一:
 package com.neuedu.demo;
/*
* 面向?qū)ο笏枷耄?*         面向?qū)ο笫腔诿嫦蜻^程的編程思想。
* 
*         面向過程:強(qiáng)調(diào)的是每一個(gè)功能的步驟
*         面向?qū)ο螅簭?qiáng)調(diào)的是對(duì)象,然后由對(duì)象去調(diào)用功能
* 
* 面向?qū)ο蟮乃枷胩攸c(diǎn):
*         A:是一種更符合我們思考習(xí)慣的思想
*         B:可以將復(fù)雜的事情簡(jiǎn)單化
*         C:將我們從執(zhí)行者變成了指揮者
* 
* 舉例:
*         買電腦:
*             面向過程:我要買電腦--我要明確買電腦的意義--上網(wǎng)查對(duì)>應(yīng)的參數(shù)信息--去三好街買電腦--討價(jià)還價(jià)--買回電腦
*             面向?qū)ο螅何乙I電腦--班長(zhǎng)去給我買電腦--買回電腦
*         洗衣服:
*             面向過程:把衣服脫下來--找一個(gè)盆--放點(diǎn)洗衣粉--加點(diǎn)水--浸泡10分鐘--揉一揉--清洗衣服--擰干--晾起來
*             面向?qū)ο螅喊岩路撓聛?-打開全自動(dòng)洗衣機(jī)--扔衣服--按鈕--晾起來
*/
public class Demo {

}
  • 類與對(duì)象及其使用:
  • 類與對(duì)象概述:
    A:我們學(xué)習(xí)編程是為了什么
    為了把我們?nèi)粘I钪袑?shí)物用學(xué)習(xí)語言描述出來
    B:我們?nèi)绾蚊枋霈F(xiàn)實(shí)世界事物
    屬性 就是該事物的描述信息(事物身上的名詞)
    行為 就是該事物能夠做什么(事物身上的動(dòng)詞)
    C:Java中最基本的單位是類,Java中用class描述事物也是如此
    成員變量 就是事物的屬性
    成員方法 就是事物的行為
    D:定義類其實(shí)就是定義類的成員(成員變量和成員方法)
    a:成員變量 和以前定義變量是一樣的,只不過位置發(fā)生了改變。在類中,方法外。
    b:成員方法 和以前定義方法是一樣的,只不過把static去掉,后面在詳細(xì)講解static的作用。
    E:類和對(duì)象的概念
    a:類:是一組相關(guān)的屬性和行為的集合(我們班所有的同學(xué)都具備相同的屬性和行為,比如:姓名,年齡,學(xué)習(xí),這樣就把所有的學(xué)生成為學(xué)生類)
    b:對(duì)象:是該類事物的具體體現(xiàn)(說某個(gè)同學(xué)時(shí),他都具備自己特有的屬性和行為)
    c:舉例:
    類 學(xué)生
    對(duì)象 具體的某個(gè)學(xué)生就是一個(gè)對(duì)象
    比如:車是一個(gè)類,具體的開的奔馳、寶馬,就是對(duì)象
  • 案例代碼二:
package com.neuedu.demo;
/*
* 我們學(xué)習(xí)編程語言,其實(shí)就是為了把現(xiàn)實(shí)世界的事物模擬出來,實(shí)現(xiàn)信息化。
* 
* 我們是如何表示現(xiàn)實(shí)世界的事物的呢?
*         A:屬性    就是事物的描述信息
*         B:行為    就是事物能夠做什么
*         舉例:學(xué)生
* 
* Java語言最基本的單位是類,所以,我們?cè)诤竺娴膶W(xué)習(xí)過程中,是通過類來體現(xiàn)現(xiàn)實(shí)世界事物的。
* 
* 類:是一組相關(guān)的屬性和行為的集合
* 對(duì)象:就是該事物的具體體現(xiàn)
*         舉例:
*             類       學(xué)生
*             對(duì)象      班長(zhǎng)
*/
public class Demo2 {

}
  • 類與對(duì)象案例:
  • 學(xué)生類案例
  • 案例代碼三:
package com.neuedu.demo;
/*
* 類的定義:
*         類是用來描述現(xiàn)實(shí)世界的事物的
* 
* 事物:
*         屬性  事物的描述信息
*         行為  事物能夠做什么
* 
* 類是如何和事物進(jìn)行對(duì)應(yīng)的呢?
*         類:
*             成員變量
*             成員方法
* 
* 需求:寫一個(gè)學(xué)生類
* 
* 學(xué)生事物:
*         屬性:姓名,年齡...
*         行為:學(xué)習(xí),吃飯...
* 
* 學(xué)生類:
*         成員變量:姓名,年齡
*         成員方法:學(xué)習(xí),吃飯
*
* 成員變量:和我們前面學(xué)習(xí)過的變量的定義是一樣的。
*         位置不同:類中,方法外
*         初始化值:不需要給初始化值
* 成員方法:和我們前面學(xué)習(xí)過的方法的定義是一樣的。
*         去掉static關(guān)鍵字
*/
public class Student {
  //成員變量
  //姓名
  String name;
  //年齡
  int age;
  
  //成員方法
  //學(xué)習(xí)的方法
  public void study() {
      System.out.println("好好學(xué)習(xí),天天向上");
  }
  
  //吃飯的方法
  public void eat() {
      System.out.println("學(xué)習(xí)餓了要吃飯");
  }
}
package com.neuedu.demo;
/*
* Student是一個(gè)學(xué)生事物描述類,main方法不適合放在它里面。
* 
* 使用一個(gè)類,其實(shí)就是使用該類的成員。(成員變量和成員方法)
* 而我們要想使用一個(gè)類的成員,就必須首先擁有該類的對(duì)象。
* 我們?nèi)绾螕碛幸粋€(gè)類的對(duì)象呢?
*         創(chuàng)建對(duì)象就可以了?
* 我們?nèi)绾蝿?chuàng)建對(duì)象呢?
*         格式:類名 對(duì)象名 = new 類名();
* 對(duì)象如何訪問成員呢?
*         成員變量:對(duì)象名.變量名
*         成員方法:對(duì)象名.方法名(...)
*/
public class StudentDemo {
  public static void main(String[] args) {
      //格式:類名 對(duì)象名 = new 類名();
      Student s = new Student();
      //System.out.println("s:"+s); >//com.neuedu.demo.Student@193c0cf
      
      //直接輸出成員變量值
      System.out.println("姓名:"+s.name); //null
      System.out.println("年齡:"+s.age); //0
      System.out.println("----------");
      
      //給成員變量賦值
      s.name = "趙四";
      s.age = 28;
      
      //再次輸出成員變量的值
      System.out.println("姓名:"+s.name); //趙四
      System.out.println("年齡:"+s.age); //28
      System.out.println("----------");
      
      //調(diào)用成員方法
      s.study();
      s.eat();
  }
}
  • 手機(jī)類案例
  • 案例代碼四:
package com.neuedu.demo;
/*
* 手機(jī)類:
*         成員變量:品牌,價(jià)格,顏色...
*         成員方法:打電話,發(fā)短信...
*/
public class Phone {
  //品牌
  String brand;
  //價(jià)格
  int price;
  //顏色
  String color;
  
  //打電話
  public void call(String name) {
      System.out.println("給"+name+"打電話");
  }
  
  //發(fā)短信
  public void sendMessage() {
      System.out.println("群發(fā)短信");
  }
}
package com.neuedu.demo;
/*
* 手機(jī)類的測(cè)試類
*/
public class PhoneDemo {
  public static void main(String[] args) {
      //創(chuàng)建對(duì)象
      Phone p = new Phone();
      
      //輸出成員變量值
      System.out.println("品牌:"+p.brand);//null
      System.out.println("價(jià)格:"+p.price);//0
      System.out.println("顏色:"+p.color);//null
      System.out.println("------------");
      
      //給成員變量賦值
      p.brand = "錘子";
      p.price = 2999;
      p.color = "棕色";
      
      //再次輸出成員變量值
      System.out.println("品牌:"+p.brand);//錘子
      System.out.println("價(jià)格:"+p.price);//2999
      System.out.println("顏色:"+p.color);//棕色
      System.out.println("------------");
      
      //調(diào)用成員方法
      p.call("趙四");
      p.sendMessage();
  }
}
  • 對(duì)象的內(nèi)存圖
  • 一個(gè)對(duì)象的內(nèi)存圖:


    一個(gè)對(duì)象的內(nèi)存圖.png
  • 方法公用內(nèi)存圖:


    方法公用內(nèi)存圖.png
  • 案例代碼五:
package com.neuedu.demo;
/*
* 手機(jī)類的測(cè)試類
*/
public class PhoneDemo2 {
  public static void main(String[] args) {
      Phone p = new Phone();
      p.brand = "小米5s";
      p.price = 1999;
      p.color = "銀色";
      System.out.println(p.brand+"---"+p.price+"---"+p.color);
      p.call("林青霞");
      p.sendMessage();
      
      Phone p2 = new Phone();
      p2.brand = "IPhone7S";
      p2.price = 7999;
      p2.color = "土豪金";
      System.out.println(p2.brand+"---"+p2.price+"---"+p2.color);
      p2.call("張曼玉");
      p2.sendMessage();
  }
}
  • 兩個(gè)引用指向同一個(gè)對(duì)象內(nèi)存圖:


    兩個(gè)引用指向同一個(gè)對(duì)象內(nèi)存圖.png
  • 案例代碼六:
package com.neuedu.demo;
/*
* 手機(jī)類的測(cè)試類
*/
public class PhoneDemo3 {
  public static void main(String[] args) {
      Phone p = new Phone();
      p.brand = "OPPO";
      p.price = 2999;
      p.color = "白色";
      System.out.println(p.brand+"---"+p.price+"---"+p.color);
      
      Phone p2 = p;
      p2.brand = "魅族";
      p2.price = 1999;
      p2.color = "藍(lán)色";
      System.out.println(p.brand+"---"+p.price+"---"+p.color);
      System.out.println(p2.brand+"---"+p2.price+"---"+p2.color);
  }
}
  • 成員變量和局部變量區(qū)別:
  • 案例代碼七:
package com.neuedu.demo;
/*
* 成員變量和局部變量的區(qū)別:
*         A:在類中的位置不同
*             成員變量:類中,方法外
*             局部變量:方法中或者方法聲明上(形式參數(shù))
*         B:在內(nèi)存中的位置不同
*             成員變量:堆內(nèi)存
*             局部變量:棧內(nèi)存
*         C:生命周期不同
*             成員變量:隨著對(duì)象的創(chuàng)建而存在,隨著對(duì)象的消失而消失
*             局部變量:隨著方法的調(diào)用而存在,隨著方法的調(diào)用完畢而消失
*         D:初始化值的問題
*             成員變量:有默認(rèn)值
*             局部變量:沒有默認(rèn)值。必須先定義,賦值,最后使用
*/
public class Variable {
  int x;
  public void show() {
      int y = 0;

      System.out.println(x);
      System.out.println(y);
  }
}
二、面向?qū)ο筇匦灾庋b
  • 封裝與私有關(guān)鍵字
  • private關(guān)鍵字
    A:private關(guān)鍵字:
    a:是一個(gè)權(quán)限修飾符。
    b:可以修飾成員(成員變量和成員方法)
    c:被private修飾的成員只在本類中才能訪問。
  • 案例代碼八:
package com.neuedu.demo;
/*
* 學(xué)生類
* 
* 通過對(duì)象直接訪問成員變量,會(huì)存在數(shù)據(jù)安全問題
* 這個(gè)時(shí)候,我們就想能不能不讓外界的對(duì)象直接訪問成員變量呢?
* 能。
* 如何實(shí)現(xiàn)呢?
*         private關(guān)鍵字
* 
* private:
*         是一個(gè)修飾符
*         可以修飾成員變量,也可以修飾成員方法
*         被private修飾的成員只能在本類中被訪問
* 
* 針對(duì)private修飾的成員變量,我們會(huì)相應(yīng)的提供getXxx()和setXxx()用于獲取和設(shè)置成員變量的值,方法用public修飾
*/
public class Student {
  String name;
  //int age;
  private int age;
  
  public void setAge(int a) {
      if(a<0 || a>200) {
          System.out.println("你給的年齡有誤");
      }else {
          age = a;
      }
  }
  
  public int getAge() {
      return age;
  }
  
  public void show() {
      System.out.println("姓名是:"+name+",年齡是:"+age);
  }
}
package com.neuedu.demo;
/*
* 學(xué)生類的測(cè)試類
*/
public class StudentDemo {
  public static void main(String[] args) {
      //創(chuàng)建學(xué)生對(duì)象
      Student s = new Student();
      s.show();
      
      s.name = "哈哈";
      //s.age = 28;
      //s.age = -28;
      //s.setAge(-28);
      s.setAge(28);
      s.show();
  }
}
  • private最常見應(yīng)用
    A:把成員變量用private修飾
    B:提供對(duì)應(yīng)的getXxx()/setXxx()方法
  • 案例代碼九:
package com.neuedu.demo;
/*
* 學(xué)生類
*/
public class Student {
  private String name;
  private int age;
  
  public void setName(String n) {
      name = n;
  }
  
  public String getName() {
      return name;
  }
  
  public void setAge(int a) {
      age = a;
  }
  
  public int getAge() {
      return age;
  }
}
package com.neuedu.demo;
/*
* 學(xué)生類的測(cè)試類
*/
public class StudentDemo {
  public static void main(String[] args) {
      //創(chuàng)建對(duì)象
      Student s = new Student();
      System.out.println(s.getName()+"---"+s.getAge());
      
      s.setName("嘿嘿");
      s.setAge(28);
      System.out.println(s.getName()+"---"+s.getAge());
  }
}
  • 封裝的概述和好處:
    A:封裝概述
    是面向?qū)ο笕筇卣髦?br> 是面向?qū)ο缶幊陶Z言對(duì)客觀世界的模擬,客觀世界里成員變量都是隱藏在對(duì)象內(nèi)部的,外界無法直接操作和修改。就像剛才說的年齡。
    B:封裝原則:
    將不需要對(duì)外提供的內(nèi)容都隱藏起來。
    把屬性隱藏,提供公共方法對(duì)其訪問。
    成員變量private,提供對(duì)應(yīng)的getXxx()/setXxx()方法
    C:好處:
    通過方法來控制成員變量的操作,提高了代碼的安全性
    把代碼用方法進(jìn)行封裝,提高了代碼的復(fù)用性
  • this關(guān)鍵字
  • this關(guān)鍵字由來和使用:
    A:this:代表所在類的對(duì)象引用
    方法被哪個(gè)對(duì)象調(diào)用,this就代表那個(gè)對(duì)象
    B:什么時(shí)候使用this呢
    局部變量和成員變量重名
  • 案例代碼十:
package com.neuedu.demo;
/*
* 學(xué)生類
* 
* 起名字我們要求做到見名知意。
* 而我們現(xiàn)在的代碼中的n和a就沒有做到見名知意,所以我要改進(jìn)。
* 
* 如果有局部變量名和成員變量名相同,在局部使用的時(shí)候,采用的是就近的原則。
* 
* 我們有沒有辦法把局部變量的name賦值給成員變量的name呢?
* 有。
* 
* 什么辦法呢?
*         用this關(guān)鍵字就可以解決這個(gè)問題
* 
* this:代表所在類的對(duì)象引用
*         方法被哪個(gè)對(duì)象調(diào)用,this就代表那個(gè)對(duì)象
* 
* 使用場(chǎng)景:
*         局部變量隱藏成員變量
*/
public class Student {
  private String name;
  private int age;
  
  public void setName(String name) { //"林青霞"
      //name = name;
      this.name = name;
  }
  
  public String getName() {
      return name;
  }
  
  public void setAge(int age) {
      //age = age;
      this.age = age;
  }
  
  public int getAge() {
      return age;
  }
}
package com.neuedu.demo;
/*
* 學(xué)生類的測(cè)試類
*/
public class StudentDemo {
  public static void main(String[] args) {
      //創(chuàng)建對(duì)象
      Student s = new Student();
      System.out.println(s.getName()+"---"+s.getAge());
      
      s.setName("嘻嘻");
      s.setAge(28);
      System.out.println(s.getName()+"---"+s.getAge());
  }
}
三、面向?qū)ο笾畼?gòu)造方法
  • 構(gòu)造方法:

主要用來給對(duì)象的數(shù)據(jù)進(jìn)行初始化

  • 構(gòu)造方法格式:
    A:構(gòu)造方法格式
    a:方法名與類名相同
    b:沒有返回值類型,連void都沒有
    c:沒有具體的返回值
  • 案例代碼十一:
package com.neuedu.demo;
/*
* 構(gòu)造方法:
*         給對(duì)象的數(shù)據(jù)進(jìn)行初始化
* 
* 格式:
*         方法名和類名相同
*         沒有返回值類型,連void都不能寫
*         沒有具體的返回值
*
*/
public class Student { 
  public Student() {
      System.out.println("這是構(gòu)造方法");
  }
}
package com.neuedu.demo;
public class StudentDemo {
  public static void main(String[] args) {
      //如何調(diào)用構(gòu)造方法呢?
      //通過new關(guān)鍵字調(diào)用
      //格式:類名 對(duì)象名 = new 構(gòu)造方法(...);
      Student s = new Student();
  }
}
  • 構(gòu)造方法注意事項(xiàng)與重載
    如果你不提供構(gòu)造方法,系統(tǒng)會(huì)給出默認(rèn)構(gòu)造方法
    如果你提供了構(gòu)造方法,系統(tǒng)將不再提供
    構(gòu)造方法也是可以重載的,重載條件和普通方法相同
  • 案例代碼十二:
package com.neuedu.demo;
/*
* 構(gòu)造方法:
*         給對(duì)象的數(shù)據(jù)進(jìn)行初始化
* 
* 格式:
*         方法名和類名相同
*         沒有返回值類型,連void都不能寫
*         沒有具體的返回值
* 
* 構(gòu)造方法的注意事項(xiàng):
*         A:如果我們沒有給出構(gòu)造方法,系統(tǒng)將會(huì)提供一個(gè)默認(rèn)的無參構(gòu)造方法供我們使用。
*         B:如果我們給出了構(gòu)造方法,系統(tǒng)將不在提供默認(rèn)的無參構(gòu)造方法供我們使用。
*        這個(gè)時(shí)候,如果我們想使用無參構(gòu)造方法,就必須自己提供。
*        推薦:自己給無參構(gòu)造方法
*      C:構(gòu)造方法也是可以重載的
* 
* 成員變量賦值:
*         A:setXxx()方法
*         B:帶參構(gòu)造方法    
*/
public class Student {
  private String name;
  private int age;
  
  /*
  public Student() {
      System.out.println("這是構(gòu)造方法");
  }
  */
  
  public Student() {}
  
  public Student(String name) {
      this.name = name;
  }
  
  public Student(int age) {
      this.age = age;
  }
  
  public Student(String name,int age) {
      this.name = name;
      this.age = age;
  }

  public void show() {
      System.out.println(name+"---"+age);
  }
}
package com.neuedu.demo;
public class StudentDemo {
  public static void main(String[] args) {
      //如何調(diào)用構(gòu)造方法呢?
      //通過new關(guān)鍵字調(diào)用
      //格式:類名 對(duì)象名 = new 構(gòu)造方法(...);
      Student s = new Student();
      s.show();
      
      //public Student(String name)
      Student s2 = new Student("嘎嘎");
      s2.show();
      
      //public Student(int age)
      Student s3 = new Student(28);
      s3.show();
      
      //public Student(String name,int age)
      Student s4 = new Student("嘎嘎",28);
      s4.show();
  }
}
  • 包含private,無參,有參構(gòu)造的標(biāo)準(zhǔn)學(xué)生類代碼:
    A:類:
    a:成員變量
    b:構(gòu)造方法
    無參構(gòu)造方法
    帶參構(gòu)造方法
    c:成員方法
    getXxx()
    setXxx()
    B:給成員變量賦值的方式
    a:無參構(gòu)造方法+setXxx()
    b:帶參構(gòu)造方法
  • 案例代碼十三:
package com.neuedu.demo;
/*
* 學(xué)生類
*/
public class Student {
  //成員變量
  private String name;
  private int age;
  
  //構(gòu)造方法
  public Student() {}
  
  public Student(String name,int age) {
      this.name = name;
      this.age = age;
  }
  
  //成員方法
  public void setName(String name) {
      this.name = name;
  }
  
  public String getName() {
      return name;
  }
  
  public void setAge(int age) {
      this.age = age;
  }
  
  public int getAge() {
      return age;
  }
}
package com.neuedu.demo;
/*
* 學(xué)生類的測(cè)試類
*/
public class StudentDemo {
  public static void main(String[] args) {
      //無參+setXxx()
      Student s = new  Student();
      s.setName("呵呵");
      s.setAge(28);
      System.out.println(s.getName()+"---"+s.getAge());
      
      //帶參構(gòu)造
      Student s2 = new Student("呵呵",28);
      System.out.println(s2.getName()+"---"+s2.getAge());
  }
}
四、類名作為形參和返回值
  • 類名作為方法的形式參數(shù)
  • 案例代碼十四:
package com.neuedu.demo;

public class Student {
  public void study() {
      System.out.println("好好學(xué)習(xí),天天向上");
  }
}
package com.neuedu.demo;

public class Teacher {
  public void test(Student s) {//接收傳遞過來的Student對(duì)象的地址值
      s.study();                  
  }
}
package com.neuedu.demo;

//需求: 調(diào)用Teacher的test方法

//類名作為形式參數(shù):其實(shí)這里需要的是該類對(duì)象。
public class Test {
  public static void main(String[] args) {
      Teacher t = new Teacher();
      Student s = new Student();
      t.test(s);
  }
}
  • 類名作為返回值案例
  • 案例代碼十五:
package com.neuedu.demo;
public class Student {
public void study() {
System.out.println("好好學(xué)習(xí),天天向上");
}
}
package com.neuedu.demo;
public class Teacher {
public Student getStudent() {
Student s = new Student();
return s;//返回的是Student對(duì)象的地址值
}
}
package com.neuedu.demo;
//需求:  通過Teacher得到Student對(duì)象,然后調(diào)用Student類的方法
//如果方法的返回值是類名:其實(shí)返回的是該類的對(duì)象
public class Test {
public static void main(String[] args) {
Teacher t = new Teacher();
Student s = t.getStudent();
s.study();
}
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容