java基礎鞏固訓練營【第一輪】(六) 面向對象的JAVA

本章的測試代碼存放在 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 包路徑下面產看

 

 

 

Code:
  1. public class Employee {   
  2.   
  3.        
  4.        
  5.     private Long     id; //員工編號   
  6.     private String   name; //員工姓名   
  7.     private Date     brithday; //出生年月   
  8.     private Double   weight; //體重   
  9.     private String   job;// 0,代表普通魚啊弄,1,代表小組負責人,2,代表部門負責人   
  10.        
  11.        
  12.     /** 默認的構造方法 */  
  13.     public Employee(){   
  14.            
  15.            
  16.     }   
  17.         
  18.     // 其餘代碼可請參考com.j2ee110.csdn.leader.oob下面的同名類   
  19.   
  20. }   
  21.   
  22.   
  23. public class Teamleader extends Employee {   
  24.   
  25.     /**  
  26.      *   
  27.      */  
  28.     public Teamleader() {   
  29.            
  30.            
  31.         this.setJob("1");   
  32.            
  33.     }   
  34.   
  35.     /**  
  36.      *   
  37.      * @param id  
  38.      * @param name  
  39.      * @param brithday  
  40.      * @param weight  
  41.      * @param job  
  42.      */  
  43.     public Teamleader(Long id, String name, Date brithday, Double weight) {   
  44.         super(id, name, brithday, weight, "1");   
  45.        
  46.     }   
  47.        
  48.        
  49.        
  50.     /**  
  51.      * 在本類中重新改寫了 toString()方法  
  52.      */  
  53.     public String toString() {   
  54.         return new ToStringBuilder(this).append("brithday"this.getBrithday())   
  55.                 .append("name"this.getName()).append("id"this.getId()).append("job",   
  56.                         this.getJob()).append("weight"this.getWeight()).append("title","我是組長").toString();   
  57.     }   
  58.        
  59.        
  60.        
  61.        
  62.   
  63. }   
  64.   
  65.   
  66.   
  67. public class DivisionPrincipal extends Employee {   
  68.   
  69.     /**  
  70.      *   
  71.      */  
  72.     public DivisionPrincipal() {   
  73.            
  74.         this.setJob("2");   
  75.     }   
  76.   
  77.     /**  
  78.      * @param id  
  79.      * @param name  
  80.      * @param brithday  
  81.      * @param weight  
  82.      * @param job  
  83.      */  
  84.     public DivisionPrincipal(Long id, String name, Date brithday, Double weight) {   
  85.         super(id, name, brithday, weight, "2");   
  86.     }   
  87.        
  88.        
  89.     /**  
  90.      * 在本類中重新改寫了 toString()方法  
  91.      */  
  92.     public String toString() {   
  93.         return new ToStringBuilder(this).append("brithday"this.getBrithday())   
  94.                 .append("name"this.getName()).append("id"this.getId()).append("job",   
  95.                         this.getJob()).append("weight"this.getWeight()).append("title","我是部門經理").toString();   
  96.     }   
  97.        
  98.   
  99.        
  100. }   
  101.   
  102.   

 

上述代碼中首先定義了一個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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章