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