電腦語言發(fā)展:
第一代:機器語言-》第二代:匯編語言-》第三代:高級語言
匯編語言:結(jié)構(gòu)不好,出來很多高級語言(面向?qū)ο蠛窳⒚嫦蜻^程(B->C語言(貝爾)->C++))
高級語言:fortran(IBM); C#:小型項目;
JAVA特性:一次編寫别垮,各處運行。(完全面向?qū)ο螅?/b>
一茬贵、 概述
a) The Source for JAVATM technology: www.sun.com
b) 過程中一定要查java api文檔移袍。
c) 誕生于1991老充,sun公司啡浊,原名Oak(橡樹)。
d) 應用領(lǐng)域
1>*企業(yè)級應用:地圖喘先,電力系統(tǒng)廷粒,華為(協(xié)議封裝(好維護)),大型ERP系統(tǒng)后臺涤姊。
2>大型應用服務器:oracle, application思喊,server, IBM webspere, bea weblogic.
3>無線領(lǐng)域:WAP CATE
4>嵌入式領(lǐng)域:手機游戲次酌,JAVA芯片
5>JAVA圖形:CIS平臺客戶端
二舆乔、 優(yōu)點
1. 簡單:
風格類似c++蜕煌;摒棄了C++中容易引發(fā)程序錯誤的地方斜纪。
2.面向?qū)ο螅?/p>
支持靜態(tài)和動態(tài)風格的代碼繼承及重用
3. 健壯(用戶不管怎么輸入都不會出現(xiàn)異常)
4. 多線程(線程調(diào)動機制不一樣文兑,產(chǎn)生的結(jié)果不定,控制問題)*(線程安全問題因块,悲觀鎖涡上,樂觀鎖)
5. 結(jié)構(gòu)中立跨平臺(java核心優(yōu)勢)
6. 安全
7. **一次編寫吩愧,到處運行**
克服c的問題,GC垃圾回收改善內(nèi)存泄漏雁佳。單一繼承糖权。指針問題炸站。
缺點:效率低。內(nèi)存耗量大(硬件要求高)禁偎。
三届垫、JAVA應用程序運行機制
1.計算機的高級編程語言類型
1>編譯型:C語言(效率高,一次性把源程序編譯成機器語言直接執(zhí)行装处,結(jié)構(gòu)化語言,需求變化不大寝蹈,底層變化不大)
2>解釋型:Basic語言
2.JAVA是兩種語言的結(jié)合(面向?qū)ο蟮翘裕枨笞兓欢ǎ?/p>
??????????**JAVA虛擬機**
先編譯成虛擬機接受的字節(jié)碼文件黔州,虛擬機再相應的具體的機器系統(tǒng)解釋成指令流妻。
? ? ? **每個系統(tǒng)對應一個虛擬機**
需要為每一個執(zhí)行系統(tǒng)提供一個虛擬機(統(tǒng)一規(guī)范,按Java標準)涣达,同一個程序在四個操作系統(tǒng)上運行证薇,提供四個虛擬機(優(yōu)點:上層都符合同樣的規(guī)范浑度,拿到相同的字節(jié)碼文件。
缺點:效率低疗认,轉(zhuǎn)化編譯又解釋JAVA缺點)
3.JAVA源程序伏钠,字節(jié)碼文件熟掂,機器碼指令赴肚。
四·JAVA的平臺相關(guān)性
1.JAVA源代碼和字節(jié)碼的與機器無關(guān)的
2.JVM是與機器相關(guān)的
3.裝有不同操作系統(tǒng)的機器上誉券,需要有專門為該操作系統(tǒng)開發(fā)的JVM.
七.JAVA的垃圾回收機制(GC)
**垃圾收集GC**
(后臺線程)程序執(zhí)行過程中對內(nèi)存使用情況跟蹤踊跟,當對象長時間無人使用時商玫,自動進行(除非對象被設(shè)置為持久態(tài))。
優(yōu)點:改善內(nèi)存泄漏
缺點;效率低
**Java能真正避免內(nèi)存泄漏嗎?**
答:(c語言容易出現(xiàn):內(nèi)存使用不當拳昌,內(nèi)存泄漏炬藤,系統(tǒng)崩潰。)不能畅买,只能改善谷羞。內(nèi)存泄漏仍是國際難題。
八.?Java分為兩類(applet小應用程序(較少使用不安全)湃缎,應用程序application)?
九.Java應用程序
*4.虛擬機:就是一種規(guī)范。主方法是虛擬機的入口图贸。虛擬機只能通過類找主方法疏日,因為最開始是沒有對象的。
??? 會向主方法棧幀里傳參數(shù)涕滋,空數(shù)組對象宾肺,類型string。(沒有任何一個元素)標準類庫里類中找string類型锨用,創(chuàng)建string類型的變量s.
**String類型和string[]類型**
????String[]類型(args輸出string[]類型的對象的地址增拥,返回的就是string[]類型跪者,加載了string[]類型的字節(jié)碼文件棵帽。傳一個string[]類型字符串數(shù)組對象(空數(shù)組對象無元素))
字節(jié)碼文件:不一定是主類的字節(jié)碼文件,但一定包含主方法渣玲。
HelloWorld運行原理及過程
Java HelloWorld 找到字節(jié)碼文件
Javac HelloWorld.java 只有一個類編譯成一個字節(jié)碼文件逗概。
**helloworld有幾個文件幾個對象幾個類**:
兩個文件:源文件,字節(jié)碼文件(分為四個;string文件忘衍,string[]文件逾苫,HelloWord.class,system文件枚钓。)
五個對象:空對象铅搓,HelloWorld常對象,三個輸入輸出流對象(標準字節(jié)輸出流對象system.out ?????/system.in鍵盤輸入/system.err顯示器)
三個方法:main方法搀捷,println方法星掰,to string方法
兩個變量:局部變量:args ; s
一個類:helloworld
零個屬性
過程:
省略了導包(默認)Java.Lang.*.包在標準類庫中的lang包中找對象。
1.虛擬機加載helloworld播玖,加載內(nèi)存字節(jié)碼文件,找主方法果覆,用static通過類找主方法且公有public執(zhí)行主方法八千,虛擬機不需要接收返回值(void),主方法不要給虛擬機返回值照皆。
虛擬機會向主方法傳參膜毁,將局部變量s定為形參(沒有確切的值,賦予null)倒淫,參數(shù)為一個字符串數(shù)組對象new String[0],
參考上圖⊙剩空數(shù)組對象無元素有值。
2.執(zhí)行string s该默,string.class,建string類型的變量,到j(luò)dk里的標準類庫里找到string的字節(jié)碼文件和緩沖內(nèi)存,加載內(nèi)存的內(nèi)方法區(qū),(args類型也是string[].class,)
?? 找到string類型局部變量s, ?string.class, s在棧中,s在方法里值是不定的(string會復寫s的值),當方法區(qū)中常量池無helloworld時建一個helloworld字符串對象买鸽。對象的返回值即使對象的值又是對象的地址引用距離,對象的值返回的是對象的地址批旺,字符串常量字符串對象理論上在堆朱沃,這個對象特殊。將這個字符串對象給s。輸出失暴。
3.在堆上創(chuàng)建三個輸入輸出對象欠橘,system.out標準字節(jié)輸出流對象等黍檩。
4.調(diào)用println()方法輸出s的值,即helloworld的地址,沒有真正輸出地址殿怜。Jdk會自動調(diào)用string對象的to string方法,直接輸出對象里的字符串甲脏。