您好,登錄后才能下訂單哦!
這篇文章主要介紹了java面向對象的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
人們希望構建一個無須深奧的專業訓練就可以進行編程的系統,并且要符合當今的標準慣例。因此,盡管人們發現C++不太適用,但在設計Java的時候還是盡可能地接近C++,以便系統更易于理解,Java剔除了C++中許多很少使用、難以理解、易混淆的特性。在目前看來,這些特性帶來的麻煩遠遠多于其帶來的好處。
的確,Java語法是C++語法的一個“純凈”版本。這里沒有頭文件、指針運算(甚至指針語法)、結構、聯合、操作符重載、虛基類等。然而,設計者并沒有試圖清除C++中所有不適當的特性。例如,switch語句的語法在Java中就沒有改變。如果你了解C++就會發現可以輕而易舉地轉換到Java語法。
Java發布時,實際上C++并不是最常用的程序設計語言。很多開發人員都在使用VisualBasic和它的拖放式編程環境。這些開發人員并不覺得Java簡單。很多年之后Java開發環境才迎頭趕上。如今,Java開發環境已經遠遠超出大多數其他編程語言的開發環境。
簡單的另一個方面是小。Java的目標之一是支持開發能夠在小型機器上獨立運行的軟件。基本的解釋器以及類支持大約僅為40KB;再加上基礎的標準類庫和對線程的支持(基本上是一個自包含的微內核)大約需要增加175KB。
在當時,這是一個了不起的成就。當然,由于不斷的擴展,類庫已經相當龐大了。現在有一個獨立的具有較小類庫的Java微型版(JavaMicroEdition),這個版本適用于嵌人式設備。
面向對象是一種新興的程序設計方法,或者是一種新的程序設計規范,其基本思想是使用對象、類、繼承、封裝、多態等基本概念來進行程序設計。從現實世界中客觀存在的事物(即對象)出發來構造軟件系統,并且在系統構造中盡可能運用人類的自然思維方式。
分布式系統對于用戶而言,他們面對的就是一個服務器,提供用戶需要的服務而已,而實際上這些服務是通過背后的眾多服務器組成的一個分布式系統,因此分布式系統看起來像是一個超級計算機一樣。
Web的多平臺環境對程序有特別的要求,因為程序必須在各種系統中可靠地執行。因此,在設計Java時,使其具備創建健壯程序的能力被提到了高優先級的地位。為了獲得可靠性,Java在一些關鍵領域進行了限制,從而迫使程序員在程序開發中及早地發現錯誤。同時,使程序員不必再擔心會引起編程錯誤的許多最常見的問題。因為Java是強類型化的語言,它在編譯時檢查代碼。當然不管怎樣,在運行時也檢查代碼。許多難以跟蹤的bug,在運行時通 常難以再現,這種情況在Java中幾乎不可能產生。因為使編寫好的程序在不同的運行條件下,以可預見的方式運行是Java的關鍵特性之一。 為了更好地理解Java是多么健壯,分析程序失敗的兩個主要原因:內存管理錯誤和未處理的異常(即運行時錯誤)。在傳統的編程環境中,內存管理是一件困難、乏味的工作。例如,在C/C++中,程序員必須手動分配和釋放所有動態內存。有時這會導致問題,因為程序員可能會忘記釋放以前分配的內存,或者更糟糕的是,試圖釋放程序其他部分仍然在使用的內存。Java通過為您管理內存的分配和釋放,可以從根本上消除這些問題(事實上,釋放內存完全是自動的,因為Java為不再使用的對象提供了垃圾回收功能)。傳統環境中的異常情況通常是由“除0”或“沒有找到文件”這類錯誤引起的,并且必須使用既笨拙又難以理解的結構對它們進行管理。Java通過提供面向對象的異常處理功能在這個領域提供幫助。在編寫良好的Java程序中,所有運行時錯誤都能夠并且應當由程序進行管理。
Java取消了強大但又危險的指針,而代之以引用。由于指針可進行移動運算,指針可隨便指向一個內存區域,而不管這個區域是否可用,這樣做是危險的,因為原來這個內存地址可能存儲著重要數據或者是其他程序運行所占用的,并且使用指針也容易數組越界。
垃圾回收機制:不需要程序員直接控制內存回收,由垃圾回收器在后臺自動回收不再使用的內存。避免程序忘記及時回收,導致內存泄露。避免程序錯誤回收程序核心類庫的內存,導致系統崩潰。
異常處理機制:Java異常機制主要依賴于try、catch、finally、throw、throws五個關鍵字。
強制類型轉換:只有在滿足強制轉換規則的情況下才能強轉成功。
Java在字節碼的傳輸過程中使用了公開密鑰加密機制(PKC)。
在運行環境提供了四級安全性保障機制:字節碼校驗器 -類裝載器 -運行時內存布局 -文件訪問限制。
編譯器生成一個體系結構中立的目標文件格式,這是一種編譯過的代碼,只要有Java運行時系統,就可以在許多處理器上運行。Java編譯器通過生成與特定的計算機體系結構無關的字節碼指令來實現這一特性。精心設計的字節碼不僅可以很容易地在任何機器上解釋執行,而且還可以迅速地翻譯成本地機器的代碼。
字節碼實現了結構中立,與計算機結構無關。
Java語言之中最大的特點在于其可移植性的支持,所謂的可移植性指的是同一個程序可以在不同的操作系統之間任意的進行部署,這樣就減少了開發的難度,在Java里面如果要想實現可移植性的控制,那么主要依靠的是JVM(Java 虛擬機)。Java虛擬機是一個由軟件和硬件模擬出來的計算機,所有的程序只要有Java虛擬機的支持,那么就可以實現程序的執行,并且不同的操作系統上會有不同版本的JVM存在,這樣就可以實現移植性。
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
有人說Java是編譯型的。因為所有的Java代碼都是要編譯的,.java不經過編譯就無法執行。 也有人說Java是解釋型的。因為java代碼編譯后不能直接運行,它是解釋運行在JVM上的,所以它是解釋型的。
即時編譯器可以監控經常執行哪些代碼并優化這些代碼以提高速度。更為復雜的優化是消除函數調用(即內聯)。即時編譯器知道哪些類已經被加載。基于當前加載的類集,如果特定的函數不會被覆蓋,就可以使用內聯。必要時,還可以撤銷優化。
指的是這個程序(一個進程)運行時產生了不止一個線程。
Java本質為靜態語言,而不是動態語言。動態語言顯著的特點是在程序運行時,可以改變程序結構或變量類型,典型的動態語言有Python、ruby、javascript等。Java不是動態語言,但Java具有一定的動態性,表現在以下幾個方面:
反射機制;
動態字節碼操作;
動態編譯;
執行其他腳本代碼;
對象是系統中用來描述客觀事物的一個實體,它是構成系統的一個基本單位。一個對象由一組屬性和對這組屬性進行操作的一組服務組成。
類的實例化可生成對象,一個對象的生命周期包括三個階段:生成、使用、消除。
當不存在對一個對象的引用時,該對象成為一個無用對象。Java的垃圾收集器自動掃描對象的動態內存區,把沒有引用的對象作為垃圾收集起來并釋放。當系統內存用盡或調用System.gc( )要求垃圾回收時,垃圾回收線程與系統同步運行。
類是具有相同屬性和方法的一組對象的集合,它為屬于該類的所有對象提供了統一的抽象描述,其內部包括屬性和方法兩個主要部分。在面向對象的編程語言中,類是一個獨立的程序單位,它應該有一個類名并包括屬性和方法兩個主要部分。
Java中的類實現包括兩個部分:類聲明和類體。
[public][abstract|final] class className [extends superclassName] [implements interfaceNameList]{……}
其中,修飾符public,abstract,final 說明了類的屬性,className為類名,superclassName為類的父類的名字,interfaceNameList為類所實現的接口列表。
class className{ [public | protected | private ] [static] [final] [transient] [volatile] type variableName;//成員變量 [public | protected | private ] [static] [final | abstract] [native] [synchronized] returnType methodName([paramList]) [throws exceptionList]{ statements }//成員方法 }
成員變量限定詞的含義:
static: 靜態變量(類變量)
final: 常量;transient: 暫時性變量,用于對象存檔,用于對象的串行化
volatile: 貢獻變量,用于并發線程的共享
方法的實現也包括兩部分內容:方法聲明和方法體。
static: 類方法,可通過類名直接調用
abstract: 抽象方法,沒有方法體
final: 方法不能被重寫
native: 集成其它語言的代碼
synchronized: 控制多個并發線程的訪問
方法聲明包括方法名、返回類型和外部參數。其中參數的類型可以是簡單數據類型,也可以是復合數據類型(又稱引用數據類型)。
對于簡單數據類型來說,java實現的是值傳遞,方法接收參數的值,但不能改變這些參數的值。如果要改變參數的值,則用引用數據類型,因為引用數據類型傳遞給方法的是數據在內存中的地址,方法中對數據的操作可以改變數據的值。
方法體是對方法的實現,它包括局部變量的聲明以及所有合法的Java指令。方法體中聲明的局部變量的作用域在該方法內部。若局部變量與類的成員變量同名,則類的成員變量被隱藏。
為了區別參數和類的成員變量,我們必須使用this。this用在一個方法中引用當前對象,它的值是調用該方法的對象。返回值須與返回類型一致,或者完全相同,或是其子類。當返回類型是接口時,返回值必須實現該接口。
構造方法是一個特殊的方法。Java 中的每個類都有構造方法,用來初始化該類的一個對象。
構造方法具有和類名相同的名稱,而且不返回任何數據類型。
重載經常用于構造方法。
構造方法只能由new運算符調用
Java中的注釋就是解釋說明你的代碼的,Java注釋不會被執行,因此可以隨意添加注釋。
當行注釋//
多行注釋/**/
(1)顯式參數就是方法名括號中間的參數。
(2)隱式參數是在類的方法中調用了類的實例域。這個被調用的實例域就是隱式參數。
(3)代碼實例
package com.nezha.javase; public class Test1107 { private int score; /** * x為顯式參數 * score為隱式參數 * @param x */ public void addScore(int x){ int temp = this.score + x; score += temp; } }
x為顯式參數
score為隱式參數
如果在隱式參數的前面加上this,隱式參數就更清晰。
推薦在隱式參數的前面加上this操作符,this操作符代表的是本類。
在jdk5之前,每個java方法都有固定數量的參數,然而,現在的版本提供了可以用可變參數的方式。
以大家最長用到的sout為例。
System.out.println("獲獎編號:"+i);
println內部調用的都是
public PrintStream printf(String format, Object ... args) { return format(format, args); }
Object…參數類型和Object[]完全一樣,也就是說可以采用…這種聲明方式去接收同類型數組,只是沒有固定數組的大小,因為這是可變參。
這里的省略號...是Java代碼的一部分,它表明這個方法可以接收任意數量的對象。
實際上printf方法接收兩個參數,一個時格式字符串,一個時Object[]數組,其中保存著所有的參數(如果參數是基本類型,自動裝箱會將其轉換為對象)。
編譯器需要對printf的每次調用進行轉換,以便將參數綁定到數組上,并在必要的時候進行自動裝箱。
封裝性就是盡可能的隱藏對象內部細節,對外形成一道邊界,只保留有限的接口和方法與外界進行交互。封裝的原則是使對象以外的部分不能隨意的訪問和操作對象的內部屬性,從而避免了外界對對象內部屬性的破壞。
(1)可以通過對類的成員設置一定的訪問權限,實現類中成員的信息隱藏。
private:類中限定為private的成員,只能被這個類本身訪問。
default:類中不加任何訪問權限限定的成員屬于缺省的(default)訪問狀態,可以被這個類本身和同一個包中的類所訪問。
protected:類中限定為protected的成員,可以被這個類本身、它的子類(包括同一個包中以及不同包中的子類)和同一個包中的所有其他的類訪問。
public:類中限定為public的成員,可以被所有的類訪問。
(2)封裝的優點
良好的封裝能夠減少耦合
類內部的結構可以自由修改
可以對成員變量進行更精確的控制
隱藏信息,實現細節
(3)代碼實例
將 id、name 和 age 屬性設置為私有的,只能本類才能訪問,其他類都訪問不了,如此就對信息進行了隱藏。
提供set方法進行賦值,提供get方法進行取值。
賦值方法set中的this的作用是解決顯式參數與局部變量同名的問題。
package com.nezha.javase; public class Student { //將 id、name 和 age 屬性設置為私有的,只能本類才能訪問,其他類都訪問不了,如此就對信息進行了隱藏。 private Integer id; private String name; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
子類的對象擁有父類的全部屬性與方法,稱作子類對父類的繼承。
Java中父類可以擁有多個子類,但是子類只能繼承一個父類,稱為單繼承。
繼承實現了代碼的復用。
Java中所有的類都是通過直接或間接地繼承java.lang.Object類得到的。
子類不能繼承父類中訪問權限為private的成員變量和方法。
子類可以重寫父類的方法,即命名與父類同名的成員變量。
Java中通過super來實現對父類成員的訪問,super用來引用當前對象的父類。super 的使用有三種情況:
訪問父類被隱藏的成員變量
調用父類中被重寫的方法
調用父類的構造函數
對象的多態性是指在父類中定義的屬性或方法被子類繼承之后,可以具有不同的數據類型或表現出不同的行為。這使得同一個屬性或方法在父類及其各個子類中具有不同的語義。
Java的多態性體現在兩個方面:由方法重載實現的靜態多態性(編譯時多態)和方法重寫實現的動態多態性(運行時多態)。
編譯時多態:在編譯階段,具體調用哪個被重載的方法,編譯器會根據參數的不同來靜態確定調用相應的方法。
運行時多態:由于子類繼承了父類所有的屬性(私有的除外),所以子類對象可以作為父類對象使用。程序中凡是使用父類對象的地方,都可以用子類對象來代替。一個對象可以通過引用子類的實例來調用子類的方法。
方法重載是讓類以統一的方式處理不同數據類型的手段。
一個類中可以創建多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。調用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法。
返回值類型可以相同也可以不相同,無法以返回型別作為重載函數的區分標準。
子類對父類的方法進行重新編寫。如果在子類中的方法與其父類有相同的的方法名、返回類型和參數表,我們說該方法被重寫 (Overriding)。
如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。
子類函數的訪問修飾權限不能低于父類的。
依賴關系表示一個類依賴于另一個類的定義。例如,一個人(Person)可以買車(car)和房子(House),Person類依賴于Car類和House類的定義,因為Person類引用了Car和House。與關聯不同的是,Person類里并沒有Car和House類型的屬性,Car和House的實例是以參量的方式傳入到buy()方法中去的。一般而言,依賴關系在Java語言中體現為局域變量、方法的形參,或者對靜態方法的調用。
關聯(Association)關系是類與類之間的聯接,它使一個類知道另一個類的屬性和方法。關聯可以是雙向的,也可以是單向的。在Java語言中,關聯關系一般使用成員變量來實現。
聚合(Aggregation) 關系是關聯關系的一種,是強的關聯關系。聚合是整體和個體之間的關系。例如,汽車類與引擎類、輪胎類,以及其它的零件類之間的關系便整體和個體的關系。與關聯關系一樣,聚合關系也是通過實例變量實現的。但是關聯關系所涉及的兩個類是處在同一層次上的,而在聚合關系中,兩個類是處在不平等層次上的,一個代表整體,另一個代表部分。
組合(Composition) 關系是關聯關系的一種,是比聚合關系強的關系。它要求普通的聚合關系中代表整體的對象負責代表部分對象的生命周期,組合關系是不能共享的。代表整體的對象需要負責保持部分對象和存活,在一些情況下將負責代表部分的對象湮滅掉。代表整體的對象可以將代表部分的對象傳遞給另一個對象,由后者負責此對象的生命周期。換言之,代表部分的對象在每一個時刻只能與一個對象發生組合關系,由后者排他地負責生命周期。部分和整體的生命周期一樣。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“java面向對象的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。