Java---“世界上最好的语言”之入门解析
博客目錄:
- 1.開發(fā)環(huán)境與安裝
- 1.1 Java是什么
- 1.2 為什么選擇Java
- 1.3 Java語言發(fā)展簡史
- 1.4 Java是最好的語言么
- 1.5 Java開發(fā)環(huán)境安裝
- 2.初識Java的main方法
- 2.1 main方法示例
- 2.1 運行Java程序
- 3.初識Java簡單語句和語法
?
?下面正式開始我們的java學(xué)習(xí)之旅!!!!!
?本節(jié)目標(biāo)
1. Java語言簡介、發(fā)展概述、語言優(yōu)勢、與C/C++區(qū)別
- 初識Java程序入口之main方法
- 初識Java簡單語句和語法
1.Java語言概述?
1.1 Java是什么
Java是一種優(yōu)秀的程序設(shè)計語言,它具有令人賞心悅目的語法和易于理解的語義。不僅如此,Java還是一個有一系 列計算機軟件和規(guī)范形成的技術(shù)體系,這個技術(shù)體系提供了完整的用于軟件開發(fā)和跨平臺部署的支持環(huán)境,并廣泛應(yīng)用于嵌入式系統(tǒng)、移動終端、企業(yè)服務(wù)器、大型機等各種場合。下面我們通過Java官方提供的數(shù)據(jù)來一起感受一 下,Java到底有多“火”。?
1.2 為什么選擇Java
那么對于我們開發(fā)者,Java是否是我們開發(fā)應(yīng)用程序的第一選擇呢?來看下圖?
我們可以看到近些年java排名可以一直保持在前三,可以java普遍使用率很高
題外話:很多同學(xué)可能會問,JavaScript和Java有什么關(guān)系呢?要說到這倆的關(guān)系,舉個例子。就相當(dāng)于雷鋒和雷峰塔的關(guān)系或者說老婆和老婆餅的關(guān)系(沒有一點關(guān)系...),最開始JavaScript叫l(wèi)iveScript,當(dāng)時Java太火了,于是乎 liveScript更名為JavaScript借勢宣傳一波。。* 上圖數(shù)據(jù)來自于TIOBE編程語言社區(qū)2017年12月和2018年10月最新的排行榜。TIOBE 編程語言社區(qū)排行榜是編程語言流行趨勢的一個指標(biāo),每月更新,這份排行榜排名基于互聯(lián)網(wǎng)上有經(jīng)驗的程序員、 課程和第三方廠商的數(shù)量。 排名使用著名的搜索引擎(諸如 Google、MSN、Yahoo!、Wikipedia、YouTube 以及 Baidu 等)進行計算。同學(xué)們可以隨便搜搜近幾年的編程類語言排行榜,Java絕對都是當(dāng)之無愧的老大哥。那么,Java究竟有什么特性能獲得廣大程序員的一致青睞呢? 這里參考Java白皮書,列出如下11個特性:?
1.2.1 簡單性
Java語法是C++語法的一個“純凈版本”。這里沒有頭文件、指針運算(甚至指針語法)、結(jié)構(gòu)、聯(lián)合、操作符重 載、虛基類等等。不僅如此,Java開發(fā)環(huán)境遠遠超出大多數(shù)其他編程語言的開發(fā)環(huán)境。
1.2.2 面向?qū)ο?/h3>
什么是面向?qū)ο?#xff1f; 這里我們用木匠打一個比方,一個“面向?qū)ο蟆钡哪窘呈冀K關(guān)注的是所制作的椅子,第二位才是所使用的工具;而一個“非面向?qū)ο蟮摹蹦窘呈紫瓤紤]的是所使用的工具。 在Java的世界里,一切皆對象。 Java的面向?qū)ο筇匦耘cC++旗鼓相當(dāng),與C++的主要不同點在于多重繼承。在Java中,取而代之的是更簡單的接口概念。而且與C++相比,Java提供了更豐富的運行時自省功能。
1.2.3 分布式(微服務(wù))
Java有豐富的例程庫,用于處理像HTTP和FTP之類的TCP/IP協(xié)議。Java應(yīng)用程序能夠通過URL打開和訪問網(wǎng)絡(luò)上的對象,其便捷程度就好像訪問本地文件一樣。
1.2.4 健壯性
Java與C++最大的不同在于Java采用的指針模型可以消除重寫內(nèi)存和損壞數(shù)據(jù)的可能性(對于曾經(jīng)花費幾個小時來檢查由于指針bug而引起內(nèi)存沖突的人來說,一定很喜歡Java的這一特性)。不僅如此,Java編譯器能夠檢測許多在其他語言中僅在運行時才能夠檢測出來的問題。
1.2.5 安全性
Java適用于網(wǎng)絡(luò)/分布式環(huán)境。為了達到這個目標(biāo),在安全性方面投入了大量的精力。使用Java可以構(gòu)建防病毒、防篡改的系統(tǒng)
從一開始,Java就設(shè)計成能夠防范常見的各種攻擊:
- 運行時堆棧溢出。蠕蟲和病毒常用的攻擊手段。
- 破壞自己進程空間之外的內(nèi)存。
- 未經(jīng)授權(quán)讀寫文件
1.2.6 體系結(jié)構(gòu)中立
編譯器生成一個體系結(jié)構(gòu)中立的目標(biāo)文件格式,這是一種編譯過的代碼,只要有Java運行時系統(tǒng),這些編譯后的代 碼就可以在許多處理器上運行。Java編譯器通過生成與特定計算機體系結(jié)構(gòu)無關(guān)的字節(jié)碼指令來實現(xiàn)這一特性。精心設(shè)計的字節(jié)碼不僅可以很容易的在任何機器上解釋執(zhí)行,而且還可以動態(tài)地翻譯成本地機器代碼。
1.2.7 可移植性
與C/C++不同,Java規(guī)范中沒有“依賴具體實現(xiàn)的地方”。基本數(shù)據(jù)類型的大小以及有關(guān)運算都做了明確的說明。例 如,Java中的int永遠是32位的整數(shù),而在C/C++中,int可能是16位整數(shù)、32位整數(shù),也可能是編譯器提供商指定 的其他大小。在Java中,數(shù)據(jù)類型具有固定的大小,這消除了代碼移植時令人頭疼的主要問題。
1.2.8 解釋型
Java解釋器可以在任何移植了解釋器的機器上執(zhí)行Java字節(jié)碼。由于鏈接是一個增量式且輕量級的過程。所以開發(fā) 過程也變得更加快捷,更加具有探索性。
1.2.9 高性能
盡管對解釋后的字節(jié)碼性能已經(jīng)比較滿意,但在有些場合下可能需要更加高效的性能。字節(jié)碼可以(在運行時刻)動態(tài)的翻譯成對應(yīng)運行這個應(yīng)用的特定cpu的機器碼。
1.2.10 多線程
Java在當(dāng)時很超前。它是第一個支持并發(fā)程序設(shè)計的主流語言。多線程可以帶來更好的交互響應(yīng)和實時行為。并發(fā) 程序設(shè)計絕非易事,但是Java在這方面表現(xiàn)出色,可以很好的管理這個工作。
1.2.11 動態(tài)性
Java與C/C++相比更加具有動態(tài)性。它能夠適應(yīng)不斷發(fā)展的環(huán)境。庫中可以自由的添加新方法和實例變量,而對客戶端沒有任何影響。在Java中找出運行時類型信息十分簡單(反射的特性,后續(xù)會學(xué)到)
1.3Java語言發(fā)展簡史
Java 語言源于 1991 年 Sun 公司 James Gosling 領(lǐng)導(dǎo)的的 Oak 項目,1995 年 Sun 公司正式起名為 Java,并提 出“Write once, Run anywhere" 的口號。
1996 年 1 月 Java 1.0 發(fā)布,提供了一個解釋執(zhí)行的 Java 虛擬機,其時恰逢互聯(lián)網(wǎng)開始興起,Java 的 Applet 能在 Mozilla 瀏覽器中運行,被看作是未來的互聯(lián)網(wǎng)語言。 1997 年 2 月 Java 1.1 發(fā)布,Java 語言的基本形態(tài)基本確定了,比如反射 (reflection), JavaBean, 接口和類的關(guān)系 等等,一直到今天都保持一致。然而,Java 最初的一些目標(biāo),如在瀏覽器中執(zhí)行 Applet,以及跨平臺的圖形界面 Awt 很快遭遇到負面的評價。 1998 年 12 月,Java 第一個里程碑式的版本,即 Java 1.2 發(fā)布了。這個版本使用了 JIT(Just in time)編譯器技 術(shù),使得語言的可遷移性和執(zhí)行效率達到最優(yōu)的平衡,同時 Collections 集合類設(shè)計優(yōu)良,在企業(yè)應(yīng)用開發(fā)中迅速 得到了廣泛使用。Sun 公司把 Java 技術(shù)體系分成三個方向,分別是 J2SE(面向桌面和通用應(yīng)用開發(fā)),J2EE(面 向企業(yè)級應(yīng)用開發(fā)),J2ME(面向移動終端開發(fā))。這個分類影響非常久遠,體現(xiàn)出主流語言設(shè)計者的思想:針 對于不同的應(yīng)用領(lǐng)域,在形態(tài),API 集合等進行劃分。 2000 年 5 月,Java 1.3 發(fā)布,這個版本中 Corba 作為語言級別的分布式對象技術(shù),成為 J2EE 的一個技術(shù)前提。 J2EE 受到 Corba 的設(shè)計的影響較大,早期 EJB 的 Home,接口和實現(xiàn)就是 Corba 在 C 語言的實現(xiàn),被移植到 Java 語言之中。J2EE 中的 Servlet 規(guī)范獲得了極大的成功,伴隨著互聯(lián)網(wǎng)的興起,和瀏覽器直接通過 HTTP 協(xié)議交 互的 Servlet,和眾多的 MVC 框架,成為 Web1.0 的網(wǎng)紅。 2002 年 2 月,Java 1.4 發(fā)布,Java 語言真正走向成熟,提供了非常完備的語言特性,如 NIO,正則表達式,XML 處理器等。同年微軟的.NET 框架發(fā)布,兩者開始了為期十幾年的暗自競爭。從語言特性上來說,.NET 后發(fā)先至, 一直處于優(yōu)勢。但 Java 依賴良好的開發(fā)者生態(tài),絕大多數(shù)大型軟件公司的使用者眾多和不斷貢獻,以及對 Linux 操作系統(tǒng)良好的支持,漸漸的在服務(wù)器端獲得優(yōu)勢地位。 2004 年 9 月,Java 5 發(fā)布,Sun 不再采用 J2SE, J2EE 這 種命名方式,而使用 Java SE 5, Java EE 5 這樣的名稱。我認為 Java 5 是第二個里程碑式的版本。Java 語言語法發(fā) 生很大的變化,如注解 (Annotation),裝箱 (Autoboxing),泛型 (Generic),枚舉 (Enum),foreach 等被加入,提 供了 java.util.concurrent 并發(fā)包。Java 5 對于 Java 語言的推動是巨大的,特別是注解的加入,使得語言定義靈活 了很多,程序員可以寫出更加符合領(lǐng)域定義的描述性程序。 2006 年 5 月, JavaEE 5 發(fā)布,其中最主要是 EJB3.0 的版本升級。在此之前,EJB2.X 版本被廣泛質(zhì)疑, SpringFramework 創(chuàng)建者 Rod Johnson 在經(jīng)典書籍“J2EE Development without EJB“中,對 EJB2 代表的分布式 對象的設(shè)計方法予以批駁。EJB3 則重新經(jīng)過改造,使用注解方式,經(jīng)過應(yīng)用服務(wù)器對 POJO 對象進行增強來實現(xiàn) 分布式服務(wù)能力。在某種程度,可以說 EJB3 挽救了 JavaEE 的過早消亡。 2006 年 12 月,Java 6 發(fā)布,這個語言 語法改進不多,但在虛擬機內(nèi)部做了大量的改進,成為一個相當(dāng)成熟穩(wěn)定的版本,時至今日國內(nèi)的很多公司依然以 Java6 作為主要 Java 開發(fā)版本來使用。同年 Sun 公司做出一個偉大的決定,將 Java 開源。OpenJDK 從 Sun JDK 1.7 版本分支出去,成為今天 OpenJDK 的基礎(chǔ)。OpenJDK6 則由 OpenJDK7 裁剪而來,目前由紅帽負責(zé)維護,來 滿足 Redhat Enterprise Linux 6.X 用戶的需要。 2009 年 12 月,JavaEE 6 發(fā)布,這個版本應(yīng)該說是 JavaEE 到目前為止改進最大影響最深遠的一個版本。因為 JavaEE5 只有 EJB3 適應(yīng)了 Java 注解語法的加入,而 EE6 全面接納了注解。CDI 和 BeanValidation 規(guī)范的加入, 在 POJO 之上可以定義完備的語義,由容器來決定如何去做。Servlet 也升級到 3.0 版本,并在接口上加入異步支 持,使得系統(tǒng)整體效率可以大幅提高。EE 劃分為 Full Profile 和 Web Profile,用戶可以根據(jù)自己的需要選擇不同 的功能集。 在此之前,Oracle 已經(jīng)以 74 億美金的價格收購了 Sun 公司,獲得了 Java 商標(biāo)和 Java 主導(dǎo)權(quán)。也收購了 BEA 公 司,獲得市場份額最大的應(yīng)用服務(wù)器 Webogic。JavaEE 6 雖然是收購之后發(fā)布的版本,但主要的設(shè)計工作仍然由 原 Sun 公司的 Java 專家完成。 2011 年 7 月,Oracle 發(fā)布 Java 7, 其中主要的特性是 NIO2 和 Fork/Join 并發(fā)包, 盡管語言上沒有大的增強,但我個人認為,自從 Oracle JDK(包括 OpenJDK7),Java 虛擬機的穩(wěn)定性真正做到 的工業(yè)級,成為一個計算平臺而服務(wù)于全世界。 2013 年 6 月,Oracle 發(fā)布 JavaEE 7,這個版本加入了 Websocket,Batch 的支持,并且引入 Concurrency 來對 服務(wù)器多線程進行管控。然而所有的子規(guī)范,算上可選項 (Optional) 總共有 40 多項,開發(fā)者光是閱讀規(guī)范文本就 很吃力了,更不要說能夠全局精通掌握。JavaEE 規(guī)范的本質(zhì)是企業(yè)級應(yīng)用設(shè)計的經(jīng)驗?zāi)Y(jié),每一個 API 都經(jīng)過眾 多豐富經(jīng)驗的專家反復(fù)商議并確定。各個版本之間可以做到向后兼容,也就是說,即使是 10 年前寫的 Servlet 程 比特科技 序,當(dāng)前的開發(fā)者也可以流暢的閱讀源碼,經(jīng)過部分代碼調(diào)整和配置修改,可以部署在當(dāng)今的應(yīng)用服務(wù)器上。反過 來,今后用 Servlet4 寫的程序,瀏覽器和服務(wù)器通信使用全新的 HTTP/2 協(xié)議,但程序員在理解上不會有障礙,就 是因為 Servlet 規(guī)范的 API 非常穩(wěn)定,基本沒有大的變化修改。 2014 年 3 月,Oracle 發(fā)布 Java 8,這個版本是我認為的第三個有里程碑意義的 Java 版本。其中最引人注目的便 是 Lambda 表達式了,從此 Java 語言原生提供了函數(shù)式編程能力。語言方面大的特性增加還有:Streams, Date/Time API,集合的并行計算支持等,Java8 更加適應(yīng)海量云計算的需要。 2018 年 3 月,Java 10 正式發(fā)布,并帶來 109 項新特性。 美國當(dāng)?shù)貢r間2018 年9月25日,Oracle 官方宣布Java 11 (18.9 LTS) 正式發(fā)布,可在生產(chǎn)環(huán)境中使用!這是自 Java 8 后的首個長期支持版本
1.4Java是最好的語言么
不是,因為在每個領(lǐng)域都有更合適的編程語言。 C 語言無疑是現(xiàn)代計算機軟件編程語言的王者,幾乎所有的操作系統(tǒng)都是 C 語言寫成的。C++ 是面向?qū)ο蟮?C 語 言,一直在不斷的改進。 JavaScript 是能運行在瀏覽器中的語言,豐富的前端界面離不開 Javascript 的功勞。近年來的 Node.js 又在后端占 有一席之地。 Python 用于系統(tǒng)管理,并通過高性能預(yù)編譯的庫,提供 API 來進行科學(xué)計算,文本處理等,是 Linux 必選的解釋 性語言。 Ruby 強于 DSL(領(lǐng)域特定語言),程序員可以定義豐富的語義來充分表達自己的思想。Erlang 就是為分布式計算 設(shè)計的,能保證在大規(guī)模并發(fā)訪問的情況下,保持強壯和穩(wěn)定性。 Go 語言內(nèi)置了并發(fā)能力,可以編譯成本地代碼。當(dāng)前新的網(wǎng)絡(luò)相關(guān)項目,很大比例是由 Go 語言編寫的,如 Docker、Kubernetes 等。 編寫網(wǎng)頁用 PHP,函數(shù)式編程有 Lisp/Scala,編寫 iOS 程序有 Swift/Objective-C。 一句話概括,能留在排行榜之上的語言,都是好的語言,在其所在的領(lǐng)域能做到最好。 那么,Java 語言到底有什么優(yōu)勢可以占據(jù)排行榜第一的位置呢? 其一,語法比較簡單,學(xué)過計算機編程的開發(fā)者都能快速上手。 其二,在若干了領(lǐng)域都有很強的競爭力,比如服務(wù)端編程,高性能網(wǎng)絡(luò)程序,企業(yè)軟件事務(wù)處理,分布式計算, Android 移動終端應(yīng)用開發(fā)等等。 最重要的一點是符合工程學(xué)的需求,我們知道現(xiàn)代軟件都是協(xié)同開發(fā),那么代碼可維護性,編譯時檢查,較為高效 的運行效率,跨平臺能力,豐富的 IDE,測試,項目管理工具配合。都使得 Java 成為企業(yè)軟件公司的首選,也得到 很多互聯(lián)網(wǎng)公司的青睞。 沒有短板,容易從市場上找到 Java 軟件工程師,軟件公司選擇 Java 作為主要開發(fā)語言,再在特定的領(lǐng)域使用其他 語言協(xié)作編程,這樣的組合選擇,肯定是不會有大的問題。 所以綜合而言,Java 語言全能方面是最好的。 我們來一起看看Java社區(qū)的概況: Java 是一門開放的語言,其開源社區(qū)也是參與者眾多。最有名的應(yīng)當(dāng)數(shù) Apache 社區(qū),目前已經(jīng)擁有近 200 個頂 級項目,其中絕大多數(shù)是 Java 語言項目。在 Java 生態(tài)圈中,具有重要地位的如 Spring、Ant、Commons、 Tomcat、Xerces、Maven、 Struts、Lucene、ActiveMQ、CXF、Camel、Hadoop 等等。很多技術(shù)時代,一大 批 Java 項目加入,如 Web 時代的 Velocity、Wicket;JavaEE 相關(guān)的 Tomee、OpenJPA、OpenWebBeans、 比特科技 Myfaces;WebService 時代的 jUDDI、Axis、ServiceMix;Osgi 時期的 Flex、Karaf;大數(shù)據(jù)時代的 HBase、 Hive、ZooKeeper、Cassandra;云時代的 Mesos、CloudStack 等等。 涉及到軟件開發(fā)的方方面面,可以說當(dāng)今幾乎所有的中型以上 Java 應(yīng)用中,都會有 Apache 開源項目的身影。國 內(nèi)最早參與 Apache 社區(qū)的以國外軟件公司國內(nèi)研發(fā)團隊成員為主,如紅帽、IONA、Intel、IBM 研發(fā)中心等。如 今國內(nèi)互聯(lián)網(wǎng)公司和軟件公司也不斷的參與,特別是開始主導(dǎo)一些 Apache 項目,如 Kylin 等。 JBoss 開源社區(qū),包含了 50 多個 Java 開源項目,其中有 Hibernate、Drools、jBPM 等業(yè)界知名開源項目,也有 Undertow、Byteman、Narayana 等名氣不算大,但絕對是相應(yīng)領(lǐng)域業(yè)界的頂級優(yōu)秀項目。當(dāng)前 JBoss 開源社區(qū) 主要以企業(yè)應(yīng)用中間件軟件為主,RedHat 是主要的技術(shù)貢獻力量。 Eclipse 開源社區(qū),之前主要是包含 Eclipse IDE 的項目,后來也逐步進行多方面的擴展,比如 OSGi,服務(wù)器等, 目前一些知名 Java 項目,如 Jetty、Vertx 等都是 Eclipse 開源組織成員。此外 IOT 目前是 Eclispe 的一個重點方 向,在這里可以找到完整的 IOT Java 開發(fā)方案。 Spring 開源社區(qū),以 SpringFramework 為核心,包括 SpringBoot、SpringCloud、SpringSecurity、 SpringXD 等開源項目,在國內(nèi)有廣泛的應(yīng)用場景。 所以說,Java不僅僅是一門編程語言,它是一個綜合的技術(shù)體系,是面向?qū)ο笏枷氲囊?guī)范。
1.5Java開發(fā)環(huán)境安裝
java環(huán)境的安裝大致分為兩步:
1.安裝JDK并配置環(huán)境
2.安裝IDEA
具體的安裝步驟請參考:Windows下最簡單的Java環(huán)境安裝指南 - 大博哥VV6 - 博客園 (cnblogs.com)
2.java的main方法
2.1 main方法示例
public class Test{ public static void main(String[] args){ System.out.println("Hello,Java"); System.out.println("My name is:"+args[0]);} }?如上展示的就是最簡單的一個Java程序,可能同學(xué)們看到后一頭霧水,可以說,Java的main方法應(yīng)該是當(dāng)前主流編 程語言中最“長”的。
通過上述代碼,我們可以看到一個完整的Java程序的結(jié)構(gòu),Java程序的結(jié)構(gòu)由如下三個部分組成:
1.源文件(擴展名為*.java):源文件帶有類的定義。類用來表示程序的一個組件,小程序或許只會有一個類。類的內(nèi)容必須包含在花括號里面。
2.類:類中帶有一個或多個方法。方法必須在類的內(nèi)部聲明。
3.方法:在方法的花括號中編寫方法應(yīng)該執(zhí)行的語句。
總結(jié)一下:類存在于源文件里面;方法存在于類中;語句存在于方法中。
好了,代碼編寫完了,如何讓它“運行”起來呢?
2.2?運行Java程序
Java是一門半編譯型、半解釋型語言。先通過javac編譯程序把源文件進行編譯,編譯后生成的.class文件是由字節(jié) 碼組成的平臺無關(guān)、面向JVM的文件。最后啟動java虛擬機來運行.class文件,此時JVM會將字節(jié)碼轉(zhuǎn)換成平臺能夠理解的形式來運行。
JRE(Java Runtime Environment):Java運行時環(huán)境,包含了JVM,Java基礎(chǔ)類庫。是使用Java語言編寫程序運行的所需環(huán)境。
JDK(Java Development Kit):Java開發(fā)工具包,提供給Java程序員使用,包含了JRE,同時還包含了編譯 器javac與自帶的調(diào)試工具Jconsole、jstack等。
三者關(guān)系:
Java程序運行需要經(jīng)過編譯,運行兩個階段。
- 編譯:javac 命令
- 運行:java 命令
通過以上我們對main方法的剖析和之前同學(xué)們C語言的基礎(chǔ),下面我們來看一段代碼:
import java.io.*; import java.util.Arrays; import java.util.List; public class FirstDemo { public static void main(String[] args) { int age = 2; String name = "66"; Dog dog = new Dog(name,age); int x = age - 1; if (x > 1){ dog.play(); }else { dog.bark(); } int[] numList = new int[]{1,3,5,7,9}; // 這是一段注釋 // JDK8新增的lambda表達式 new Thread(()->System.out.println("hello world")).start(); try { // 如果文件沒找到則會拋出異常 InputStream in = new FileInputStream(new File("//xx.txt")); } catch (Exception e) { e.printStackTrace(); } // JDK1.8新增的Stream數(shù)據(jù)流 List<Integer> list = Arrays.asList(1,2,2,4,5,6,7,10); list.stream() .filter(e -> e % 2 ==0) 比特科技 .distinct() .forEach(System.out::println); } } class Dog { private String name; private Integer age; public Dog(String name,Integer age) { this.name = name; this.age = age; } public void play() { System.out.println(this.name + "want to play"); } public void bark() { System.out.println(this.name + "汪汪汪"); } }這是我們java后續(xù)會學(xué)到的一些知識?
總結(jié)
以上是生活随笔為你收集整理的Java---“世界上最好的语言”之入门解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pytorch 深度卷积神经网络 Ale
- 下一篇: 神经网络检测Java溢出攻击