# Java 的開發(fā)歷史 #
????java 最初的時候是由sun(Sun Microsyst NetWok 中文名稱是斯坦福大學(xué)校園網(wǎng))公司開展oak 項(xiàng)目衍生出來的技術(shù)绍坝。
????1995年,sun公司推出Java 技術(shù),于1996 年推出java1.0版本朽缴,1997年在中國登陸
????在sun公司的低潮期,最想收購java的是IBM 公司艾杏,但是卻最終被Orcale公司進(jìn)行收購客情。
????在當(dāng)時通過Java 賺到錢的只有 ibm 迅细,直到現(xiàn)在為止Oracle 只是通過Java 的版權(quán)爭執(zhí)獲取到一部分的利益溺森。
# Java 的版本 #
????Java 分為三個版本:
????????java se : 原先的時候是 J2SE ,后來被更名為java se 慕爬,原先是想要做系統(tǒng)應(yīng)用的,是最底層的內(nèi)容
????????Java me : 原先的時候是 J2ME.后來被更名為 Java me 屏积。
????????原先是想要做手機(jī)系統(tǒng)的医窿,因?yàn)?Nokia 的衰落而衰落
????????Java ee : 原先的時候是 J2EE ,后來被更名為 Java ee炊林,
????????原先的時候是想要做企業(yè)平臺的搭建姥卢,現(xiàn)在主要開發(fā)互聯(lián)網(wǎng)平臺
# java 主要特點(diǎn) #
-?半開源 : java 程序更加透明,更加容易讓人接受
-?面向?qū)ο?:讓大家更加容易理解和開發(fā)
-?可移植性 : 讓大家可以進(jìn)行多平臺的開發(fā)
-?多線程 :讓大家可以同時處理多個任務(wù),但是也帶來了高并發(fā)等等問題
-?高效的網(wǎng)絡(luò)處理能力
-?高效的垃圾回收機(jī)制 : java 程序去除指針反而使用引用的方式進(jìn)行替代独榴,讓大家可以不用去實(shí)時的進(jìn)行對象的回收(帶來的弊端是需要進(jìn)行優(yōu)化)
# Java 語言的分類 #
????java 語言既不屬于編譯型語言僧叉,也不屬于解釋型語言。因?yàn)閖ava 文件會在剛開始的時候通過編譯器編譯成為一個.class文件(編譯過程)括眠,然后再通過jvm 直接運(yùn)行.class文件(解釋過程彪标,就像c語言打包后成為.exe可執(zhí)行文件進(jìn)行使用)
其他意見
????先看下定義:編譯型語言:把做好的源程序全部編譯成二進(jìn)制代碼的可運(yùn)行程序,然后掷豺,可直接運(yùn)行這個程序。解釋型語言:把做好的源程序翻譯一句薄声,然后執(zhí)行一句当船,直至結(jié)束!Java它首先由編譯器編譯成.class(字節(jié)碼)文件默辨,然后在通過JVM從.class文件中讀一行解釋執(zhí)行一行德频,所以它是解釋型的語言,也正是由于java對于多種不同的操作系統(tǒng)有不同的JVM缩幸,所以實(shí)現(xiàn)了真正意義上的跨平臺壹置。
????有些答案對JAVA的理解還停留在上古時代或者教科書里。其實(shí)表谊,現(xiàn)在用編譯型钞护、解釋型來分類編程語言已經(jīng)有點(diǎn)力不從心了。JAVA的第一道工序是javac編譯爆办,當(dāng)然目標(biāo)文件是BYTECODE难咕。后續(xù)可能有三種處理方式:1. 運(yùn)行時,BYTECODE由JVM逐條解釋執(zhí)行距辆,2. 運(yùn)行時余佃,部分代碼可能由JIT翻譯為目標(biāo)機(jī)器指令(以method為翻譯單位,還會保存起來跨算,第二次執(zhí)行就不用翻譯了)直接執(zhí)行爆土;3. RTSJ。繼JAVAC之后執(zhí)行AOT二次編譯诸蚕,生成靜態(tài)的目標(biāo)平臺代碼(典型的就是IBM WEBSHPERE REAL TIME)步势。有的時候,可能是以上三種方式同時在使用挫望。至少立润,1和2是同時使用的,3需要程序員手工指定媳板。所以討論語言得更細(xì)化一點(diǎn)了桑腮,強(qiáng)類型的、弱類型的蛉幸,靜態(tài)的破讨、動態(tài)的丛晦,GC-based的、手工管理內(nèi)存的提陶,有沒有VM...
# java 開發(fā)基礎(chǔ) #
????在java 開發(fā)中的最小單位是類烫沙,而類中的最小執(zhí)行單元是方法
????在一個java 文件有兩種類(內(nèi)部類和匿名內(nèi)部類暫且不說)
-?????public class (公共類): 一個java 文件中只可以有一個
-????????????class (普通類): 一個Java文件中可以有多個
????java 中都是通過在main(主方法)開始運(yùn)行,而主方法所在的類被稱為主類
# java 開發(fā)之 CLASSPATH 的配置 #
????CLASSPATH 是jvm進(jìn)行編譯的時候調(diào)用的環(huán)境隙笆,默認(rèn)是在當(dāng)前生成.class 文件锌蓄,但是在某些 java 工具會修改CLASSPATH,所以大家可以在windows 的環(huán)境設(shè)置進(jìn)行設(shè)置修改撑柔,格式是 CLASSPATH 就是.(點(diǎn))瘸爽,如果在cmd 窗口中進(jìn)行修改那么可以設(shè)置為
????SET CLASSPATH = "位置"
????如果設(shè)置為默認(rèn)環(huán)境可以使用?
????SET CLASSPATH = .進(jìn)行設(shè)置
# java 開發(fā)之注釋 #
????java 之中有三種注釋的方法:
????????單行注釋 : //
????????多行注釋 : /*??*/
????????文檔注釋 : /**??*/
????在開發(fā)中一般使用單行注釋,如果有多行代碼出錯铅忿,或者其他情況使用多行注釋剪决,如果是重要的類或者是方法可以使用文檔注釋進(jìn)行注釋
????ps :如果使用文檔注釋可以使用 javadoc.exe 生成一個 doc 開發(fā)文檔?
# java 標(biāo)識符和關(guān)鍵字 #
????java 中對于方法,類等進(jìn)行命名的格式被稱為使用標(biāo)識符檀训,對于標(biāo)識符需要以下幾點(diǎn)要求
????????-?????標(biāo)識符可以使用數(shù)字柑潦,字母,_與$ 進(jìn)行使用
????????-?????標(biāo)識符中不可以使用數(shù)字進(jìn)行開頭
????????-?????因?yàn)樵贘ava中使用內(nèi)部類編譯生成后會出現(xiàn)$符號峻凫,所以如果在代碼中使用應(yīng)該進(jìn)行避免(開發(fā)中一般不會使用)
????????-?????標(biāo)識符不可以和關(guān)鍵字(包括保留字)渗鬼,true,false蔚晨,null(Java中預(yù)定義的字面常量)相同
# java 語言的數(shù)據(jù)類型 #
????java 語言分為兩個大類
????????- 基礎(chǔ)數(shù)據(jù)類型
????????????- 分為4類 8 種
????????????????- 整數(shù)型
????????????????????- byte
????????????????????- shrt
????????????????????- int
????????????????????- long
????????????????- 浮點(diǎn)型
????????????????????- float
????????????????????- double
????????????????- 布爾型
????????????????????- boolean
????????????????- 字符型
????????????????????- char
????????- 引用數(shù)據(jù)類型
????????????- 分為三種
????????????????- 枚舉
????????????????- 數(shù)組
????????????????- 對象
基本數(shù)據(jù)的默認(rèn)使用
????整數(shù)型默認(rèn)使用 int
????浮點(diǎn)型默認(rèn)使用 double?
????????ps : double 比 float 的取值范圍更加多
基本數(shù)據(jù)類型的默認(rèn)數(shù)據(jù)
????整數(shù)型
????????- 默認(rèn)為0
????浮點(diǎn)型
????????- 默認(rèn)為0.0
????布爾型
????????- 默認(rèn)為 false
????字符型
????????- 默認(rèn)為 /u0000
基本數(shù)據(jù)類型的取值范圍
????byte
?????????-128~127乍钻,占用1個字節(jié)(-2的7次方到2的7次方-1)
????short?
????????-32768~32767,占用2個字節(jié)(-2的15次方到2的15次方-1)?
????int?
????????-2147483648~2147483647)铭腕,占用4個字節(jié)(-2的31次方到2的31次方-1)?
????long
????????(-9223372036854774808~9223372036854774807)银择,占用8個字節(jié)(-2的63次方到2的63次方-1)
????float
????????3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同樣累舷,e-45表示乘以10的負(fù)45次方)占用4個字節(jié)?
????double
????????雙進(jìn)度浮點(diǎn)數(shù)使用42存儲浩考,有效位數(shù)16位,最大值是 10^16 ~ 10^17
????boolean
?????????這個類型只有兩個值被盈,true和false(真和非真)析孽,有人說可以占1/8個字節(jié)
????char
# 數(shù)據(jù)溢出 #
????在java 中,當(dāng)一個值超過當(dāng)前數(shù)據(jù)的大小的時候就會發(fā)生數(shù)據(jù)溢出(也就是數(shù)據(jù)回轉(zhuǎn)只怎,比如int 的Intager.MAX_VALUE + 1 后就會出現(xiàn)int 的最小值)
????解決的方法:
????????對于數(shù)據(jù)進(jìn)行更大類型的轉(zhuǎn)換
# 數(shù)據(jù)類型轉(zhuǎn)型的分類 #
????自動轉(zhuǎn)換
????強(qiáng)制轉(zhuǎn)換
# 字符型數(shù)據(jù) #
????在java 中 字符型數(shù)據(jù)使用char 來表示,在char 中可以定義單個字符,字符包括以下幾種
????????- 數(shù)字(0-9)
????????- 小寫字母(a-z)
????????- 大寫字母 (A-Z)
????????-?
????在char 數(shù)據(jù)類型中都可以轉(zhuǎn)換為int 數(shù)據(jù)的類型,其中取值范圍是
????????- '0'??(48)??-??'9'??(57)
????????- 'a'??(97)??-??'z'??(122)
????????- 'A'??(65)??-???'Z'??(90)
# 布爾數(shù)據(jù)類型 #
????在java 中布爾類型使用Boolean 來進(jìn)行表示,用來做邏輯的運(yùn)行,只有 true false 值
# 字符串 #
????字符串不是一種基本數(shù)據(jù)類型,但是子實(shí)際開發(fā)中各種語言都會提供字符串的相應(yīng)描述,而在java中使用 String 來進(jìn)行表示
????可以使用 + 號進(jìn)行字符串的連接(最常用)
????在String 類型中有各種方法進(jìn)行方法,可以去開發(fā)文檔中進(jìn)行查看
????ps : 在各種數(shù)據(jù)類型進(jìn)行加法計(jì)算的時候,碰巧有String 數(shù)據(jù)對其進(jìn)行連接操作,如果沒有指定操作順序(也就是在計(jì)算操作的時候加上一個()括號),那么就會優(yōu)先進(jìn)行字符串的連接操作
????在各種數(shù)據(jù)類型進(jìn)行其他計(jì)算(加法除外)的時候,碰巧有String 數(shù)據(jù)對其進(jìn)行連接操作,如果沒有指定操作順序(也就是在計(jì)算操作的時候加上一個()括號),那么就會報錯
# 轉(zhuǎn)義字符 #
????如果某些操作需要使用符號或者換行 ,空格 , tab制表符等操作,那么需要進(jìn)行轉(zhuǎn)義字符對其進(jìn)行轉(zhuǎn)義,否則的話得到的結(jié)果會和自己想要的結(jié)果不同
# 運(yùn)算符 #
????算術(shù)運(yùn)算符( + - * / %??++??-- )
????????++ 或 -- 的使用規(guī)則 :
????????????如果 ++ (或者 --) 在前,先進(jìn)行自加然后再進(jìn)行計(jì)算獲得值,如果在后,先進(jìn)行計(jì)算再進(jìn)行 ++ (--)自增或自減
????賦值運(yùn)算符(??+=???-=????/=????*=???%=????=?????<<=???????>>=??&=???^=??|= )
????關(guān)系運(yùn)算符( > < >= <= == !=??)
????條件運(yùn)算符 (三目(賦值)運(yùn)算法)?
????????關(guān)系運(yùn)算 ? 滿足: 不滿足
????????ps : 三目運(yùn)算可以嵌套使用 (不建議使用,可讀性會變差)
????邏輯運(yùn)算符 (??&& | | ! )?
????位運(yùn)算符 (??& | ! ^ ? <<???>> >>>???)
????instanceof 運(yùn)算符 : 是否包含?
# java 的邏輯控制 #
????if 結(jié)構(gòu)?
????????針對關(guān)系表達(dá)式進(jìn)行判斷
????????類型
????????????if (布爾表達(dá)式){
????????????????滿足時候執(zhí)行
????????????}???
????????????if (布爾表達(dá)式){
????????????????滿足時候執(zhí)行
????????????}else{
????????????????不滿足時候執(zhí)行
????????????}?
????????????if (布爾表達(dá)式 A){
????????????????A 滿足時候執(zhí)行
????????????}else if(布爾表達(dá)式 B){
????????????????B 滿足時候執(zhí)行
????????????} else{
????????????????A B??不滿足時候執(zhí)行
????????????}
????switch 開關(guān)語句
????????在siwch 語句只可以使用 int char 枚舉(jdk 1.5之后) String(字符串 jdk 1.7之后)
????switch(數(shù)據(jù)){
????????case 數(shù)據(jù)1 :
????????????滿足數(shù)據(jù)1
?????????break;
????????case 數(shù)據(jù)2 :
????????????滿足數(shù)據(jù)2
?????????break;
????????defult :
????????????不滿足數(shù)據(jù)1 和數(shù)據(jù)2
????}
????面試題目:
????????break retrun continue 的區(qū)別:
????循環(huán)結(jié)構(gòu)
????????for 循環(huán)
????????面試題:
????????????for 循環(huán)中初始化值和for循環(huán)之外定義
????????增強(qiáng)for 循環(huán)
????????while 循環(huán)
????????????do while 結(jié)構(gòu)
????????????while 結(jié)構(gòu)
????循環(huán)控制語句 : break retrun continue?
# 訪問權(quán)限 #
????public private protected 默認(rèn)
# 方法的定義與執(zhí)行 #
????訪問權(quán)限 返回值??方法名稱(參數(shù)類型 參數(shù)){
????????//如果有返回值,要有return
????}
# 方法的重載 #
????重載的方法和返回值類型沒有關(guān)系只是和方法的參數(shù)有關(guān)系
# 方法的遞歸調(diào)用 #
????方法自己調(diào)用自己(刪除文件夾需要刪除文件,這個就是遞歸調(diào)用)
????如果使用遞歸調(diào)用容易造成內(nèi)存溢出(棧溢出)
# 方法的可變參數(shù) #
# 方法的重寫 #
# java 的堆棧 #