本章的測試代碼存放在 com.j2ee110.csdn.leader.oob 包路徑下面
大家的練習代碼存放在 com.j2ee110.csdn.student.姓名標識.oob 包路徑下面
面向對象又叫OOB,當他出來的時候被認爲是一項軟件開發的革命,我記得我當時但是公司的大牛們整天都是OO,方式誰還在面向過程誰就已經落後了。時至今日我們依然可以在各大招聘網站的招聘要求中依舊可以看到,“屬性面向對象編程”,“熟悉OO”,等詞彙。但是,到底什麼是對象,什麼是面向對象的方法,怎麼樣的代碼算是面向對象,其實讓我將我也不能描述清楚,但是我覺得java語言的面向對象我們還是可以探討一下的。
首先對於OOB的靈魂類,java做了很好也很簡單的定義
任何java代碼都必須包含在類中,而在源代碼級別,一個java類的源代碼總是定義的一個類(當然java可以將兩個類定義一個源文件中,但是一個源文件一個類已經成了事實上的標準,關於這部分具體的內容可以參考“java基礎的鏈接”),因此當我們開始寫java代碼的時候總是先創建一個類,然後在類裏面編寫相關的業務方法。
有了類,下面就是對象和對象的生命週期。java對象的定義非常簡單,new 關鍵字,至於對象的生命週期這個是java最讓人放心的地方,JVM提我們管理了,它會把不需要的對象自動刪除。
這個時候有人會提出這樣的問題,JVM怎麼知道哪些對象已經不在被使用呢?這就引出了GC,俗稱“垃圾收集器”,他專門負責把不要使用的對象銷燬並釋放出這些對象佔據的空間,那GC有根據哪些參數來判斷呢?(這是大家在面試的時候可能會碰到的問題,雖然我個人認爲這個問題很無聊,但還是有人問)
如果深入的去探究這些問題可能會寫一本書,還真有這麼一本書《深入java虛擬機》,大家可以看看,這裏我想大家推薦一篇文章,因爲我覺得這篇文章將的比我好
原文地址 Java GC 算法總結
因爲原文的網站不太穩定,所以我在大本營中專貼了一篇
之所以在這裏提到GC的相關算法,那是爲了面試準備的。
java面向對象的三要數
我知道面向對象有三大基本核心就是 繼承、函數重載、和多態。說到這三點,我想已經參加過面試的朋友既愛又恨,愛的是面試的時候總是會被問到這樣的問題,恨的是每當被問到這個問題總是有這樣的感覺,“我知道這三個概念,但是我不知道如何描述這三個概念”,呵呵,恕我直言,我覺得“不知道如何描述就是不知道這個概念”,那麼java中是如何來體現這三大概念呢,我覺得用代碼來說會更加清楚一點。
首先我們先看看在java中繼承是怎麼實現的,其實很簡單隻要用到extends 這個關鍵字即可。代碼(這些代碼都是部分摘要,詳細的代碼請到com.j2ee110.csdn.leader.oob 包路徑下面產看)
- public class Employee {
- private Long id; //員工編號
- private String name; //員工姓名
- private Date brithday; //出生年月
- private Double weight; //體重
- private String job;// 0,代表普通魚啊弄,1,代表小組負責人,2,代表部門負責人
- /** 默認的構造方法 */
- public Employee(){
- }
- // 其餘代碼可請參考com.j2ee110.csdn.leader.oob下面的同名類
- }
- public class Teamleader extends Employee {
- /**
- *
- */
- public Teamleader() {
- this.setJob("1");
- }
- /**
- *
- * @param id
- * @param name
- * @param brithday
- * @param weight
- * @param job
- */
- public Teamleader(Long id, String name, Date brithday, Double weight) {
- super(id, name, brithday, weight, "1");
- }
- /**
- * 在本類中重新改寫了 toString()方法
- */
- public String toString() {
- return new ToStringBuilder(this).append("brithday", this.getBrithday())
- .append("name", this.getName()).append("id", this.getId()).append("job",
- this.getJob()).append("weight", this.getWeight()).append("title","我是組長").toString();
- }
- }
- public class DivisionPrincipal extends Employee {
- /**
- *
- */
- public DivisionPrincipal() {
- this.setJob("2");
- }
- /**
- * @param id
- * @param name
- * @param brithday
- * @param weight
- * @param job
- */
- public DivisionPrincipal(Long id, String name, Date brithday, Double weight) {
- super(id, name, brithday, weight, "2");
- }
- /**
- * 在本類中重新改寫了 toString()方法
- */
- public String toString() {
- return new ToStringBuilder(this).append("brithday", this.getBrithday())
- .append("name", this.getName()).append("id", this.getId()).append("job",
- this.getJob()).append("weight", this.getWeight()).append("title","我是部門經理").toString();
- }
- }
上述代碼中首先定義了一個employee類,然後定義了類teamleader,這個類繼承了類 employee, 代碼的形式很簡單。但是如果從業務角度說,關於上面的定義在業務上的解釋是這樣的“所有員工具有的特性組長都用,但是組長具有一些員工不具備的特性”,在代碼中我們可能會看到employee中的方法teamleader中也可以用,但是如果我們仔細研究便會發現,在“也可以用”之前需要加上兩個字部分,由此引出了類中方法和變量的使用範圍,其實很簡單隻有三個關鍵字,private,property,public。只要記住這三個關鍵字,即可。
我一直認爲代碼是說明一門編程語言特性的最好的方式,爲了說明這三個關鍵字,我在teamleader類和DivisionPrincipal類中使用到了這三個關鍵字。我強烈建議大家動手試一試,大家可以創建相關的對象然後嘗試調用一下。注意大家可以在本章包路徑以外的路徑從新聲明一個類然後調用teamleader類和DivisionPrincipal類的對象,如果還不清楚趕快跟我聯繫。
接口和抽象類
類和對象的基本要素我們介紹完了,但是對於java來說還有一個比較重要但是也是比較搞人的概念,接口和抽象類。曾經無數次在面試中被問及這個概念,我的答案也是從網上看來的:“接口說明一個對象像什麼,而抽象類說明一個對象是什麼”。這就是我的回答,似乎每次都能混過關,但是我覺得能混過關的原因是問的人也不是很清楚他們之間的概念。
因爲我很快也成了問這個問題的人,但是我依舊不能很好的對二者做出區別,既然我也不是很清楚,按我也就不在這裏胡說誤導大家樂,我建議大家看看《Thinking in java》,這本書做出了一個比較好的解釋,但是許多人跟我說他看不懂。但是我還是建議大家仔細閱讀閱讀,要想看懂,讀一遍肯定是不行的。
一點建議
大家仔細研究一下 Employee類,可以發現這個類定義了一些 private filed ,然後又很多針對這些 filed 的get和set方法。其實這就是傳說中的值對象。值得對象就是把數據用對象組織起來,我想大家以後一定會非常多的見到這類對象的。再個合理我想大家一定發現了在這個對象有個 toString() 方法,至於這個方法是做什麼用的,大家可以仔細的考慮考慮,後面遇到的我們在跟大家解釋。
課後練習
今天的課後練習是:
假設我們要對產品進行描述,產品的屬性有(編號,名稱,數量,類型),但是產品還會分爲次品和廢品,次品額外的增加了(發現日期,次品原因)這個兩個屬性,而廢品增加了(報廢時間,發現日期)這兩個屬性。要求用創建相關的類型來確定他們之間的關係
我提供一些英文單詞給大家參考,如果自己詞彙比較豐富的可以不用,但是我強烈反對用 “aaa” “bbb”之類命名
名稱 | 英文 | 簡稱 |
產品 | product | product |
廢品 | wastrel | wastrel |
次品 | defective | defective |
檢查 | check | check |
注意這些代碼必須存放在com.j2ee110.csdn.student.姓名標識.oob 包路徑下面
暑期java基礎鞏固訓練營開始
java基礎鞏固訓練營 簡介
java基礎鞏固訓練營【第一輪】(一)項目環境和規範
java基礎鞏固訓練營【第一輪】(二)JAVA基礎
java基礎鞏固訓練營【第一輪】(三) 編寫、編譯、運行
java基礎鞏固訓練營【第一輪】(四) 利器(IDE工具)
java基礎鞏固訓練營【第一輪】(五) 基本數據類型
java基礎鞏固訓練營【第一輪】(六) 面向對象的JAVA
java基礎鞏固訓練營【第一輪】(七) 數據結構中的java
java基礎鞏固訓練營【第一輪】(八) 文件讀寫
java基礎鞏固訓練營【第一輪】(九) 用java通信
java基礎鞏固訓練營【第一輪】(十) 多線程
java基礎鞏固訓練營【第一輪】(十一) 直面錯誤--java異常
java基礎鞏固訓練營【第一輪】(十二) 我們一起來找茬
ava基礎鞏固訓練營【第一輪】(十三) java桌面應用
java基礎鞏固訓練營【第一輪】(十四) 大家一起做項目
如果您對我的文章感興趣的話,請點擊這裏加我爲好友,讓我們一起進步
http://student.csdn.net/invite.php?u=106708&c=2383a3846076c876