Java基礎系列之初遇Java

導語

時至今日,Java語言已歷時二十多年,已經發展成為計算機史上影響最為深遠的編程語言之一,在某種程度上甚至已經超過了編程語言的范疇,成為了一種開發平臺,一種開發規范。更有甚者,Java已經成為了一種信仰,一種對開源和分享精神的代表。

了解Java


我們不妨在搜索引擎里面直接搜索下Java


image.png

好吧,開個玩笑,搜索出來的前幾列都是廣告,這恰恰證明了Java的火爆。我們還是看下百度百科對于Java的描述吧。

Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程 。
Java具有簡單性、面向對象、分布式、健壯性、安全性、平臺獨立與可移植性、多線程、動態性等特點 。Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等

這里面重點是面向對象安全性平臺獨立可移植性

  • 安全性
    Java提供一個相對安全的內存管理和訪問機制,避免了絕大部分的內存泄露和指針越界問題。這里先了解下內存泄露概念:
    內存泄露:分配出去的內存得不到及時回收,如此便會導致系統運行速度變慢,更有甚者,導致系統癱瘓。什么情況下會導致內存泄露呢?程序忘記及時回收無用的資源、程序錯誤回收核心類庫內存。前者只是讓系統變慢,后者可能造成系統的癱瘓。
  • 平臺獨立與可移植性
    如何才能稱為平臺獨立與可移植性呢?那就得是在不同的cpu、Java編譯器或者操作系統上運行代碼得出的結果應該是一致的。JVM給Java提供了一個虛擬CPU般的存在使得Java呈現出這個特性。
  • 面向對象我們在后續的章節里面具體分析。

Java的發展歷史


計算機從無到有,因此,任何語言也是有發展歷程的,Java也不能例外。但是有意思的是,Java的誕生更為的有意思,甚至可以說是一場意外。
1990年年末,Sun公司打算給智能家電編寫一個通用的系統,因此Java之父James Gosling領導的“Green計劃”團隊準備為此開發。起初考慮使用C++語言,該團隊很多成員發現C++和可用的Api在某些方面存在很大的問題,該團隊資源有限,且C++太過復雜,缺少垃圾回收、可移植性和分布式等特性。于是乎,Gosling創造了一種新的語言Oak,Oak便是Java的前身。

  1. 1995年Sun公司發布了Java,Sun公司直接把Java放在互聯網上,供大家免費使用。
  2. 1996年Sun公司發布了Java1.0,這個環境下已經包含了JRE和JDK
  3. 中間省略掉某些版本,我們直接聊聊Java1.4,這個版本是一個相對成熟的版本,目前國內還有很多公司在使用。2002年2月發布,在此期間,誕生了大量的基于Java的開源框架,如我們熟悉的三大框架Spring,Struts,Hibernate,同時也涌現了大量的企業應用服務器,Weblogic,Jboss等。
  4. 2004年10月發布了Java的里程碑版本Java1.5(更名Java5.0),把之前一直稱呼的J2EE正式更名為Java EE。這個版本增加了增強for、泛型、可變參數、枚舉類、注解、自動裝箱和拆箱等。
  5. 2014年3月18日,Oracle公司發布了Java SE8,(Sun公司很不幸的被收購了)。這次更新帶來了全新的Lambda表達式和很多其他的新特性。

Java程序的基本規則


說完發展歷史,我們直接說點實在的,說說代碼吧。
首先我們要理解兩個概念:類和實例。
類:英文名class在Java里面隨處可見,所有的Java文件編譯后都是.class,程序員面向世界的第一個代碼如下

public class HelloWorld{

}

這就是一個類,百度百科描述:類(Class)是面向對象程序設計(OOP,Object-Oriented Programming)實現信息封裝的基礎。類是一種用戶定義類型,也稱類類型。每個類包含數據說明和一組操作數據或傳遞消息的函數。
好吧,其實說白了,就是存放我們要寫的代碼的容器,我們的代碼都寫在類里面(狹義的,后面還有接口,枚舉等)。專業點的說法就是:類是Java程序的最小程序單位。
實例:英文名instance,也稱之為對象,就是我們常說的面向對象的對象。是類的具體實現。如new HelloWorld();,就是一個實例。還有一種創建實例的方式,我們可以根據英文名稱,去java.lang.Class類中查找下關于實例的方法,找到一個叫newInstance(),顧名思義,這也是創建實例的一種方式。

  • Java的一些規范
    和Linux操作系統般的,Java是大小寫敏感的。我們會有一些約定的規范,類名首字母為大寫,方法名首字母為小寫(其實,反過來,Java也能編譯成功,不會影響結果),命名規范為駝峰原則(早期sun公司并沒有遵守這個規范比如大名鼎鼎的Hashtable),final修飾的常量采用全部大寫的方式(這個 java.awt.Color類里面很有意思的是出現一個大寫,一個小寫的變量,可能當時開發粗心導致的吧,后續為了修復這個問題全部改大寫了,實現的效果是一樣的,再次說明Java大小寫敏感)。類的程序入口是main方法,且這個main方法是public static void 修飾,形參是String[] 數組。

淺談垃圾回收機制


之前說到Java安全特性,我們聊到了內存泄露和指針越界的問題,其實就引出了垃圾回收機制。
眾所周知,Java的堆是一個運行時數據區,用以保存Java的實例(對象)。由于Java程序員不負責對象的回收,那么Java需要自己把無用對象回收掉,這就是垃圾回收機制。你可以這樣理解,C/C++ 就好比一個小孩在房間里面玩折紙,地上無用的紙屑,需要小孩自己去撿起來,扔掉。而Java,則允許小孩丟紙屑,不必自己去撿起來,有一臺掃地機器人幫忙丟掉無用的紙屑。

  • 優點
    • 提高編程效率 (玩的開心)
    • 保護程序完整性(不打斷玩)
  • 特性
    • 回收無用對象的內存空間,只回收內存資源,對于物理資源、數據庫連接、磁盤I/O等無能為力(如果紙屑在桌子上,機器人表示無能為力)
    • 將引用變量置為null,能暗示垃圾回收機制可以回收對象
    • 垃圾回收發生不可預知,System.gc()或Runtime對象的gc()只是起到建議作用
    • 垃圾回收機制能精確標記活著的對象;垃圾回收器能精確定位到對象之間的引用關系。
    • JVM有多種不同的垃圾回收實現

關于運行時內存區域:2014年3月發布的Java8刪除了HotSpot JVM中的永久代內存(PermGen,永久代內存主要用于存儲一些需要常駐內存、通常不會被回收的信息),而是改為使用本地內存來存儲類的元數據信息,并稱之為元空間,這就意味著以后不會出現Java.lang.OutOfMemoryEror:PermGen錯誤(解決了eclipse自動重啟報錯的問題)

尾聲

篇幅加上個人能力有限,對于初遇Java只能寫到這里了。后續將會發布更多可能含有些技術含量的文章,再見。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,740評論 3 420
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,856評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,931評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,321評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,533評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,082評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,891評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,319評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,794評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,076評論 2 375

推薦閱讀更多精彩內容