java語(yǔ)言基礎(chǔ)三(JavaGuide-20181212)

  1. 簡(jiǎn)述線程,程序壁晒、進(jìn)程的基本概念瓷们。以及他們之間關(guān)系是什么
  2. 線程有哪些基本狀態(tài)?這些狀態(tài)是如何定義的?
    31 關(guān)于 final 關(guān)鍵字的一些總結(jié)
    32 Java 中的異常處理
    Java異常類層次結(jié)構(gòu)圖
    Trowable類常用方法
    異常處理總結(jié)
    33 Java序列話中如果有些字段不想進(jìn)行序列化 怎么辦
    Java基礎(chǔ)學(xué)習(xí)書籍推薦

29. 簡(jiǎn)述線程秒咐,程序谬晕、進(jìn)程的基本概念。以及他們之間關(guān)系是什么

線程與進(jìn)程相似携取,但線程是一個(gè)比進(jìn)程更小的執(zhí)行單位攒钳。一個(gè)進(jìn)程在其執(zhí)行的過(guò)程中可以產(chǎn)生多個(gè)線程。與進(jìn)程不同的是同類的多個(gè)線程共享同一塊內(nèi)存空間和一組系統(tǒng)資源雷滋,所以系統(tǒng)在產(chǎn)生一個(gè)線程不撑,或是在各個(gè)線程之間作切換工作時(shí),負(fù)擔(dān)要比進(jìn)程小得多晤斩,也正因?yàn)槿绱嘶烂剩€程也被稱為輕量級(jí)進(jìn)程。

程序是含有指令和數(shù)據(jù)的文件澳泵,被存儲(chǔ)在磁盤或其他的數(shù)據(jù)存儲(chǔ)設(shè)備中实愚,也就是說(shuō)程序是靜態(tài)的代碼。

進(jìn)程是程序的一次執(zhí)行過(guò)程兔辅,是系統(tǒng)運(yùn)行程序的基本單位爆侣,因此進(jìn)程是動(dòng)態(tài)的。系統(tǒng)運(yùn)行一個(gè)程序即是一個(gè)進(jìn)程從創(chuàng)建幢妄,運(yùn)行到消亡的過(guò)程兔仰。簡(jiǎn)單來(lái)說(shuō),一個(gè)進(jìn)程就是一個(gè)執(zhí)行中的程序蕉鸳,它在計(jì)算機(jī)中一個(gè)指令接著一個(gè)指令地執(zhí)行著乎赴,同時(shí),每個(gè)進(jìn)程還占有某些系統(tǒng)資源如CPU時(shí)間潮尝,內(nèi)存空間榕吼,文件,文件勉失,輸入輸出設(shè)備的使用權(quán)等等羹蚣。換句話說(shuō),當(dāng)程序在執(zhí)行時(shí)乱凿,將會(huì)被操作系統(tǒng)載入內(nèi)存中顽素。 線程是進(jìn)程劃分成的更小的運(yùn)行單位咽弦。線程和進(jìn)程最大的不同在于基本上各進(jìn)程是獨(dú)立的,而各線程則不一定胁出,因?yàn)橥贿M(jìn)程中的線程極有可能會(huì)相互影響型型。從另一角度來(lái)說(shuō),進(jìn)程屬于操作系統(tǒng)的范疇全蝶,主要是同一段時(shí)間內(nèi)闹蒜,可以同時(shí)執(zhí)行一個(gè)以上的程序,而線程則是在同一程序內(nèi)幾乎同時(shí)執(zhí)行一個(gè)以上的程序段抑淫。

30. 線程有哪些基本狀態(tài)绷落?這些狀態(tài)是如何定義的?

  1. 新建(new):新創(chuàng)建了一個(gè)線程對(duì)象。
  2. 可運(yùn)行(runnable):線程對(duì)象創(chuàng)建后始苇,其他線程(比如main線程)調(diào)用了該對(duì)象的start()方法砌烁。該狀態(tài)的線程位于可運(yùn)行線程池中,等待被線程調(diào)度選中埂蕊,獲 取cpu的使用權(quán)往弓。
  3. 運(yùn)行(running):可運(yùn)行狀態(tài)(runnable)的線程獲得了cpu時(shí)間片(timeslice)疏唾,執(zhí)行程序代碼蓄氧。
  4. 阻塞(block):阻塞狀態(tài)是指線程因?yàn)槟撤N原因放棄了cpu使用權(quán),也即讓出了cpu timeslice槐脏,暫時(shí)停止運(yùn)行喉童。直到線程進(jìn)入可運(yùn)行(runnable)狀態(tài),才有 機(jī)會(huì)再次獲得cpu timeslice轉(zhuǎn)到運(yùn)行(running)狀態(tài)顿天。阻塞的情況分三種: (一). 等待阻塞:運(yùn)行(running)的線程執(zhí)行o.wait()方法堂氯,JVM會(huì)把該線程放 入等待隊(duì)列(waitting queue)中。 (二). 同步阻塞:運(yùn)行(running)的線程在獲取對(duì)象的同步鎖時(shí)牌废,若該同步鎖 被別的線程占用咽白,則JVM會(huì)把該線程放入鎖池(lock pool)中。 (三). 其他阻塞: 運(yùn)行(running)的線程執(zhí)行Thread.sleep(long ms)或t.join()方法鸟缕,或者發(fā)出了I/O請(qǐng)求時(shí)晶框,JVM會(huì)把該線程置為阻塞狀態(tài)。當(dāng)sleep()狀態(tài)超時(shí)join()等待線程終止或者超時(shí)懂从、或者I/O處理完畢時(shí)授段,線程重新轉(zhuǎn)入可運(yùn)行(runnable)狀態(tài)。
  5. 死亡(dead):線程run()番甩、main()方法執(zhí)行結(jié)束侵贵,或者因異常退出了run()方法,則該線程結(jié)束生命周期缘薛。死亡的線程不可再次復(fù)生窍育。
線程生命周期.jpg

備注: 可以用早起坐地鐵來(lái)比喻這個(gè)過(guò)程:

還沒(méi)起床:sleeping

起床收拾好了卡睦,隨時(shí)可以坐地鐵出發(fā):Runnable

等地鐵來(lái):Waiting

地鐵來(lái)了,但要排隊(duì)上地鐵:I/O阻塞

上了地鐵蔫骂,發(fā)現(xiàn)暫時(shí)沒(méi)座位:synchronized阻塞

地鐵上找到座位:Running

到達(dá)目的地:Dead

31 關(guān)于 final 關(guān)鍵字的一些總結(jié)

final關(guān)鍵字主要用在三個(gè)地方:變量么翰、方法、類辽旋。

  1. 對(duì)于一個(gè)final變量浩嫌,如果是基本數(shù)據(jù)類型的變量,則其數(shù)值一旦在初始化之后便不能更改补胚;如果是引用類型的變量码耐,則在對(duì)其初始化之后便不能再讓其指向另一個(gè)對(duì)象。
  2. 當(dāng)用final修飾一個(gè)類時(shí)溶其,表明這個(gè)類不能被繼承骚腥。final類中的所有成員方法都會(huì)被隱式地指定為final方法。
  3. 使用final方法的原因有兩個(gè)瓶逃。第一個(gè)原因是把方法鎖定束铭,以防任何繼承類修改它的含義;第二個(gè)原因是效率厢绝。在早期的Java實(shí)現(xiàn)版本中契沫,會(huì)將final方法轉(zhuǎn)為內(nèi)嵌調(diào)用。但是如果方法過(guò)于龐大昔汉,可能看不到內(nèi)嵌調(diào)用帶來(lái)的任何性能提升(現(xiàn)在的Java版本已經(jīng)不需要使用final方法進(jìn)行這些優(yōu)化了)懈万。類中所有的private方法都隱式地指定為fianl。

32 Java 中的異常處理

Java異常類層次結(jié)構(gòu)圖

java異常類層次結(jié)構(gòu)圖.jpg

在 Java 中靶病,所有的異常都有一個(gè)共同的祖先java.lang包中的 Throwable類会通。Throwable: 有兩個(gè)重要的子類:Exception(異常)Error(錯(cuò)誤) ,二者都是 Java 異常處理的重要子類娄周,各自都包含大量子類涕侈。

Error(錯(cuò)誤):是程序無(wú)法處理的錯(cuò)誤,表示運(yùn)行應(yīng)用程序中較嚴(yán)重問(wèn)題。大多數(shù)錯(cuò)誤與代碼編寫者執(zhí)行的操作無(wú)關(guān),而表示代碼運(yùn)行時(shí) JVM(Java 虛擬機(jī))出現(xiàn)的問(wèn)題马昨。例如,Java虛擬機(jī)運(yùn)行錯(cuò)誤(Virtual MachineError)调违,當(dāng) JVM 不再有繼續(xù)執(zhí)行操作所需的內(nèi)存資源時(shí),將出現(xiàn) OutOfMemoryError泻轰。這些異常發(fā)生時(shí)技肩,Java虛擬機(jī)(JVM)一般會(huì)選擇線程終止。

這些錯(cuò)誤表示故障發(fā)生于虛擬機(jī)自身、或者發(fā)生在虛擬機(jī)試圖執(zhí)行應(yīng)用時(shí)虚婿,如Java虛擬機(jī)運(yùn)行錯(cuò)誤(Virtual MachineError)旋奢、類定義錯(cuò)誤(NoClassDefFoundError)等。這些錯(cuò)誤是不可查的然痊,因?yàn)樗鼈冊(cè)趹?yīng)用程序的控制和處理能力之 外至朗,而且絕大多數(shù)是程序運(yùn)行時(shí)不允許出現(xiàn)的狀況。對(duì)于設(shè)計(jì)合理的應(yīng)用程序來(lái)說(shuō)剧浸,即使確實(shí)發(fā)生了錯(cuò)誤锹引,本質(zhì)上也不應(yīng)該試圖去處理它所引起的異常狀況。在 Java中唆香,錯(cuò)誤通過(guò)Error的子類描述嫌变。

Exception(異常):是程序本身可以處理的異常。Exception 類有一個(gè)重要的子類 RuntimeException躬它。RuntimeException 異常由Java虛擬機(jī)拋出腾啥。NullPointerException(要訪問(wèn)的變量沒(méi)有引用任何對(duì)象時(shí),拋出該異常)冯吓、ArithmeticException(算術(shù)運(yùn)算異常倘待,一個(gè)整數(shù)除以0時(shí),拋出該異常)和 ArrayIndexOutOfBoundsException (下標(biāo)越界異常)组贺。

注意:異常和錯(cuò)誤的區(qū)別:異常能被程序本身可以處理凸舵,錯(cuò)誤是無(wú)法處理。

Throwable類常用方法

  • public string getMessage():返回異常發(fā)生時(shí)的詳細(xì)信息
  • public string toString():返回異常發(fā)生時(shí)的簡(jiǎn)要描述
  • public string getLocalizedMessage():返回異常對(duì)象的本地化信息锣披。使用Throwable的子類覆蓋這個(gè)方法贞间,可以聲稱本地化信息贿条。如果子類沒(méi)有覆蓋該方法雹仿,則該方法返回的信息與getMessage()返回的結(jié)果相同
  • public void printStackTrace():在控制臺(tái)上打印Throwable對(duì)象封裝的異常信息

異常處理總結(jié)

  • try 塊:用于捕獲異常。其后可接零個(gè)或多個(gè)catch塊整以,如果沒(méi)有catch塊胧辽,則必須跟一個(gè)finally塊。
  • catch 塊:用于處理try捕獲到的異常公黑。
  • finally 塊:無(wú)論是否捕獲或處理異常邑商,finally塊里的語(yǔ)句都會(huì)被執(zhí)行。當(dāng)在try塊或catch塊中遇到return語(yǔ)句時(shí)凡蚜,finally語(yǔ)句塊將在方法返回之前被執(zhí)行人断。

在以下4種特殊情況下,finally塊不會(huì)被執(zhí)行:

  1. 在finally語(yǔ)句塊中發(fā)生了異常朝蜘。
  2. 在前面的代碼中用了System.exit()退出程序恶迈。
  3. 程序所在的線程死亡。
  4. 關(guān)閉CPU谱醇。

33 Java序列話中如果有些字段不想進(jìn)行序列化 怎么辦

對(duì)于不想進(jìn)行序列化的變量暇仲,使用transient關(guān)鍵字修飾步做。

transient關(guān)鍵字的作用是:阻止實(shí)例中那些用此關(guān)鍵字修飾的的變量序列化;當(dāng)對(duì)象被反序列化時(shí)奈附,被transient修飾的變量值不會(huì)被持久化和恢復(fù)全度。transient只能修飾變量,不能修飾類和方法斥滤。

34 獲取用鍵盤輸入常用的的兩種方法

方法1:通過(guò) Scanner

Scanner input = new Scanner(System.in);
String s  = input.nextLine();
input.close();

方法2:通過(guò) BufferedReader

BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); 
String s = input.readLine(); 

Java基礎(chǔ)學(xué)習(xí)書籍推薦

《Head First Java.第二版》: 可以說(shuō)是我的 Java 啟蒙書籍了将鸵,特別適合新手讀當(dāng)然也適合我們用來(lái)溫故Java知識(shí)點(diǎn)。

《Java核心技術(shù)卷1+卷2》: 很棒的兩本書佑颇,建議有點(diǎn) Java 基礎(chǔ)之后再讀咨堤,介紹的還是比較深入的,非常推薦漩符。

《Java編程思想(第4版)》: 這本書要常讀一喘,初學(xué)者可以快速概覽,中等程序員可以深入看看 Java嗜暴,老鳥還可以用之回顧 Java 的體系凸克。這本書之所以厲害,因?yàn)樗跓o(wú)形中整合了設(shè)計(jì)模式闷沥,這本書之所以難讀萎战,也恰恰在于他對(duì)設(shè)計(jì)模式的整合是無(wú)形的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末舆逃,一起剝皮案震驚了整個(gè)濱河市蚂维,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌路狮,老刑警劉巖虫啥,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異奄妨,居然都是意外死亡涂籽,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門砸抛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)评雌,“玉大人,你說(shuō)我怎么就攤上這事直焙【岸” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵奔誓,是天一觀的道長(zhǎng)斤吐。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么曲初? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任体谒,我火速辦了婚禮,結(jié)果婚禮上臼婆,老公的妹妹穿的比我還像新娘抒痒。我一直安慰自己,他們只是感情好颁褂,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布故响。 她就那樣靜靜地躺著,像睡著了一般颁独。 火紅的嫁衣襯著肌膚如雪彩届。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天誓酒,我揣著相機(jī)與錄音樟蠕,去河邊找鬼。 笑死靠柑,一個(gè)胖子當(dāng)著我的面吹牛寨辩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播歼冰,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼靡狞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了隔嫡?” 一聲冷哼從身側(cè)響起甸怕,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腮恩,沒(méi)想到半個(gè)月后梢杭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庆揪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年式曲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了妨托。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缸榛。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖兰伤,靈堂內(nèi)的尸體忽然破棺而出内颗,到底是詐尸還是另有隱情,我是刑警寧澤敦腔,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布均澳,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏找前。R本人自食惡果不足惜糟袁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望躺盛。 院中可真熱鬧项戴,春花似錦、人聲如沸槽惫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)界斜。三九已至仿耽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間各薇,已是汗流浹背项贺。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留峭判,地道東北人敬扛。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像朝抖,于是被迫代替她去往敵國(guó)和親啥箭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 本文是我自己在秋招復(fù)習(xí)時(shí)的讀書筆記治宣,整理的知識(shí)點(diǎn)急侥,也是為了防止忘記,尊重勞動(dòng)成果侮邀,轉(zhuǎn)載注明出處哦坏怪!如果你也喜歡,那...
    波波波先森閱讀 11,242評(píng)論 4 56
  • 集合框架: 1)特點(diǎn):存儲(chǔ)對(duì)象绊茧;長(zhǎng)度可變铝宵;存儲(chǔ)對(duì)象的類型可不同2)Collection(1)List:有序的;元素...
    Demo_Yang閱讀 1,251評(píng)論 0 4
  • 進(jìn)程和線程 進(jìn)程 所有運(yùn)行中的任務(wù)通常對(duì)應(yīng)一個(gè)進(jìn)程,當(dāng)一個(gè)程序進(jìn)入內(nèi)存運(yùn)行時(shí),即變成一個(gè)進(jìn)程.進(jìn)程是處于運(yùn)行過(guò)程中...
    勝浩_ae28閱讀 5,087評(píng)論 0 23
  • 整理來(lái)自互聯(lián)網(wǎng) 1华畏,JDK:Java Development Kit鹏秋,java的開發(fā)和運(yùn)行環(huán)境,java的開發(fā)工具...
    Ncompass閱讀 1,537評(píng)論 0 6
  • 前言 詮釋了我的內(nèi)心真實(shí)想法 PathMeasure之直播間送愛心 Path(路徑)亡笑,在繪制自定義控件中占著舉足輕...
    文淑閱讀 426評(píng)論 0 7