JAVA學(xué)習(xí)筆記(一)

一. 簡介

前言

????
由于國內(nèi).net市場日漸萎靡邻吭,越來越少的企業(yè)使用.net澄港,越來越多的企業(yè)投向JAVA的懷抱,一大批.net程序員的生存受到了極大的威脅, 在這生死存亡的時刻我們需要做出改變论笔,以順應(yīng)時代的變化男公!

為什么是JAVA

????
java從1995年誕生至今飽受爭議噪伊,風(fēng)風(fēng)雨雨已有20幾年的歷史囚戚,一路披荊斬棘,確定了自己的霸主地位酌摇,生命力頑強膝舅,常年雄踞編程排行榜第一位,就業(yè)廣泛窑多、待遇豐厚仍稀,使用JAVA的大廠有阿里巴巴、京東埂息、美團技潘、頭條判沟、拼多多、拍拍貸崭篡、攜程、微盟等等等等吧秕,其中京東琉闪、拍拍貸、攜程砸彬、微盟都是從.NET轉(zhuǎn)向JAVA颠毙。

編程排行榜

????
什么跨平臺,面向?qū)ο缶筒徽f了砂碉,現(xiàn)在很多高級語言都有蛀蜜,一些特性,性能甚至比它還要好增蹭,就拿c#來對比滴某,單從語言層面來講要比JAVA優(yōu)秀的多。

????
現(xiàn)在看來最關(guān)鍵的還是強大的生態(tài)圈滋迈,在國內(nèi)又有阿里這種超級大廠支持霎奢,并開源了很多優(yōu)秀的框架和組件,給java程序員提供各種解決方案饼灿。

JAVA三大體系

  • Java SE(Java2 Platform Standard Edition幕侠,標(biāo)準(zhǔn)版)
  • Java EE(Java 2 Platform,Enterprise Edition,企業(yè)版)
  • Java ME(Java 2 Platform Micro Edition碍彭,移動版)

每個版本有對應(yīng)的jdk(Orcale JDK和Open JDK)

JAVA三大體系

JDK晤硕,JRE,JVM是什么

????
先了解下JDK庇忌,JRE舞箍,JVM是什么,他們之間有什么關(guān)系皆疹。

????
JVM :英文名稱(Java Virtual Machine)创译,就是我們常說的JAVA虛擬機,它能將JAVA源代碼編譯成的.class文件中的字節(jié)碼指令翻譯成計算機能識別的機器碼讓計算機執(zhí)行墙基,JVM是java跨平臺的核心软族。

????
JRE :英文名稱(Java Runtime Environment),Java 運行時環(huán)境残制。它主要包含兩個部分立砸,jvm 的標(biāo)準(zhǔn)實現(xiàn)和 Java 的一些基本類庫。它相對于 jvm 來說初茶,多出來的是一部分的 Java 類庫颗祝。

????
JDK :英文名稱(Java Development Kit),Java 開發(fā)工具包。jdk 是整個 Java 開發(fā)的核心螺戳,它集成了 jre 和一些好用的小工具搁宾。例如:javac.exe,java.exe倔幼,jar.exe 等盖腿。

????
顯然,這三者的關(guān)系是:一層層的嵌套關(guān)系损同。JDK>JRE>JVM翩腐。

????
JAVA開發(fā)人員只需要安裝JDK(JDk包含JRE,JVM)膏燃,非JAVA開發(fā)人員需要運行JAVA應(yīng)用的話茂卦,可單獨安裝JRE。

下載安裝配置

????
這里主要介紹下在windows環(huán)境下安裝和配置组哩,打開官網(wǎng)等龙,選擇Java SE版本選擇Oracle JDK:

下載安裝

點擊進(jìn)入下載頁面,接收協(xié)議伶贰,并且選擇適合自己版本的JDK而咆,這里我們選擇windows 64位jdk,如圖:

選擇對應(yīng)版本

下載好之后進(jìn)行安裝幕袱,安裝完成之后我們來進(jìn)行環(huán)境變量配置暴备,以win10為例,右擊“此電腦”->"屬性"->“高級系統(tǒng)設(shè)置”->“高級”->"環(huán)境變量":

配置環(huán)境變量
配置環(huán)境變量
配置環(huán)境變量

用戶變量是指當(dāng)前登錄的用戶们豌,系統(tǒng)變量是針對所有用戶涯捻,我們在系統(tǒng)變量里面設(shè)置,點擊新建:

配置環(huán)境變量

1.設(shè)置JAVA_HOME變量望迎,變量名輸入“JAVA_HOME”障癌,變量值為jdk的安裝目錄,點擊確定辩尊。
然后在系統(tǒng)變量列表里面找到Path變量涛浙,點擊編輯,然后點擊新建:

配置環(huán)境變量

輸入jdk安裝目錄下的bin目錄摄欲,點擊確定轿亮。
JAVA_HOME變量作用是和第三方軟件約定好引用jdk的目錄。

2.設(shè)置Path變量胸墙,Path變量是命令搜索變量我注,在cmd命令窗口下輸入命令會到指定的目錄搜索命令。

來寫一個HelloWorld

????
新建一個HelloWorld.java文件迟隅,打開文件輸入如下代碼:

 public class HelloWorld {
     public static void main(String[] args) {
         System.out.println("Hello World");
     }
 }

進(jìn)入cmd命令提示符窗口但骨,進(jìn)入文件當(dāng)前目錄励七,輸入:

javac HelloWorld.java

將java文件編譯為.class文件(字節(jié)碼文件),然后輸入:

java HelloWorld

運行程序奔缠。

[圖片上傳失敗...(image-2ecb1f-1554131747890)]

main方法是程序的入口掠抬,args是可以接收的參數(shù),我們將上面代碼改造一下:

public class HelloWorld {
     public static void main(String[] args) {
         System.out.println("參數(shù)1:"+args[0]+"校哎,參數(shù)2:"+args[1]);
     }
 }

在cmd命令窗口輸入

javac -encoding utf-8 helloworld.java

(因為代碼包含中文两波,可能會亂碼導(dǎo)致無法編譯,所以使用-encoding utf-8指定編碼格式)編譯成class文件贬蛙,然后輸入運行命令

java HelloWorld 翠花 上菜
注意:

????
java類名必須和文件名相同(不區(qū)分大小寫),使用java命令運行程序時谚攒,java后面的名稱是類名稱(區(qū)分大小寫)阳准。

運行帶包名的類文件

????
我們看下帶包的類是如何編譯和運行的,先將上面的代碼再改造一下馏臭,改成帶包的類野蝇,在第一行加入如下代碼:

package cuihua;

完整代碼如下:

package cuihua;
public class HelloWorld {
     public static void main(String[] args) {
         System.out.println("Hello World");
     }
 }

把上面的代碼放入名為cuihua的目錄,在當(dāng)前目錄輸入如下命令:

javac helloworld.java
java HelloWorld

[圖片上傳失敗...(image-842e4a-1554131747890)]

執(zhí)行java HelloWorld命令時報錯括儒,找不到入口绕沈,因為運行程序的時候是通過包名再找到類名,包名和目錄需要對應(yīng)帮寻,所以運行帶包名的類庫執(zhí)行命令時需要將包名帶上乍狐,執(zhí)行命令改為如下代碼:

java cuihua.HelloWorld

[圖片上傳失敗...(image-ab3bc2-1554131747890)]

還是報錯,我們仔細(xì)看下固逗,我們所在的目錄是cuihua浅蚪,cuihua下面沒有cuihua文件夾,所以需要返回上一級目錄烫罩,再執(zhí)行上面的命令惜傲,命令如下:

cd ../
java cuihua.HelloWorld

[圖片上傳失敗...(image-a3ce57-1554131747890)]

多層/多級包

????
有了前面的知識鋪墊之后,我們來思考一下如果包是多層的情況下贝攒,這個HelloWorld代碼怎么運行盗誊?現(xiàn)在我們將上面的包名修改一下,修改如下:

package cuihua.shangcai

完整代碼如下:

package cuihua.shangcai;
public class HelloWorld {
     public static void main(String[] args) {
         System.out.println("Hello World");
     }
 }

這種情況下隘弊,該類文件應(yīng)該放在cuihua/shangcai目錄下哈踱,運行時在cuihua上一級目錄運行,在cmd命令窗口輸入如下代碼:

javac cuihua/shangcai/helloworld.java
java cuihua.shangcai.HelloWorld

[圖片上傳失敗...(image-9c0743-1554131747890)]

JAVA運行機制

????
java是一門高級語言梨熙,所寫的程序計算機是無法識別的嚣鄙,所以就需要一種解釋器將它翻譯成本地計算機能識別的機器語言,從我們寫的java程序到計算機能運行程序需要經(jīng)過兩個步驟串结,一個是將java源代碼編譯成與平臺無關(guān)的.class字節(jié)碼文件哑子,然后交給jvm逐行翻譯解釋本地計算機能識別的機器語言并運行舅列,所以我們通常所說的java跨平臺不是指的java語言本身跨平臺,而是jvm跨平臺卧蜓,jvm屏蔽了計算機平臺相關(guān)性帐要,每個計算機平臺都有單獨的jvm實現(xiàn),比如windows下可以安裝windows版的jre弥奸,mac下可以安裝mac版本的jre榨惠,linux下安裝linux版本的jre。


運行機制

JIT編譯器

JIT也叫做即時編譯器盛霎,是一種動態(tài)編譯技術(shù)赠橙,起初java運行性能遠(yuǎn)低于c/c++ 這類靜態(tài)編譯語言,自從引入JIT編譯器之后愤炸,java可以提供與c/c++相當(dāng)?shù)男阅芷诰荆踔吝€會高于它們,javac屬于前端編譯规个,jit屬于后端編譯凤薛。

graph TD
字節(jié)碼文件 -->JIT編譯器
JIT編譯器 -->A{"是否已編譯本地機器碼"}
A --> |是| 執(zhí)行本地機器碼
A --> |否| 方法調(diào)用計數(shù)器+1
執(zhí)行本地機器碼 
方法調(diào)用計數(shù)器+1 --> B{"計數(shù)器是否超過閾值"}
B --> |是| 向編譯器提交編譯請求
B --> |否| 以解釋方式執(zhí)行方法
向編譯器提交編譯請求 --> 以解釋方式執(zhí)行方法
以解釋方式執(zhí)行方法 --> 結(jié)束
執(zhí)行本地機器碼 --> 結(jié)束
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市诞仓,隨后出現(xiàn)的幾起案子缤苫,更是在濱河造成了極大的恐慌,老刑警劉巖墅拭,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件活玲,死亡現(xiàn)場離奇詭異,居然都是意外死亡谍婉,警方通過查閱死者的電腦和手機翼虫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屡萤,“玉大人珍剑,你說我怎么就攤上這事∷缆剑” “怎么了招拙?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長措译。 經(jīng)常有香客問我别凤,道長,這世上最難降的妖魔是什么领虹? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任规哪,我火速辦了婚禮,結(jié)果婚禮上塌衰,老公的妹妹穿的比我還像新娘诉稍。我一直安慰自己蝠嘉,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布杯巨。 她就那樣靜靜地躺著蚤告,像睡著了一般。 火紅的嫁衣襯著肌膚如雪服爷。 梳的紋絲不亂的頭發(fā)上杜恰,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機與錄音仍源,去河邊找鬼心褐。 笑死,一個胖子當(dāng)著我的面吹牛笼踩,可吹牛的內(nèi)容都是我干的逗爹。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼戳表,長吁一口氣:“原來是場噩夢啊……” “哼桶至!你這毒婦竟也來了昼伴?” 一聲冷哼從身側(cè)響起匾旭,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎圃郊,沒想到半個月后价涝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡持舆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年色瘩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逸寓。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡居兆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出竹伸,到底是詐尸還是另有隱情泥栖,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布勋篓,位于F島的核電站吧享,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏譬嚣。R本人自食惡果不足惜钢颂,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拜银。 院中可真熱鬧殊鞭,春花似錦遭垛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至牲尺,卻和暖如春卵酪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谤碳。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工溃卡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蜒简。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓瘸羡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親搓茬。 傳聞我的和親對象是個殘疾皇子犹赖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350