1.類的概念
在生活中,說到類,可以聯想到類別,同類,會想到一類人,一類事物等等。而這一類人或事物都是具有相同特征或特點和行為的,我們根據不同的特征或特點和行為將他們歸類或分類。同時,當我們認識一個新事物的時候,我們一般來說是從過往的事物中總結事物的特點(特征),並比對新事物,把新事物進行歸類,以達到認識新事物。
在Java程序中,類是對一組具有相同特征和行為的對象的抽象描述。可以看出和生活中對類的定義很像。但是在Java程序中,我們將其相同的特征稱為屬性,行為則稱為方法。
理解:
[1] 類包含了兩個要素:特性和行為 => 同一類事物具有相同的特征和行為。
[2] 類是一個群體性概念。例如:網紅、明星、草根、宅男、蘿莉
[3] 類可以理解為現實生活中所說的 “類型”
引入類的作用:在程序中,引入類的概念,就是為了快速生成更多的具有相同特性和行為的事物。
2.對象的概念
對象是類的具體實現,表示一個獨立的、唯一的個體。
理解
[1] 對象是通過類生成的。對象一定具備該類的特性和行為。
[2] 對象是個體。類是群體。=> 對象是獨立的、唯一的。=> 屬於同一類型的對象也是相互獨立的。
3.類和對象的區別
類是抽象的,是一個群體概念。對象是具體的,是一個獨立個體。
一個獨立的對象一定屬於某個類。理解為類包含對象
4.屬性和方法
4.1屬性
類或者對象具有的特征在程序中稱為屬性(property/attribute)
具體對象的屬性擁有的數據稱為屬性值。
屬於同一類對象都具有相同的屬性,但各個對象都擁有各自的屬性值。這些屬性值區分了不同的對象。
4.2方法
類或者對象的行為稱為方法(Method),可以理解為:一個對象在類中可以做很多東西,能做什么在類里面就叫做方法。
例如:定義一個貓類,貓類中有一個對象加菲貓,加菲貓可以做很多事情如:吃,喝,睡覺,這些在類中稱為方法。
5.定義類和方法
開發者可以根據需要自定義類,語法
[修飾符] class 類名{ 屬性 方法 }
案例:定義一個類,實例化對象
1 public class SuperHero{ 2 //聲明類的屬性 3 String name; 4 int age; 5 char gender; 6 String skill; 7 //聲明類的方法 8 9 public void hit(String kname){ 10 System.out.println("我"+name +kname+"打滅霸"); 11 } 12 13 public void showInfo(){ 14 System.out.println("年齡"+age); 15 System.out.println("性別"+gender); 16 System.out.println(skill); 17 System.out.println("我!"+name+"打錢!"); 18 } 19 }
1 public class Test01{ 2 public static void main(String[] args){ 3 SuperHero thor = new SuperHero();//創建對象,實例化過程 4 //給屬性賦值(.語法) 5 thor.name = "雷神"; 6 thor.gender = '男'; 7 thor.skill = "飛,放電"; 8 //調用方法 9 thor.hit("用個錘子"); 10 thor.showInfo(); 11 12 13 System.out.println(); 14 SuperHero amercaMan =new SuperHero(); 15 //給屬性賦值(.語法) 16 //amercaMan.name = "美國隊長"; 17 //amercaMan.gender = '男'; 18 //amercaMan.skill = "盤他 "; 19 //調用方法 20 amercaMan.hit("用個盤子"); 21 amercaMan.showInfo(); 22 } 23 }
5.1.局部變量和成員變量
局部變量:在方法或者語句塊中聲明的變量稱為局部變量,語句塊就是作用域。
局部變量在其所在的作用域有效,出了作用域就無效。
作用域可以嵌套,內部作用域可以訪問外部作用域的變量。
1 public void learn(String cName){ 2 // 方法中定義的局部變量 3 System.out.println(name+" learn "+cName); 4 5 // 語句塊中定義局部變量 6 { 7 int count = 10; 8 System.out.println(" count "+count); 9 System.out.println("cname"+cName); 10 } 11 12 // System.out.println(" count "+count); 13 }
成員變量:在方法外部,類的內部定義的變量稱為類的成員變量,簡稱成員變量。有些地方把屬性稱為filed(字段)
成員變量必須通過類的實例/對象調用,例如 stu.name ,有時成員變量也稱為實例變量。
成員變量 == 屬性 == 字段 == 實例變量
類中包含兩個成員:成員變量和成員方法。
5.2屬性的聲明
[修飾符] 屬性類型 屬性名稱 [=默認值]
在定義成員變量時可以對其初始化,如果不對其初始化,Java使用默認的值對其初始化。(數值:0,0.0 char:\u0000, boolean:false, 所有引用類型:null)
屬性/成員變量的作用域范圍是整個類體。
6.面向對象編程思維
面向對象編程(oop),把一切都看出對象,通過類構造對象,java程序都是通過class類組織的。
所謂面向對象通過類構造對象,使用對象完成需求。
需求:用手機播放一首歌曲
1 public class Phone{ 2 3 String brand; 4 String type; 5 float price; 6 7 public void showInfo(){ 8 System.out.print("品牌:"+brand); 9 System.out.print(",型號:"+type); 10 System.out.println(",價格:"+price); 11 } 12 13 public void play(Music music){ 14 System.out.println("正在用"+brand+type+"播放<<"+music.name+">>歌曲"); 15 music.showInfo(); 16 } 17 }
1 public class Music{ 2 3 String name; 4 String actor; 5 int times; 6 String content; 7 8 9 public void showInfo(){ 10 System.out.println("-- "+name+" --"); 11 System.out.println("演唱者:"+actor); 12 13 int h = times / 3600; 14 int m = times % 3600 / 60; 15 int s = times % 60; 16 17 System.out.println("時長:"+h+":"+m+":"+s); 18 System.out.println(content); 19 } 20 }
1 public class Test01{ 2 public static void main(String[] args){ 3 4 Music music = new Music(); 5 music.name = "向天再借五百年"; 6 music.actor = "韓磊"; 7 music.times = 356; 8 music.content = "沿着江山起起伏伏溫柔的曲線,\n放馬愛的中原愛的北國和江南"; 9 10 Phone phone = new Phone(); 11 phone.brand = "Apple"; 12 phone.type = "iPhone XR"; 13 phone.price = 5999.0f; 14 15 phone.play(music); 16 17 } 18 }
總結:
面向對象編程就是完成一個復雜的需求需要各個對象之間相互配合完成。對象的創建需要定義類型,java程序就是通過類來組織程序的。
java中一切都是對象。
7.抽象
7.1抽象的概念
根據業務中的對象抽象成計算機可識別的類,簡單的說就是抽出各個對象像的部分。
抽象的步驟
[1] 發現類(歸類)。類一般用名詞。
[2] 發現類的屬性(特征)。屬性一般用名詞。發現類的屬性時,一般只放和業務相關的屬性。
[3] 發現類的方法(行為)。方法一般是動詞。只放和業務相關的方法。
抽象一個下載類。
[1] DownLoad類
[2] url/name/size/progress/type/location…
[3] start()/pause()/stop()/delete()…
7.2類圖
類圖可以讓開發者更直觀地創建類。
+ public / – private