瘋狂Java之學習筆記(25)-------------修飾符">瘋狂Java之學習筆記(25)-------------修飾符
775
2025-03-31
瘋狂Java之學習筆記(14)-----------類、對象
十大最受歡迎的類
每一個Java程序員都有一份屬于自己的Java類排名表。這個排名表沒有嚴格的規(guī)定,也沒有可遵循的規(guī)則,它完全取決于你參與的Java項目的工作。下面這些類,不用我做過多的介紹,Java程序員都知道,因為它們在Java世界中非常的流行。
1. java.lang.String
String類無可爭議的獲得冠軍,應該沒有人會否認這一點。這是一個最終類,用于創(chuàng)建/操作不可變的字符串文字。它從JDK 1.0開始就有了。
2. java.lang.System
System類的使用取決于你工作的項目類型。你可能沒有在項目中使用過它,但它仍然是受歡迎的Java類之一。這是一個不能被實例化的工具類。這個類的主要用途是訪問標準輸入、輸出、環(huán)境變量等等。它自JDK 1.0開始可用。
3. java.lang.Exception
Throwable是所有錯誤和異常的超類。所有異常情況的處理都屬于Exception類。NullPointerException在所有的異常中是最受歡迎的。而Exception異常是在所有異常層次結構的頂部。它自JDK 1.0開始可用。
4. java.util.ArrayList
一個實現(xiàn)數組的數據結構的類。這個類實現(xiàn)了List接口,是最受歡迎的Java集合類的成員。ArrayList和Vector之間的差異是初學者常見的問題之一,它也經常在java面試中被問到。它自JDK 1.2開始引入。
5. java.util.HashMap
一個實現(xiàn)鍵值對數據結構的類。這個類實現(xiàn)了Map接口。類似比較ArrayList與Vector,HashMap與Hashtable也是經常拿來比較的。它也是一個受歡迎的集合類,作為一個屬性-值的容器,經常用在應用程序多個層之間的數據傳遞。它自JDK 1.2開始引入。
6. java.lang.Object
所有Java類的根類。每一個Java類都是Object類的一個子類。經常使用在平臺/框架上。它包含了一些重要方法,比如:equals, hashcode, clone, toString等等。它自從Java誕生的第一天開始可用(JDK 1.0)
7. java.lang.Thread
線程是一個單一執(zhí)行的序列,多個線程可以共同存在,共享資源。我們可以擴展Thread類,并創(chuàng)建自己的線程。當然,使用Runnable也是另一種選擇。是否使用這個類取決于你的應用程序的需要。一個普通的應用程序是完全沒有必要使用線程的。它自JDK 1.0開始引入。
8. java.lang.Class
Class類是一個直接繼承Object類的子類。這個類沒有構造函數,它們的對象是被Java虛擬機通過類加載器加載的。我們大多數人可能沒有直接使用過它,但我認為它是一個重要的做反射的類。它自JDK 1.0開始引入。
9. java.util.Date
這是用來處理日期的類。有時候,我們覺得這個類應該加入更多的實用方法。就像每個企業(yè)級應用程序都會創(chuàng)建一個日期的實用工具單元。它自JDK 1.0開始引入,后來在JDK1.1中發(fā)生巨大變化,棄用了一大堆的方法。
10. java.util.Iterator
這是一個接口。它很受歡迎,用來替換枚舉。這是一個簡單易用的單元,它用Iterable同步工作。它自JDK 1.2開始引入。
我漏掉了你喜歡的嗎?
英文出自:javapapers
本文來自http://www.csdn.net/article/2012-06-04/2806277
Java編程中類和對象的定義
1,什么是類?
答:類是客觀存在的,抽象的,概念的東西。
2,什么是對象?
答:對象是具體的,實際的,代表一個事物。例如:車是一個類,汽車,自行車就是他的對象。
關于類與對象的描述:類是對象的模版,對象是類的一個個體。
類的基本概念
Java程序的基本單位是類,類是對象的實例,或者說對象是類定義的的數據類型的變量。你建立類之后,就可用它來建立許多你需要的對象。Java把每一個可執(zhí)行的成分都變成類。
類的定義形式如下:
class classname extends superclassname
{
.....
}
這?里,classname和superclassname是合法的標識符。要害詞extends用來表明classname是superclassname派生的子類。有一個類叫做Object,它是所有Java類的根。假如你想定義Object的直接子類,你可以省略extends子句,編譯器會自動包含它。下面是一個簡單的類的定義。
在類定義的開始與結束處必須使用花括號。你也許想建立一個矩形類,那么可以用如下代碼:
public class Rectangle
{
......
}
2:類的基本組成
一個類中通常都包含數據與函數兩種類型的元素,我們一般把它叫作屬性和成員函數,在很多時候我們也把成員函數稱為方法(method)。將數據與代碼通過類緊密結合在一起,就形成了現(xiàn)在非常流行的封裝的概念。自然,類的定義也要包括以上兩個部分。
class
3:類的實例創(chuàng)建
矩形類Rectangle中,也許你想把矩形的相關信息寫入類,如:width,height,當然你還可以寫入其它信息,但或許長和寬對簡單的矩形來說已足夠了。現(xiàn)在,類的定義如下所示:
public class Retangle
{
int width,height;
}
當你創(chuàng)建了自己的類之后,通常需要使用它來完成某種工作。你可以通過定義類的實例--對象來實現(xiàn)這種需求。
對象是通過new來創(chuàng)建,實現(xiàn)成員函數如下:Rectangle myrect=new Rectangle,當然,此時對象myrect并沒有做任何什么事;它只保存了矩形的長和寬的信息。有了對象以后,我們怎樣使用對象內部的數據呢?下面是幾個例子:
myrect.width=10;
myrect.height=20;
類的成員函數也是用“.”運算符來被引用的。
有五種對象(PO,VO,DAO,BO,POJO)
1、PO,持久對象(Persistent Object),它們是由一組屬性和屬性的get和set方法組成。
在o/r映射的時候出現(xiàn)的概念,如果沒有o/r映射,沒有這個概念存在了。通常對應數據模型(數據庫),本身還有部分業(yè)務邏輯的處理。可以看成是與數據庫中的表相映射的java對象。最簡單的PO就是對應數據庫中某個表中的一條記錄,多個記錄可以用PO的集合。PO中應該不包含任何對數據庫的操作。PO的屬性是跟數據庫表的字段一一對應的。PO對象需要實現(xiàn)序列化接口。
2、VO:value object值對象。通常用于業(yè)務層之間的數據傳遞,和PO一樣也是僅僅包含數據而已。
但應是抽象出的業(yè)務對象,可以和表對應,也可以不,這根據業(yè)務的需要.PO只能用在數據層,VO用在商業(yè)邏輯層和表示層。各層操作屬于該層自己的數據對象,這樣就可以降低各層之間的耦合,便于以后系統(tǒng)的維護和擴展。
好處:這樣可以減少大量的工作量(也就意味著減少bug,減少風險),也不需要擔心未來的維護工作!
3、DAO:J2EE 開發(fā)人員使用數據訪問對象(Data Access Object DAO)設計模式,以便將低級別的數據訪問邏輯與高級別的業(yè)務邏輯分離。
DAO是Data Access Object數據訪問接口,數據訪問:顧名思義就是與數據庫打交道。夾在業(yè)務邏輯與數據庫資源中間。
在核心J2EE模式中是這樣介紹DAO模式的:為了建立一個健壯的J2EE應用,應該將所有對數據源的訪問操作抽象封裝在一個公共API中。用程序設計的語言來說,就是建立一個接口,接口中定義了此應用程序中將會用到的所有事務方法。在這個應用程序中,當需要和數據源進行交互的時候則使用這個接口,并且編寫一個單獨的類來實現(xiàn)這個接口在邏輯上對應這個特定的數據存儲。
4、BO為Business Object的縮寫,Business Object是業(yè)務對象層,表示應用程序領域內“事物”的所有實體類。
這些實體類駐留在服務器上,并利用服務類來協(xié)助完成它們的職責。?是對數據進行檢索和處理的組件。是簡單的真實世界的軟件抽象。業(yè)務對象通常位于中間層。
業(yè)務對象可以在一個應用中自動的加入一個特定的功能來獲得增值效應。使知識重用變?yōu)榭赡堋1热纾绻阋_發(fā)一個包含多貨幣處理的應用,你可以選擇使用一個已經開發(fā)完成的,包含所有多貨幣處理功能的業(yè)務對象來開始你的開發(fā)。使您的開發(fā)工作極大的減少。
一、業(yè)務對象的必要條件
1.由狀態(tài)和行為組成
2.表達了來自業(yè)務域的一個人,地點,事物或概念
3.可以重用
二、業(yè)務對象的分類
1、實體業(yè)務對象:
表達了一個人,地點,事物或者概念。根據業(yè)務中的名詞從業(yè)務域中提取。如客戶,訂單,物品。
2、過程業(yè)務對象:
表達應用程序中業(yè)務處理過程或者工作流程任務。通常依賴于實體業(yè)務對象,是業(yè)務的動詞。作為應用程序的管理者或者控制者。
3、事件業(yè)務對象:
表達應用程序中由于系統(tǒng)的一些操作造成或產生的一些事件。
5、POJO(Plain Old Java Objects)簡單的Java對象,實際就是普通JavaBeans,是為了避免和EJB混淆所創(chuàng)造的簡稱。
在Java應用程序中的角色使用POJO名稱是為了避免和EJB混淆起來, 而且簡稱比較直接. 其中有一些屬性及其getter setter方法的類,沒有業(yè)務邏輯,有時可以作為VO(value -object)或dto(Data Transform Object)來使用.當然,如果你有一個簡單的運算屬性也是可以的,但不允許有業(yè)務方法,也不能攜帶有connection之類的方法
JAVA對象的生命周期
在Java中,對象的生命周期包括以下幾個階段:
1.??????創(chuàng)建階段(Created)
2.??????應用階段(In Use)
3.??????不可見階段(Invisible)
4.??????不可達階段(Unreachable)
5.??????收集階段(Collected)
6.??????終結階段(Finalized)
7.??????對象空間重分配階段(De-allocated)
圖1. JavaObject Life Cycle
1.創(chuàng)建階段(Created)
在創(chuàng)建階段系統(tǒng)通過下面的幾個步驟來完成對象的創(chuàng)建過程
l? 為對象分配存儲空間
l? 開始構造對象
l? 從超類到子類對static成員進行初始化
l? 超類成員變量按順序初始化,遞歸調用超類的構造方法
l? 子類成員變量按順序初始化,子類構造方法調用
一旦對象被創(chuàng)建,并被分派給某些變量賦值,這個對象的狀態(tài)就切換到了應用階段
2.應用階段(In Use)
對象至少被一個強引用持有著。
3.不可見階段(Invisible)
當一個對象處于不可見階段時,說明程序本身不再持有該對象的任何強引用,雖然該這些引用仍然是存在著的。
簡單說就是程序的執(zhí)行已經超出了該對象的作用域了。
舉例如下圖:本地變量count在25行時已經超出了其作用域,則在此時稱之為count處于不可視階段。當然這種情況編譯器在編譯的過程中會直接報錯了。
圖2. 不可見階段示例
4.不可達階段(Unreachable)
對象處于不可達階段是指該對象不再被任何強引用所持有。
與“不可見階段”相比,“不可見階段”是指程序不再持有該對象的任何強引用,這種情況下,該對象仍可能被JVM等系統(tǒng)下的某些已裝載的靜態(tài)變量或線程或JNI等強引用持有著,這些特殊的強引用被稱為”GC root”。存在著這些GC root會導致對象的內存泄露情況,無法被回收。
5.收集階段(Collected)
當垃圾回收器發(fā)現(xiàn)該對象已經處于“不可達階段”并且垃圾回收器已經對該對象的內存空間重新分配做好準備時,則對象進入了“收集階段”。如果該對象已經重寫了finalize()方法,則會去執(zhí)行該方法的終端操作。
這里要特別說明一下:不要重載finazlie()方法!原因有兩點:
l? 會影響JVM的對象分配與回收速度
在分配該對象時,JVM需要在垃圾回收器上注冊該對象,以便在回收時能夠執(zhí)行該重載方法;在該方法的執(zhí)行時需要消耗CPU時間且在執(zhí)行完該方法后才會重新執(zhí)行回收操作,即至少需要垃圾回收器對該對象執(zhí)行兩次GC。
l? 可能造成該對象的再次“復活”
在finalize()方法中,如果有其它的強引用再次持有該對象,則會導致對象的狀態(tài)由“收集階段”又重新變?yōu)椤皯秒A段”。這個已經破壞了Java對象的生命周期進程,且“復活”的對象不利用后續(xù)的代碼管理。
6.終結階段
當對象執(zhí)行完finalize()方法后仍然處于不可達狀態(tài)時,則該對象進入終結階段。在該階段是等待垃圾回收器對該對象空間進行回收。
7.對象空間重新分配階段
垃圾回收器對該對象的所占用的內存空間進行回收或者再分配了,則該對象徹底消失了,稱之為“對象空間重新分配階段”。
轉載自:https://blog.csdn.net/u011225629/article/details/45290891
Java JDK
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。