天天看點

什麼是分類分包,static關鍵字的使用

作者:小謝吖

static - 分包

今日目标:

1 能夠了解什麼是分類分包

2 能夠掌握static關鍵字的使用

3 能夠使用分包寫出學生管理系統

一 :案例驅動教學

通過所學知識實作一個demo, 然後用新學的知識去逐漸的完善demo 完善方向: 1 備援代碼 2 業務邏輯性(可讀性) 3 可維護性

思考:回想下面向對象思想:我們應該把任何功能都當成對象,那一個對象應該有什麼樣的表現形式呢? 在一個系統中對象應該是?

1各司其職 ---->對象應該保持簡單性 越是大的公司 裡邊的對象職責劃分越清楚 職責越簡單對于小公司來說 一 個人可能幹許多活。
---->越是複雜的系統 其組成的對象越是簡單的。

2弱耦合性 ---->對象和對象之間的聯系應該盡量弱化:電腦中裡邊有個硬碟 你是希望插在主 闆上還是焊在主機闆上?當然是插在上邊比較好 容易去更換
---->如果是焊在主機闆上 主機闆焊主機上 主機和顯示器在一起,那硬碟壞了整個都得更換。
當然也符合各司其職的優勢
---->當我們存儲空間不夠用的時候 可以更換一塊大的 插拔的設定使得更換很靈活,
且硬碟和電腦聯系比較弱。
---->總之我們在系統軟體的時候 組成的對象和對象之間聯系要弱一些。

3可重用性 ---->盡可能的避免重複性的勞動,寫好之後反複使用
重用的前提是各司其職隻幹一件事 和其他對象是弱耦合的。

4可擴充性 ---->在可重用的基礎上 例如 a對象有1,2兩個功能(也就是兩個方法) 現在我 需要一個對象它需要具備 1,2,3 三個功能
---->我可以建立b對象在a對象的基礎上去擴充出第三個功能 重用a對象的1 2功能 (增量開發)           

二 :分類思想

1.1 問題提問

1 什麼是分類思想

2 黑馬資訊管理系統如何分類           

1.2 視訊時長

11分15秒           

1.3 問題答案

1 什麼是分類思想
1 拆分成各個對象: 各司其職, 一個人隻幹一件事情,一個對象隻負責事情 .
2 對象之間互相配合完成複雜的工作. 比如咱們班級講師對象負責授課,班主任這個對象負責班級管理,兩個對象相 互配合

2 黑馬資訊管理系統如何分類
Student類 标準類 封裝具體的學生資料
StudentDao類 Dao用于通路存儲資料的數組或者集合(将來這個是和資料庫直接打交道的)
StudentService類 業務邏輯處理 做一些個服務邏輯的判斷等
StudentController類 主要是和使用者打交道,(接受使用者的資料,請求分發,傳回資料給使用者看)           

1.4 問題補充

***畫圖分析:
IE 伺服器(Controller service dao) 資料庫           

三 :分包思想:包的概述和定義

1.1 問題提問

1 什麼是分包思想

2 什麼是java中的包

3 怎麼分包           

1.2 視訊時長

6分17秒           

1.3 問題答案

1 什麼是分包思想
java程式是以類為機關組成的
比如咱們用java做個電腦,掃雷 可能寫四五個類就足夠了,但是大型的應用,如經常
用的jd商城,天貓商城 這些個網站功能很複雜 用java寫個千兒八百的類應該是有的,
那麼這麼多類我們應該通過一個有效的方式把他們組織起來,這麼多類編譯完畢之後對應很多個.class檔案。要是有 幾百幾千個檔案 你會用什麼方式把這些類管理起來。--->目錄

當你電腦的檔案多了的時候我們自然會按照檔案的功能
檔案的類型去分門别類的放到很多的目錄中,目錄中還能有子目錄
類似當我們項目中類變多的時候我們也會用包的概念把他們組織起來
包的概念和檔案系統中目錄的概念是可以劃等号的 一個包就對應着一個目錄
目錄中有子目錄 那麼包中可以有子包。
那麼我們在寫類的時候寫代碼的時候就應該描述一下 這個類是屬于哪一個包的
"是以包的本質就是檔案夾"

2 什麼是java中的包
java描述包用一個關鍵字 package

package 包名; //用這個語句來告訴别人這個檔案中的類屬于哪一個包
特點;必須是整個檔案的第一句話 當我們描述了一個類屬于某個包的時候 就應該用目錄的概念把他們管理起來
package p1;

public class Demo{
public static void main(String args []){
System.out.println("Hello World");
}
}
實際開發:
在實際的企業開發當中 任何一個類都會放在對應的包中
是以實際上一般的java代碼永遠都是 package打頭不寫也是可以
那麼編譯之後的.class檔案是放在目前目錄下的
但這不是一個好的習慣 它是和企業開發習慣相違背的 當一個類有了包之後 在使用這個類的時候 定是要
包名.類名 這種寫法叫 [全限定名]/[全類名]

根據以上的說法又引出一個問題:當我們用到類的時候都得寫全限定名非常麻煩。
假如:建立了一個A類 在A類中不可避免的會用到其他類,(java中代碼是以類為機關的 類和類之間也不是互相獨立的)也許你寫了個B類需要在A類中使用 在使用的時候A類中就要出現B類的名字 就得寫B的全限定名

3 怎麼分包
原則: 不同功能的類,放在不同的包中
相同功能的類,放在相同的包中
那具體怎麼做呢
1 軟體要各司其職,原有的系統職責要劃分很清楚,當某個子產品要擴充的時候很容易找到
2 弱耦合性: ABC三個子產品,我擴充一個D子產品替換C子產品,然後對AB子產品沒有影響
3 重用性
4 可擴充

他們對應的就是
1 封裝對象
2 接口 多态
3 封裝方法或者工具類
4 繼承實作擴充           

四 :包的注意事項和類的的通路

1.1 問題提問

1 package 包的注意事項

2 類與類之間如何通路

3 import關鍵字的使用要注意什麼           

1.2 視訊時長

10分55秒           

1.3 問題答案

1 包的注意事項
package 關鍵字的使用
1 為了更好的實作項目中類的管理,提供包的概念
2 使用package聲明類或者接口所屬的包 聲明在源檔案的首行(可執行代碼的第一行)
(隻的是包聲明上邊沒有其他代碼并不一定是在第一行)
3 包 屬于辨別符,遵循辨別符的命名規則,同時應該遵守規範,做到"見名知意",全小寫
(檢視api中的每個類所屬的包)
4 每"."一次 就代表了一層檔案目錄
5 在一個java檔案當中隻有一個package,如果沒有package預設表示無包名

注意: 同一個包下不能夠命名同名的接口,類.
不同的包是可以的.
和系統檔案目錄相關(同一個檔案中不能定義同名--不區分大小寫的同名的檔案)

2 類與類之間如何通路
package p1 package p1 package p2
A類 B類 C類

在A類中用C類:不能直接寫 導包寫import p2.* 或者是p2.C
在A類中用B類:直接用 在同一個包裡邊
不同包的類如果使用需要導包
同一個包中的互相使用不同導包

多個包下,出現了相同的類名稱,就可以使用寫全類名的方式進行區分,

3 import關鍵字的使用要注意什麼
1 在源檔案中顯示的使用import結構導入指定包下類,接口
2 位置: 聲明在包的聲明和類的聲明之間 多個導包并列即可
3 如果導入的是同一個包下的類 可以使用"xxx.*"的方式
表示導入該包下的所有直接類,(xxx子包下的仍需再在導包)
* 通配符
4 java.lang 核心包預設導入 是以該包下的類直接使用
5 如果使用的是目前包下的類,則不用導包直接使用
6 如果要導入是多個不同包,但是是同一個類名的類
需要使用全限定名(全類名 包名+類名)去區分

最初的寫法都是全類名 但是都寫全類名或者是相同包下的類 看起來比較的麻煩是以把重複的
包名抽取出來出現了import導包,注意導包的落腳點是一個包(檔案)

但是這些個注意點不需要刻意關注,使用內建工具,如果需要導包都會提示你,導包,如果是同名的類提示你導哪個包           

1.4 問題補充

public class Demo{
public static void main(String args []){
Date d;
//這個類是我們安裝jdk的時候那套類庫中自帶的類 sun公司寫的 這樣直接寫是不行的 編譯器看到這句話
//它知道你要用哪個Date類嗎 有沒有可能有好多包中有好多類都叫Date
//是以你在用的别的類的時候一定要寫全限定名
java.util.Date d2;
System.out.println("Hello World");
}
}
java.utl.Date;如果用到好多類都這樣寫(全限定名)會不會就成為了程式員的一種負擔。

給大家看一段代碼
package p1;
public class Demo{
public static void main(String args []){
Date d=new Date(); //java.util.Date
List ls=new ArrayList(); //java.util.List //java.util.ArrayList
File f=new File(""); //java.io.File
System.out.println("Hello World");
}
}
上邊這些類你在用到的時候都得寫包名

怎麼解決這個問題:java給我們提供了一個文法叫包的引入 import
格式:import 全限定名


import java.util.Date; //這句話的意思就是在這個類中如果用到Date這個類 都指 //的是java.util.Date類 相當于聲明
import java.util.List;
import java.util.ArrayList;
package p1;
public class Demo{
public static void main(String args []){
Date d=new Date();
List ls=new ArrayList();
File f=new File("");
System.out.println("Hello World");
}
}

import java.util.Date;
import java.util.List;
import java.util.ArrayList;

或者把這三句話寫成 import java.util.*; //* 是個通配符 表示這個包中的所有類,不包括子包、
錯誤寫法: java.*.* //人可以懶 但是不能懶成這個樣子

不寫import行不行是可以的 那就手勤快點 每次都寫類的全限定名
其實在我們最開始學的hello world中也有用到其他類

public class Demo{
public static void main(String args []){
System.out.println("Hello World");
}
}
String System其實都是類 用的時候前邊沒有帶包名 類上沒有寫import
這兩個類屬于同一個包
java.lang 包是以 java.lang.String,java.lang.System
這個包是java的語言包是任何一個程式都離不開的最基礎的一個包是以系統會預設的為每一個程式加上imoprt java.lang.*
隻有這個包是自動引入的
***
總結: import 的作用是 避免重複的寫包名,讓我們的代碼更加的簡潔,少些一些啰嗦的東西,增加開發速度 當然你還要明白一個概念,不是一定要非寫import,也可以每個類都去寫全限定名。
***
總結: 一個java程式的最基本的程式結構是什麼樣的 按照順序
package 0-1 0或者一個
import 預設1個-N 0或者多個
class 1-N 1或者多個 公開類隻能有一個           

五 :需求分析

什麼是分類分包,static關鍵字的使用