一、Java簡介
1、Java是一門面向對象的編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論允許程序員以優雅的思維方式(思想很重要)進行復雜的編程。
2、Java具有簡單性、面向對象、分布式、健壯性、安全性、平臺獨立與可移植性、動態性特點。Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等。
3、Java三大體系:
Java SE(J2SE)
Java EE
Java Me
java常用的框架結構
Spring Boot
Java 一直在構建 Spring 應用程序,Spring Boot 是 Spring 的特定版本,通過對配置細節進行處理,Spring Boot 可以自動化微服務配置過程,其創建是為了自啟動所有類型 Spring 項目,而不僅僅是微服務。一旦應用程序完成,Spring Boot 會混合在 Web 服務器中,并發出 JAR 文件,可以想象成原始 Docker 容器。
使用 Spring 開發微服務遵循與 Web 應用相同的 MVC 理念。該框架享有多年 Java 開發所構建的深層連接,包括所有主要和次要數據存儲,LDAP 服務器以及 Apache Kafka 等消息傳遞工具集成,眾多維護運行服務器集合的小功能,比如 Spring Vault,維護生產服務器所需密碼等。
Eclipse MicroProfile
2016 年,Java Enterprise 社區決定清除 Java Enterprise Edition 中的部分內容,以便用戶可使用經典部件構建簡單微服務。在去掉大量庫之后,社區保留了處理 REST 請求、解析 JSON 和管理依賴注入等功能,終版本被稱為 Eclipse MicroProfile,其特點是快速且簡單。
從那時起,MicroProfile 社區就制定了一個協議,“每季度發布一次新版本,同時添加新代碼以保持微服務平穩安全運行”。對于使用 Java EE 的人來說,開發過程和代碼結構將非常熟悉,但無休止的配置麻煩已被去除。
Dropwizard
2011 年,Dropwizard 問世并開啟 Java Enterprise 開發人員的視野,其提供非常簡單的開發模型,用戶可添加業務邏輯,并根據慣例配置其他內容。整個 JAR 文件非常苗條,并且可以快速啟動。
Dropwizard 的大限制可能是缺乏依賴注入,如果想使用依賴注入保持代碼干凈和松散耦合,用戶需要自己添加庫。與 Spring 不同,沒有 Dropwizard 方法可以做到這一點。但是,Dropwizard 支持大多數功能,比如日志記錄、健康檢查和提供彈性代碼。
WildFly Thorntail
Red Hat 用戶使用靈活的配置工具構建 MicroProfile 版本,該框架初被稱為 WildFly Swarm,隨后被重命名為 Thorntail。只需在 Thorntail 上指定需要功能,用戶即可創建 Maven 構建文件,然后由 Maven 負責組裝一切。
Thorntail 通過掃描代碼檢測主要組件,也可使用 BOM 文件覆蓋。全部運行時,Thorntail 將刪除不被使用的 Java 企業版并創建小型 JAR 文件,可以使用命令部署。這是另一種遵循 Java 企業版傳統方法,而不保留沉重包袱的框架。
Helidon
Helidon 架構剔除了 Java Enterprise Edition,保留基于 servlet 的輕量級核心。在 Helidon 中,開發人員可使用 Netty 并添加代碼進行路由和錯誤處理。它采用兩種基本代碼模型,即 SE 和 MP 版本。
Node.js 程序員會對 Helidon SE 非常熟悉,因為其具有由句點連接的長鏈函數調用。對于使用 JAX-RS 的 Java 程序員而言,Helidon MP 看起來會很熟悉,Helidon 集成了一些備受好評的工具,用于檢查服務器運行狀況或通過微服務跟蹤數據流。
Cricket
Cricket 是一個快速 API 開發框架,雖然小,但包含相對豐富的功能,比如鍵值數據存儲,以節省連接數據庫和調度程序,控制重復的后臺處理。沒有其他依賴項增加復雜性或鎖定,因此將代碼添加到 Cricket 并啟動獨立微服務非常容易。
Jersey
開發 Web 服務的標準之一是用于 RESTful Web 服務的 Java API(又名 JAX-RS),這是一個已在 Jersey 框架中實現的通用規范。該方法在很大程度上取決于使用注釋來指定路徑映射和返回詳細信息。解析參數和打包 JSON 其他內容,Jersey 均可處理。
Jersey 的主要優點是實現 JAX-RS 標準,部分開發人員也會將 Jersey 和 Spring Boot 結合在一起使用。
Play
體驗 JVM 跨語言功能的佳方式之一是用 Play 框架,這是與 Java 或其他 JVM 語言鏈接的 Scala 代碼。該代碼非?,F代,具有異步、無狀態模型等,不會使服務器過載,沒有無休止的線程試圖跟蹤用戶及會話數據。Play 有一些額外功能可用于充實網站,比如 OpenID、驗證和文件上傳支持。
Swagger
構建 API 可能看起來像編寫偵聽端口并提供答案的代碼一樣簡單,但 Swagger 開發人員不會同意此說法。他們創建了名為 OpenAPI 的完整 API 規范語言,Swagger 團隊提供將此規范轉換為自動化測試和文檔等的代碼。
Swagger 配置文件對 API 非常簡單,可用于實現并記錄接口行為,提供工具測試在其下構建的代碼,此外,提供 API 治理機制。Swagger 是 API 的生態系統,并且不局限于 Java。如果團隊轉移到 Node.js 或其他語言,則會有 Swagger Codegen 模塊等待將 OpenAPI 規范轉換為該語言的實現。
Restlet
框架之間的較大差異之一是與其他服務和庫之間的連接數。Restlet 是可提供大功能和連接集合的項目之一。為防微服務對郵件服務器接收 POP,IMAP 或者 SMTP, Restlet 集成了 JavaMail 庫;為防構建大量文本索引和元數據,Restlet 集成了 Lucene 和 Solr。
Restlet 不需要使用 JSON,因為代碼可以處理 XML、CSV、YAML 等多種文件格式,還可獲得用于構建響應模板的多個不同選項。此外,Restlet 客戶端允許在 Chrome 瀏覽器測試 API。
Squash
因為部件松散耦合且很難跟蹤通過系統所有層的數據流,因此調試微服務一直是個難題。Squash 允許在 Kubernetes 集群運行代碼中設置斷點,在 IDE 接收所有數據,就好像本地運行代碼一樣。Squash 還集成了 Node.js 和 Python 運行時,以防微服務集合沒有使用 Java 代碼。
Telepresence
Telepresence 是另一個調試選擇,可為遠程 Kubernetes 集群微服務創建本地代理,對此服務的調用將轉移到本地,可以在其中設置斷點或執行本地計算機上可進行的任何操作。
Zipkin
Zipkin 用于在微服務上記錄并關聯事件,以便在問題通過機器集合時進行隔離和研究。Zipkin 有 Java 等至少六種語言實現版本,因此可處理多語言系統。不少框架已經通過某種形式集成 Zipkin,比如 Spring。
二、Java的主要特性
1、java語言是簡單的:java語言的語法與C語言和C++語言很接近,使得大多數程序員很容易學習和使用。另一方面,Java丟棄了C++中很少使用的、很難理解的、令人迷惑的那些特性,如操作符承載、多繼承、自動的強制類型轉換,尤其是,Java語言不使用指針,而是引用。并提供了自動的廢料收集,使得程序員不必為內存管理而擔憂。
2、Java語言是動態的:Java語言的設計目標之一就是適應于動態變化的環境,.Java程序需要的類能夠動態地被載入到運行環境,也可以通過網絡來載入動態的類,這也有利于軟件的升級。另外,Java中的類有一個運行時刻的表示,能進行類型時候的檢查。
3、Java語言是面向對象的:Java語言提供類、接口和繼承等原語,為了簡單起見,只支持類之間的單繼承,但支持接口之間的多繼承,并支持類與接口之間的實現機制(關鍵字implements),Java語言全面支持多動態綁定,而C++語言只對虛函數使用動態綁定。Java是一個純面面對象設計的程序語言!
4、Jva語言是多線程的:在Java語言中,線程是一種特殊的對象,它必須由Thread類或其子(孫)類來創建,通常有兩種方法來創建線程:第一、使用型構為Thread(Runable)構造子將一個實現了Runnable接口的對象包裝成了一個線程。第二、從Thread類派生出子類并重寫run方法,使用該子類創建的對象即為線程。注意Thread類已經實現了runnable接口,因此任何一個線程均有它的run方法,而run方法中包含了線程所要運行的代碼。線程的活動由一組方法來控制,Java語言支持多個線程的同時執行,并提供多線程之間的同步機制(關鍵字為synchronized)。
5、Java語言是分布式的:Java語言支持Internet的應用開發,在基本的Java應用編程接口中有一個網絡應用編程接口(Java net),它提供了用于網絡應用編程的類庫,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(遠程方法激活)機制也是開發分布式應用的重要手段。
6、Java語言是高性能的:與那些解釋型的高級腳本語言相比,Java的確是高性能的。事實上,Java的運行速度隨著JIT(Just-In-Time)編譯器的技術發展越來越接近C++。
7、Java語言是健壯性的:Java的強類型機制、異常處理、垃圾的自動收集等是Java程序健壯性的重要保證。對指針的丟棄是Java的明智選擇,Java的安全檢查機制使得Java更具健壯性。
8、Java語言是解釋型的:Java程序在Java平臺上被編譯為字節碼格式,然后可以在實現這個Java平臺的任何系統中運行。在運行時,Java平臺中的Java解釋器對這些字節碼文件進行解釋執行,執行過程中需要的類在連接階段被載入到環境中運行。
9、Java語言是安全的:Java通常被用在網絡環境中,為此Java提供了安全機制,以防惡意代碼的攻擊。除了Java具有的許多安全特性以外,Java對通過網絡環境下載的類具有一個安全防范機制(類ClassLoder),如分配不同的名字空間,以防替代本地的同名類、字節碼檢查,并提供安全管理機制(SecurityManager),讓Java應用設置安全崗兵。
10、Java語言是可移植的:這種移植性來源于體系結構中立性,另外,Java還嚴格規定了各個基本數據類型的長度。Java系統本身也具有很強的可移植性,Java編譯器是用Java實現 的,Java的運行環境是用ANSI C實現的。(相關推薦:2020年學java專業能做什么,有前景嗎)
11、Java語言是體系結構中立的:Java程序(后綴名為java的文件)在Java平臺上被編譯為體系結構中立的字節碼格式(后綴名為class文件),然后可以在實現這個Java平臺的任何系統中運行,這種途徑適合于異構的網絡環境和軟件的分發。