今年年初到海淀圖書城購買了一個Agile Java(敏捷java),匆匆翻看了幾章就束之高閣,最近在班車上無事可作,拿出來重讀一下,一方面學一下TDD,一方面梳理一下本身的JAVA基礎知識,讀書的時間是在上下班的班車上,到家後會記錄一些讀書的筆記。
這個系列其實不能以敏捷JAVA爲題,由於我寫的大部分可能都是JAVA的基礎只是,藉助敏捷JAVA這本書的講解思路來梳理一下本身的JAVA基礎知識。
第一章
在軟件開發過程當中,咱們知道或者使用過多種方法:瀑布法、RUP、XP等等,敏捷java是教授程序員使用另一種方法:TDD 測試驅動:一種輕量級的軟件開發方法。
其實無論重量級仍是敏捷的開發過程,都須要作如下事情:
需求分析、計劃、設計、編碼、測試、部署、文檔、評審。沒有通過上述步驟,編寫出來的代碼是xx代碼!
1、關於JAVA,JDK,JRE
Java是一種高級編程語言,所謂高級編程語言,是相對於低級編程語言來講的,語言發展經歷了:機器語言、彙編語言、高級編程語言等階段。很遺憾,越高級的編程語言執行效率越低,可是越符合人類的思惟習慣。java
Java的開發環境(JDK)主要包括【Java編譯器】 javac,和【java虛擬機】java,還有一些開發接口(API)。程序員
用Java編寫的軟件執行的時候,首先由javac也就是【java編譯器】將源代碼(也就是後綴爲.java)編譯成【java虛擬機】可以執行(並且可以快速加載)的.class代碼,java虛擬機加載.class文件後調用操做系統的相關指令執行之(其實這是一個加載--檢查--執行的過程)編程
【java編譯器】編譯的時候會檢查一些語法錯誤,這也是java健壯的一個緣由(大部分錯誤在編譯的時候就檢查出來了)。編程語言
Java程序是運行在【java虛擬機】之上的,也能夠將【java虛擬機】看做是一個解釋器,他負責解釋.class,並將其分派給底層的操做系統;他還負責分配和控制代碼運行的內存。post
【java虛擬機】也能夠看做一個虛擬的操做系統。測試
JRE沒有包括【Java編譯器】javac,只是包含了【java虛擬機】java,他提供java程序運行的最小環境。而JDK自己就包含一個JRE,這也是爲何安裝了JDK以後就不須要再安裝JRE的緣由。this
2、對象
衆所周知,JAVA是面向對象的,什麼是對象呢?在一些JAVA方面的書上老是會說這麼一句話:對象是類的實例------純粹的屁話,既然都不瞭解什麼是對象,怎麼可能知道什麼是類呢!編碼
對象是什麼呢?Thinking in java中說,世間萬物皆是對象。這個說法也是很籠統的,並且讓初學者更是看的一頭霧水。spa
在敏捷java中,做者對對象的定義是這樣的:對象是某些相關概念在代碼級別的抽象。對象能夠是事務的抽象,也能夠是活動的抽象!好比:一隻叫小黃的狗是一個對象。再好比您正在構建一個工資系統,其中支票是一個對象,員工的級別分類是一個對象,一個支票打印機也是一個對象!活動的抽象:一些列的動做也能夠被抽象成一個對象,好比一個路由處理能夠保證員工被導向恰當的處理隊列。上面這段話中頻繁的出現兩個字「抽象」,抽象是啥?抽象就是放大本質,去掉無關的內容!操作系統
對象都有屬性和行爲(屬性能夠理解爲變量,行爲能夠理解爲方法)
面向對象系統首先關注的是行爲。面向對象的核心概念是對象之間的消息傳遞,從而影響對象的行爲!
3、類
類提供了一種方式來定義一組相關的對象的共同性。類是一個模板,一個藍本用來建立新的對象。
類與類之間的關係:
下面這一段類與類之間的關係是引用javaeye的一篇文章
原文地址:
http://www.javaeye.com/post/182099
(1)泛化(Generalization)
(2)關聯(Association)
(3)依賴(Dependency)
(4)聚合(Aggregation)
UML圖與應用代碼例子:
1.泛化(Generalization)
[泛化]
表示類與類之間的繼承關係,接口與接口之間的繼承關係,或類對接口的實現關係。通常化的關係是從子類指向父類的,與繼承或實現的方法相反。
[具體表現]
父類 父類實例=new 子類()
[UML圖](圖1.1)
圖1.1 Animal類與Tiger類,Dog類的泛化關係
[代碼表現]
- class Animal{}
- class Tiger extends Animal{}
- public class Test
- {
- public void test()
- {
- Animal a=new Tiger();
- }
- }
2.依賴(Dependency)
[依賴]
對於兩個相對獨立的對象,當一個對象負責構造另外一個對象的實例,或者依賴另外一個對象的服務時,這兩個對象之間主要體現爲依賴關係。
[具體表現]
依賴關係表如今局部變量,方法的參數,以及對靜態方法的調用
[現實例子]
好比說你要去擰螺絲,你是否是要藉助(也就是依賴)螺絲刀(Screwdriver)來幫助你完成擰螺絲(screw)的工做
[UML表現](圖1.2)
圖1.2 Person類與Screwdriver類的依賴關係
[代碼表現]
- public class Person{
-
- public void screw(Screwdriver screwdriver){
- screwdriver.screw();
- }
- }
3.關聯(Association)
[關聯]
對於兩個相對獨立的對象,當一個對象的實例與另外一個對象的一些特定實例存在固定的對應關係時,這兩個對象之間爲關聯關係。
[具體表現]
關聯關係是使用實例變量來實現
[現實例子]
好比客戶和訂單,每一個訂單對應特定的客戶,每一個客戶對應一些特定的訂單;再例如公司和員工,每一個公司對應一些特定的員工,每一個員工對應一特定的公司
[UML圖] (圖1.3)
圖1.3 公司和員工的關聯關係
[代碼表現]
- public class Company{
- private Employee employee;
- public Employee getEmployee(){
- return employee;
- }
- public void setEmployee(Employee employee){
- this.employee=employee;
- }
-
- public void run(){
- employee.startWorking();
- }
- }
(4)聚合(Aggregation)
[聚合]
當對象A被加入到對象B中,成爲對象B的組成部分時,對象B和對象A之間爲彙集關係。聚合是關聯關係的一種,是較強的關聯關係,強調的是總體與部分之間的關係。
[具體表現]
與關聯關係同樣,聚合關係也是經過實例變量來實現這樣關係的。關聯關係和聚合關係來語法上是沒辦法區分的,從語義上才能更好的區分二者的區別。
[關聯與聚合的區別]
(1)關聯關係所涉及的兩個對象是處在同一個層次上的。好比人和自行車就是一種關聯關係,而不是聚合關係,由於人不是由自行車組成的。
聚合關係涉及的兩個對象處於不平等的層次上,一個表明總體,一個表明部分。好比電腦和它的顯示器、鍵盤、主板以及內存就是彙集關係,由於主板是電腦的組成部分。
(2)對於具備彙集關係(尤爲是強彙集關係)的兩個對象,總體對象會制約它的組成對象的生命週期。部分類的對象不能單獨存在,它的生命週期依賴於總體類的 對象的生命週期,當總體消失,部分也就隨之消失。好比張三的電腦被偷了,那麼電腦的全部組件也不存在了,除非張三事先把一些電腦的組件(好比硬盤和內存) 拆了下來。
[UML圖](圖1.4)
圖1.3 電腦和組件的聚合關係
[代碼表現]
- public class Computer{
- private CPU cpu;
- public CPU getCPU(){
- return cpu;
- }
- public void setCPU(CPU cpu){
- this.cpu=cpu;
- }
-
- public void start(){
-
- cpu.run();
- }
- }
4、其餘
一些java命令:
查看當前jdk版本 java –version
Java –g:none 執行的時候不要生成調試信息。
設置classpath:
Javac –classpath(or -cp) .;d:/xxx/xxx/xxx.jar Hello.java 若是有多個,每一個之間用;分割。
javac -cp .; com/*.java //編譯com包下面全部的java文件
java -cp .;com.*.java