🍅 簡介:Java領域優質創作者🏆、CSDN哪吒公眾號作者? 、Java架構師奮斗者💪
🍅 粉絲福利,限時搶購 《Java基礎教程系列》限時九折
🍅 粉絲福利,限時搶購 《Spring Boot基礎教程》限時九折
🍅 掃描主頁左側二維碼,加入群聊,一起學習、一起進步
🍅 歡迎點贊 👍 收藏 ?留言 📝
目錄
一、Java特效
1、簡單性
2、面向物件
3、分布式
4、健壯性
5、安全性
6、體系結構中立
7、可移植性
8、解釋性
9、高性能
10、多執行緒
11、動態性
二、物件
三、類
1、類宣告
2、類體
3、方法體
4、構造方法
5、注釋
6、隱式引數和顯式引數
四、面向物件的基本特性
1、封裝
2、繼承
3、多型
4、多載
5、重寫
五、物件間的四種關系
1、依賴
2、關聯
3、聚合
4、組合
六、【粉絲福利】
【送書啦】
【賺取積分方式】哪吒社區內發帖、點贊、評論都可贏取積分!
以下圖書,四選一!
一、Java特效
1、簡單性
人們希望構建一個無須深奧的專業訓練就可以進行編程的系統,并且要符合當今的標準慣例,因此,盡管人們發現C++不太適用,但在設計Java的時候還是盡可能地接近C++,以便系統更易于理解,Java剔除了C++中許多很少使用、難以理解、易混淆的特性,在目前看來,這些特性帶來的麻煩遠遠多于其帶來的好處,
的確,Java語法是C++語法的一個“純凈”版本,這里沒有頭檔案、指標運算(甚至指標語法)、結構、聯合、運算子多載、虛基類等,然而,設計者并沒有試圖清除C++中所有不適當的特性,例如,switch陳述句的語法在Java中就沒有改變,如果你了解C++就會發現可以輕而易舉地轉換到Java語法,
Java發布時,實際上C++并不是最常用的程式設計語言,很多開發人員都在使用VisualBasic和它的拖放式編程環境,這些開發人員并不覺得Java簡單,很多年之后Java開發環境才迎頭趕上,如今,Java開發環境已經遠遠超出大多數其他編程語言的開發環境,
簡單的另一個方面是小,Java的目標之一是支持開發能夠在小型機器上獨立運行的軟體,基本的解釋器以及類支持大約僅為40KB;再加上基礎的標準類別庫和對執行緒的支持(基本上是一個自包含的微內核)大約需要增加175KB,
在當時,這是一個了不起的成就,當然,由于不斷的擴展,類別庫已經相當龐大了,現在有一個獨立的具有較小類別庫的Java微型版(JavaMicroEdition),這個版本適用于嵌人式設備,
2、面向物件
面向物件是一種新興的程式設計方法,或者是一種新的程式設計規范,其基本思想是使用物件、類、繼承、封裝、多型等基本概念來進行程式設計,從現實世界中客觀存在的事物(即物件)出發來構造軟體系統,并且在系統構造中盡可能運用人類的自然思維方式,
3、分布式
分布式系統對于用戶而言,他們面對的就是一個服務器,提供用戶需要的服務而已,而實際上這些服務是通過背后的眾多服務器組成的一個分布式系統,因此分布式系統看起來像是一個超級計算機一樣,
4、健壯性
Web的多平臺環境對程式有特別的要求,因為程式必須在各種系統中可靠地執行,因此,在設計Java時,使其具備創建健壯程式的能力被提到了高優先級的地位,為了獲得可靠性,Java在一些關鍵領域進行了限制,從而迫使程式員在程式開發中及早地發現錯誤,同時,使程式員不必再擔心會引起編程錯誤的許多最常見的問題,因為Java是強型別化的語言,它在編譯時檢查代碼,當然不管怎樣,在運行時也檢查代碼,許多難以跟蹤的bug,在運行時通 常難以再現,這種情況在Java中幾乎不可能產生,因為使撰寫好的程式在不同的運行條件下,以可預見的方式運行是Java的關鍵特性之一, 為了更好地理解Java是多么健壯,分析程式失敗的兩個主要原因:記憶體管理錯誤和未處理的例外(即運行時錯誤),在傳統的編程環境中,記憶體管理是一件困難、乏味的作業,例如,在C/C++中,程式員必須手動分配和釋放所有動態記憶體,有時這會導致問題,因為程式員可能會忘記釋放以前分配的記憶體,或者更糟糕的是,試圖釋放程式其他部分仍然在使用的記憶體,Java通過為您管理記憶體的分配和釋放,可以從根本上消除這些問題(事實上,釋放記憶體完全是自動的,因為Java為不再使用的物件提供了垃圾回收功能),傳統環境中的例外情況通常是由“除0”或“沒有找到檔案”這類錯誤引起的,并且必須使用既笨拙又難以理解的結構對它們進行管理,Java通過提供面向物件的例外處理功能在這個領域提供幫助,在撰寫良好的Java程式中,所有運行時錯誤都能夠并且應當由程式進行管理,
5、安全性
Java取消了強大但又危險的指標,而代之以參考,由于指標可進行移動運算,指標可隨便指向一個記憶體區域,而不管這個區域是否可用,這樣做是危險的,因為原來這個記憶體地址可能存盤著重要資料或者是其他程式運行所占用的,并且使用指標也容易陣列越界,
垃圾回識訓制:不需要程式員直接控制記憶體回收,由垃圾回收器在后臺自動回收不再使用的記憶體,避免程式忘記及時回收,導致記憶體泄露,避免程式錯誤回收程式核心類別庫的記憶體,導致系統崩潰,
例外處理機制:Java例外機制主要依賴于try、catch、finally、throw、throws五個關鍵字,
強制型別轉換:只有在滿足強制轉換規則的情況下才能強轉成功,
Java在位元組碼的傳輸程序中使用了公開密鑰加密機制(PKC),
在運行環境提供了四級安全性保障機制:位元組碼校驗器 -類裝載器 -運行時記憶體布局 -檔案訪問限制,
6、體系結構中立
編譯器生成一個體系結構中立的目標檔案格式,這是一種編譯過的代碼,只要有Java運行時系統,就可以在許多處理器上運行,Java編譯器通過生成與特定的計算機體系結構無關的位元組碼指令來實作這一特性,精心設計的位元組碼不僅可以很容易地在任何機器上解釋執行,而且還可以迅速地翻譯成本地機器的代碼,
位元組碼實作了結構中立,與計算機結構無關,
7、可移植性
Java語言之中最大的特點在于其可移植性的支持,所謂的可移植性指的是同一個程式可以在不同的作業系統之間任意的進行部署,這樣就減少了開發的難度,在Java里面如果要想實作可移植性的控制,那么主要依靠的是JVM(Java 虛擬機),Java虛擬機是一個由軟體和硬體模擬出來的計算機,所有的程式只要有Java虛擬機的支持,那么就可以實作程式的執行,并且不同的作業系統上會有不同版本的JVM存在,這樣就可以實作移植性,
著作權歸作者所有,商業轉載請聯系作者獲得授權,非商業轉載請注明出處,
8、解釋性
有人說Java是編譯型的,因為所有的Java代碼都是要編譯的,.java不經過編譯就無法執行, 也有人說Java是解釋型的,因為java代碼編譯后不能直接運行,它是解釋運行在JVM上的,所以它是解釋型的,
9、高性能
即時編譯器可以監控經常執行哪些代碼并優化這些代碼以提高速度,更為復雜的優化是消除函式呼叫(即行內),即時編譯器知道哪些類已經被加載,基于當前加載的類集,如果特定的函式不會被覆寫,就可以使用行內,必要時,還可以撤銷優化,
10、多執行緒
指的是這個程式(一個行程)運行時產生了不止一個執行緒,
11、動態性
Java本質為靜態語言,而不是動態語言,動態語言顯著的特點是在程式運行時,可以改變程式結構或變數型別,典型的動態語言有Python、ruby、javascript等,Java不是動態語言,但Java具有一定的動態性,表現在以下幾個方面:
- 反射機制;
- 動態位元組碼操作;
- 動態編譯;
- 執行其他腳本代碼;
二、物件
物件是系統中用來描述客觀事物的一個物體,它是構成系統的一個基本單位,一個物件由一組屬性和對這組屬性進行操作的一組服務組成,
類的實體化可生成物件,一個物件的生命周期包括三個階段:生成、使用、消除,
當不存在對一個物件的參考時,該物件成為一個無用物件,Java的垃圾收集器自動掃描物件的動態記憶體區,把沒有參考的物件作為垃圾收集起來并釋放,當系統記憶體用盡或呼叫System.gc( )要求垃圾回收時,垃圾回收執行緒與系統同步運行,
三、類
類是具有相同屬性和方法的一組物件的集合,它為屬于該類的所有物件提供了統一的抽象描述,其內部包括屬性和方法兩個主要部分,在面向物件的編程語言中,類是一個獨立的程式單位,它應該有一個類名并包括屬性和方法兩個主要部分,
Java中的類實作包括兩個部分:類宣告和類體,
1、類宣告
[public][abstract|final] class className [extends superclassName] [implements interfaceNameList]{……}
其中,修飾符public,abstract,final 說明了類的屬性,className為類名,superclassName為類的父類的名字,interfaceNameList為類所實作的介面串列,
2、類體
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實作的是值傳遞,方法接收引數的值,但不能改變這些引數的值,如果要改變引數的值,則用參考資料型別,因為參考資料型別傳遞給方法的是資料在記憶體中的地址,方法中對資料的操作可以改變資料的值,
3、方法體
方法體是對方法的實作,它包括區域變數的宣告以及所有合法的Java指令,方法體中宣告的區域變數的作用域在該方法內部,若區域變數與類的成員變數同名,則類的成員變數被隱藏,
為了區別引數和類的成員變數,我們必須使用this,this用在一個方法中參考當前物件,它的值是呼叫該方法的物件,回傳值須與回傳型別一致,或者完全相同,或是其子類,當回傳型別是介面時,回傳值必須實作該介面,
4、構造方法
- 構造方法是一個特殊的方法,Java 中的每個類都有構造方法,用來初始化該類的一個物件,
- 構造方法具有和類名相同的名稱,而且不回傳任何資料型別,
- 多載經常用于構造方法,
- 構造方法只能由new運算子呼叫
5、注釋
Java中的注釋就是解釋說明你的代碼的,Java注釋不會被執行,因此可以隨意添加注釋,
- 當行注釋//
- 多行注釋/**/
6、隱式引數和顯式引數
(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運算子代表的是本類,
四、面向物件的基本特性
1、封裝
封裝性就是盡可能的隱藏物件內部細節,對外形成一道邊界,只保留有限的介面和方法與外界進行互動,封裝的原則是使物件以外的部分不能隨意的訪問和操作物件的內部屬性,從而避免了外界對物件內部屬性的破壞,
(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;
}
}
2、繼承
子類的物件擁有父類的全部屬性與方法,稱作子類對父類的繼承,
- Java中父類可以擁有多個子類,但是子類只能繼承一個父類,稱為單繼承,
- 繼承實作了代碼的復用,
- Java中所有的類都是通過直接或間接地繼承java.lang.Object類得到的,
- 子類不能繼承父類中訪問權限為private的成員變數和方法,
- 子類可以重寫父類的方法,即命名與父類同名的成員變數,
Java中通過super來實作對父類成員的訪問,super用來參考當前物件的父類,super 的使用有三種情況:
- 訪問父類被隱藏的成員變數
- 呼叫父類中被重寫的方法
- 呼叫父類的建構式
3、多型
物件的多型性是指在父類中定義的屬性或方法被子類繼承之后,可以具有不同的資料型別或表現出不同的行為,這使得同一個屬性或方法在父類及其各個子類中具有不同的語意,
Java的多型性體現在兩個方面:由方法多載實作的靜態多型性(編譯時多型)和方法重寫實作的動態多型性(運行時多型),
- 編譯時多型:在編譯階段,具體呼叫哪個被多載的方法,編譯器會根據引數的不同來靜態確定呼叫相應的方法,
- 運行時多型:由于子類繼承了父類所有的屬性(私有的除外),所以子類物件可以作為父類物件使用,程式中凡是使用父類物件的地方,都可以用子類物件來代替,一個物件可以通過參考子類的實體來呼叫子類的方法,
4、多載
- 方法多載是讓類以統一的方式處理不同資料型別的手段,
- 一個類中可以創建多個方法,它們具有相同的名字,但具有不同的引數和不同的定義,呼叫方法時通過傳遞給它們的不同引數個數和引數型別來決定具體使用哪個方法,
- 回傳值型別可以相同也可以不相同,無法以回傳型別作為多載函式的區分標準,
5、重寫
- 子類對父類的方法進行重新撰寫,如果在子類中的方法與其父類有相同的的方法名、回傳型別和引數表,我們說該方法被重寫 (Overriding),
- 如需父類中原有的方法,可使用super關鍵字,該關鍵字參考了當前類的父類,
- 子類函式的訪問修飾權限不能低于父類的,
五、物件間的四種關系
1、依賴
依賴關系表示一個類依賴于另一個類的定義,例如,一個人(Person)可以買車(car)和房子(House),Person類依賴于Car類和House類的定義,因為Person類參考了Car和House,與關聯不同的是,Person類里并沒有Car和House型別的屬性,Car和House的實體是以參量的方式傳入到buy()方法中去的,一般而言,依賴關系在Java語言中體現為局域變數、方法的形參,或者對靜態方法的呼叫,
2、關聯
關聯(Association)關系是類與類之間的聯接,它使一個類知道另一個類的屬性和方法,關聯可以是雙向的,也可以是單向的,在Java語言中,關聯關系一般使用成員變數來實作,
3、聚合
聚合(Aggregation) 關系是關聯關系的一種,是強的關聯關系,聚合是整體和個體之間的關系,例如,汽車類與引擎類、輪胎類,以及其它的零件類之間的關系便整體和個體的關系,與關聯關系一樣,聚合關系也是通過實體變數實作的,但是關聯關系所涉及的兩個類是處在同一層次上的,而在聚合關系中,兩個類是處在不平等層次上的,一個代表整體,另一個代表部分,
4、組合
組合(Composition) 關系是關聯關系的一種,是比聚合關系強的關系,它要求普通的聚合關系中代表整體的物件負責代表部分物件的生命周期,組合關系是不能共享的,代表整體的物件需要負責保持部分物件和存活,在一些情況下將負責代表部分的物件湮滅掉,代表整體的物件可以將代表部分的物件傳遞給另一個物件,由后者負責此物件的生命周期,換言之,代表部分的物件在每一個時刻只能與一個物件發生組合關系,由后者排他地負責生命周期,部分和整體的生命周期一樣,
六、【粉絲福利】
送書啦,大家期待已久的Vue!
【送書啦】
1、社區積分榜前5名,隨機抽取一名幸運者
2、社區積分榜6-15名,隨機抽取一名幸運者
3、社區積分榜16-30名,隨機抽取一名幸運者
【賺取積分方式】哪吒社區內發帖、點贊、評論都可贏取積分!
🍅 社區入口:哪吒社區
以下圖書,四選一!
1、Vue.js全家桶零基礎入門到進階專案實戰
2、Java高并發編程指南
3、億級流量Java高并發與網路編程實戰
4、Web前端性能優化

上一篇:Java零基礎入門 1:配置Java環境變數
下一篇:Java零基礎入門 3:java資料型別

添加微信,備注1024,贈送Java學習路線思維導圖
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/353378.html
標籤:java
