1、什么時候用靜態(tài)變量 靜態(tài)方法?為什么要使用靜態(tài)變量、靜態(tài)方法?他們是全局的,那么走到哪里都可以使用。而是使用很方便。static全局變量只在聲明此static全局變量的文件中有效;普通全局變量對整個源程序都有效,當(dāng)此源程序包含多于一個文件的程序時,對其他文件依然有效。 static局部變量的存儲區(qū)為靜態(tài)存儲區(qū),普通局部變量的存儲區(qū)為棧; static局部變量生存周期為整個源程序,但是只能在聲明其的函數(shù)中調(diào)用 static全局變量只在聲明此static全局變量的文件中有效; 普通全局變量對整個源程序都有效,當(dāng)此源程序包含多于一個文件的程序時,對其他文件依然有效。
常見的存儲區(qū)域:1、棧2、堆4、全局/靜態(tài)存儲區(qū)5、常量存儲區(qū) 棧 由編譯器在需要的時候分配,在不需要的時候自動清除的變量的存儲區(qū)。里面的變量通常是局部變量、函數(shù)參數(shù)等。 堆 由new分配的內(nèi)存塊,他們的釋放編譯器不去管,由我們的應(yīng)用程序去控制,一般一個new就要對應(yīng)一個delete。如果程序員沒有釋放掉,程序會一直占用內(nèi)存,導(dǎo)致內(nèi)存泄漏,在程序結(jié)束后,操作系統(tǒng)會自動回收。 全局/靜態(tài)存儲區(qū) 全局變量和靜態(tài)變量被分配到同一塊內(nèi)存中,全局變量又分為初始化的和未初始化的。 常量存儲區(qū) 這是一塊比較特殊的存儲區(qū),他們里面存放的是常量,不允許修改
3、子類中如何調(diào)用父類中被重寫的方法通過反射進(jìn)行??梢栽谶\(yùn)行時調(diào)用任意一個對象的方法
4、java反射機(jī)制應(yīng)用場景在運(yùn)行時判斷任意一個對象所屬的類。 在運(yùn)行時構(gòu)造任意一個類的對象。 在運(yùn)行時判斷任意一個類所具有的成員變量和方法。 Class cls = Class.forName('com.jdk'); 5、各種編碼方式及區(qū)別?ISO 就直接規(guī)定必須用兩個字節(jié),也就是16位來統(tǒng)一表示所有的字符。 即讀取文件時, ASSCII:每個字符存儲是需占用1個字節(jié)。
6、什么是tcp/ip協(xié)議,什么是三次握手?TCP為傳輸控制協(xié)議,IP為網(wǎng)際協(xié)議,是網(wǎng)絡(luò)層最重要的協(xié)議。采用TCP/IP協(xié)議通過互聯(lián)網(wǎng)傳送信息可減少網(wǎng)絡(luò)中的傳輸阻塞,方便大批量的數(shù)據(jù)在網(wǎng)上傳輸,從而提高網(wǎng)絡(luò)的傳輸效率。
第一次握手:建立連接時,客戶端發(fā)送syn包(syn=j是TCP/IP建立連接時使用的握手信號)到服務(wù)器,并進(jìn)入SYN_SENT狀態(tài),等待服務(wù)器確認(rèn);第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j 1),同時自己也發(fā)送一個SYN包。第三次握手:客戶端收到服務(wù)器的SYN ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k 1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED(TCP連接成功)狀態(tài),完成三次握手。
7、請求方法有哪些種呢?GET: 完整請求一個資源 (常用) TRACE 回顯服務(wù)器收到的請求,主要用于測試或診斷 8、如何實(shí)現(xiàn)跨域訪問?后臺代理方式 :也就是將后臺作為代理,每次對其它域的請求轉(zhuǎn)交給本域的后臺,本域的后臺通過模擬http請求去訪問其它域,再將返回的結(jié)果返回給前臺,這樣做的好處是,無論訪問的是文檔,還是js文件都可以實(shí)現(xiàn)跨域。 基于iframe實(shí)現(xiàn)跨域 :兩個頁面必須屬于一個基礎(chǔ)域(例如都是xxx.com,或是xxx.com.cn),使用同一協(xié)議(例如都是 http)和同一端口(例如都是80),這樣在兩個頁面中同時添加document.domain = 'xx.com'; 基于script標(biāo)簽實(shí)現(xiàn)跨域 :動態(tài)創(chuàng)建script標(biāo)簽就可以加載其它域的js文件,然后通過本頁面就可以調(diào)用加載后js文件的函數(shù),這樣做的缺陷就是不能加載其它域的文檔,只能是js文件 使用window.name來進(jìn)行跨域數(shù)據(jù)共享。window對象有個name屬性,該屬性有個特征:即在一個窗口(window)的生命周期內(nèi),窗口載入的所有的頁面都是共享一個window.name的,每個頁面對window.name都有讀寫的權(quán)限。
9、主鍵和索引的區(qū)別?主鍵是表中的一個或多個字段,它的值用于惟一地標(biāo)識表中的某一條記錄.;使用索引可快速訪問數(shù)據(jù)庫表中的特定信息。索引是對數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),只有當(dāng)經(jīng)常查詢索引列中的數(shù)據(jù)時,才需要在表上創(chuàng)建索引。索引占用磁盤空間,并且降低添加、刪除和更新行的速度。 添加索引:ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) 10、存儲過程使用?sql存儲過程及應(yīng)用:存儲過程(StoredProcedure),是一組為了完成特定功能的SQL 語句。存儲過程在被創(chuàng)建以后,可以在程序中被多次調(diào)用,而不必重新編寫該存儲過程的SQL語句,而且數(shù)據(jù)庫專業(yè)人員可隨時對存儲過程進(jìn)行修改,但對應(yīng)用程序源代碼毫無影響。因?yàn)閼?yīng)用程序源代碼只包含存儲過程的調(diào)用語句,從而極大地提高了程序的可移植性。因?yàn)榇鎯^程是預(yù)編譯的,在首次運(yùn)行一個存儲過程時,查詢優(yōu)化器對其進(jìn)行分析優(yōu)化,并給出最終被存在系統(tǒng)表中的執(zhí)行計劃,而批處理的Transaction-SQL 語句在每次運(yùn)行時都要進(jìn)行編譯和優(yōu)化,因此速度相對要慢一些。
11、Web 服務(wù)器性能與站點(diǎn)訪問性能優(yōu)化思路增加帶寬,盡可能多地使用靜態(tài)內(nèi)容(靜態(tài)網(wǎng)頁是相對于動態(tài)網(wǎng)頁而言,是指沒有后臺數(shù)據(jù)庫、不含程序和不可交互的網(wǎng)頁),多臺服務(wù)器負(fù)載均衡同時處理大量的并發(fā)訪問,減少網(wǎng)頁中的 HTTP 請求數(shù)。
12、負(fù)載均衡及算法 負(fù)載均衡,其意思就是分?jǐn)偟蕉鄠€操作單元上進(jìn)行執(zhí)行,例如Web服務(wù)器、FTP服務(wù)器、企業(yè)關(guān)鍵應(yīng)用服務(wù)器和其它關(guān)鍵任務(wù)服務(wù)器等,從而共同完成工作任務(wù)。 算法: 隨機(jī):負(fù)載均衡方法隨機(jī)的把負(fù)載分配到各個可用的服務(wù)器上 輪詢:輪詢算法按順序把每個新的連接請求分配給下一個服務(wù)器,最終把所有請求平分給所有的服務(wù)器。 加權(quán)輪詢:該算法中,每個機(jī)器接受的連接數(shù)量是按權(quán)重比例分配的。 最快算法:最快算法基于所有服務(wù)器中的最快響應(yīng)時間分配連接。 最少連接:系統(tǒng)把新連接分配給當(dāng)前連接數(shù)目最少的服務(wù)器 多個服務(wù)器間數(shù)據(jù)共享:session復(fù)制。tomcat的session復(fù)制使所有節(jié)點(diǎn)tomcat的會話相同,tomcat使用組播技術(shù),只要集群中一個tomcat節(jié)點(diǎn)的session發(fā)生改變,會廣播通知所有tomcat節(jié)點(diǎn)發(fā)生改變。 13、高并發(fā)量網(wǎng)站解決方案HTML靜態(tài)化、圖片服務(wù)器分離、數(shù)據(jù)庫集群、庫表散列(在應(yīng)用程序中安裝業(yè)務(wù)和應(yīng)用或者功能模塊將數(shù)據(jù)庫進(jìn)行分離,不同的模塊對應(yīng)不同的數(shù)據(jù)庫或者表,再按照一定的策略對某個頁面或者功能進(jìn)行更小的數(shù)據(jù)庫散列,比如用戶表,按照用戶ID進(jìn)行表散列,這樣就能夠低成本的提升系統(tǒng)的性能并且有很好的擴(kuò)展性。),緩存(),負(fù)載均衡,CDN(分發(fā)網(wǎng)絡(luò)。其目的是通過在現(xiàn)有的Internet中增加一層新的網(wǎng)絡(luò)架構(gòu),將網(wǎng)站的內(nèi)容發(fā)布到最接近用戶的網(wǎng)絡(luò)“邊緣”,使用戶可以就近取得所需的內(nèi)容,提高用戶訪問網(wǎng)站的響應(yīng)速度)。 14、java的垃圾回收機(jī)制(如何確定某個對象是“垃圾”?)。Java的垃圾回收機(jī)制是Java虛擬機(jī)提供的能力,用于在空閑時間以不定時的方式動態(tài)回收無任何引用的對象占據(jù)的內(nèi)存空間。 在java中是通過引用來和對象進(jìn)行關(guān)聯(lián)的,也就是說如果要操作對象,必須通過引用來進(jìn)行。那么很顯然一個簡單的辦法就是通過引用計數(shù)來判斷一個對象是否可以被回收。不失一般性,如果一個對象沒有任何引用與之關(guān)聯(lián),則說明該對象基本不太可能在其他地方被使用到,那么這個對象就成為可被回收的對象了。這種方式成為引用計數(shù)法。
由于它們互相引用對方,導(dǎo)致它們的引用計數(shù)都不為0,那么垃圾收集器就永遠(yuǎn)不會回收它們。解決方案:在Java中采取了可達(dá)性分析法(該方法的基本思想是通過一系列的“GC Roots”對象作為起點(diǎn)進(jìn)行搜索,如果在“GC Roots”和一個對象之間沒有可達(dá)路徑,則稱該對象是不可達(dá)的,不過要注意的是被判定為不可達(dá)的對象不一定就會成為可回收對象。被判定為不可達(dá)的對象要成為可回收對象必須至少經(jīng)歷兩次標(biāo)記過程,如果在這兩次標(biāo)記過程中仍然沒有逃脫成為可回收對象的可能性,則基本上就真的成為可回收對象了。)如果兩個對象互相引用,而不再被第3者所引用,那么這兩個互相引用的對象也會被回收。 15、單例設(shè)計模式的實(shí)現(xiàn)?
餓漢式是(靜態(tài)初始化對象)線程安全的,因?yàn)樘摂M機(jī)保證只會裝載一次,在裝載類的時候是不會發(fā)生并發(fā)的。 懶漢式也是可以實(shí)現(xiàn)線程安全的,只要加上synchronized即可,但是這樣一來,會降低整個訪問的速度,而且每次都要判斷。可以使用'雙重檢查加鎖'的方式來實(shí)現(xiàn),就可以既實(shí)現(xiàn)線程安全,又能夠使性能不受到很大的影響。并不是每次進(jìn)入getInstance方法都需要同步,而是先不同步,進(jìn)入方法過后,先檢查實(shí)例是否存在,如果不存在才進(jìn)入下面的同步塊,這是第一重檢查。進(jìn)入同步塊過后,再次檢查實(shí)例是否存在,如果不存在,就在同步的情況下創(chuàng)建一個實(shí)例,這是第二重檢查。這樣一來,就只需要同步一次了,從而減少了多次在同步情況下進(jìn)行判斷所浪費(fèi)的時間。 懶漢式:”雙重檢查加鎖”
22. 餓漢式:
優(yōu)點(diǎn):1.線程安全
2.在類加載的同時已經(jīng)創(chuàng)建好一個靜態(tài)對象,調(diào)用時反應(yīng)速度快
缺點(diǎn):資源效率不高,可能getInstance()永遠(yuǎn)不會執(zhí)行到,但執(zhí)行該類的其他靜態(tài)方法或者加載了該類(class.forName),那么這個實(shí)例仍然初始化
解決方案:
.靜態(tài)內(nèi)部類
16、對設(shè)計模式的理解以及使用場景?單例模式:確保一個類只有一個實(shí)例,自行提供這個實(shí)例并向整個系統(tǒng)提供這個實(shí)例,如網(wǎng)站的計數(shù)器,數(shù)據(jù)庫連接池的設(shè)計一般也是采用單例模式,因?yàn)閿?shù)據(jù)庫連接是一種數(shù)據(jù)庫資源。多線程的線程池的設(shè)計。
裝飾模式:以對客戶端透明的方式擴(kuò)展對象的功能,是繼承關(guān)系的一個替代方案; 裝飾模式應(yīng)該為所裝飾的對象增強(qiáng)功能;代理模式對代理的對象施加控制,并不提供對象本身的增強(qiáng)功能,代理對象完成用戶請求,屏蔽用戶對真實(shí)對象的訪問。靜態(tài)代理是在程序運(yùn)行之前就已經(jīng)存在了代理類,動態(tài)代理是程序運(yùn)行中在內(nèi)存中生成代理類。
裝飾器模式來說,裝飾者(decorator)和被裝飾者(decoratee)都實(shí)現(xiàn)同一個接口。
對代理模式來說,代理類(proxy class)和真實(shí)處理的類(real class)都實(shí)現(xiàn)同一個接口。
適配器模式是用新接口來調(diào)用原接口,原接口對新系統(tǒng)是不可見或者說不可用的。裝飾者模式原封不動的使用原接口,適配器是知道被適配者的詳細(xì)情況的(就是那個類或那個接口)。裝飾者只知道其接口是什么,至于其具體類型(是基類還是其他派生類)只有在運(yùn)行期間才知道。 適配器模式主要是為了接口的轉(zhuǎn)換,而裝飾者模式關(guān)注的是通過組合來動態(tài)的為被裝飾者注入新的功能或行為(即所謂的責(zé)任)。
17、設(shè)計模式的原則1、開閉原則,對擴(kuò)展開放,對修改關(guān)閉。在程序需要進(jìn)行拓展的時候,不能去修改原有的代碼2、里氏代換原則,任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)3、依賴倒轉(zhuǎn)原則,真對接口編程,依賴于抽象而不依賴于具體。18、進(jìn)程和線程的區(qū)別?進(jìn)程就是一個應(yīng)用程序在處理機(jī)上的一次執(zhí)行過程,它是一個動態(tài)的概念,而線程是進(jìn)程中的一部分,進(jìn)程包含多個線程在運(yùn)行。 進(jìn)程是具有一定獨(dú)立功能的程序關(guān)于某個數(shù)據(jù)集合上的一次運(yùn)行活動,進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨(dú)立單位.線程是進(jìn)程的一個實(shí)體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位.線程自己基本上不擁有系統(tǒng)資源。一個程序至少有一個進(jìn)程,一個進(jìn)程至少有一個線程. 19、在多線程情況下hashmap的線程不安全問題Hashtable替換HashMap,如果從結(jié)構(gòu)上對Hashtable 進(jìn)行修改,除非通過 Iterator 自身的移除或添加方法,否則在任何時間以任何方式對其進(jìn)行修改,Iterator 都將拋出 ConcurrentModificationException,面對并發(fā)的修改,Iterator 很快就會完全失敗,而不冒在將來某個不確定的時間發(fā)生任意不確定行為的風(fēng)險。 ConcurrentHashMap和Hashtable主要區(qū)別就是圍繞著鎖的粒度以及如何鎖,可以簡單理解成把一個大的HashTable分解成多個,形成了鎖分離
20、spring是何時創(chuàng)建對象的?框架讀取配置文件spring.xml后,將配置文件中每個bean元素對應(yīng)到BeanDefinition.
21、啟動線程的方法?Thread類的start()方法來啟動一個線程,
22、線程的優(yōu)先級?* 1.Java中線程優(yōu)先級:1--10 * 2.默認(rèn)優(yōu)先級:5;設(shè)置優(yōu)先級:setPriority(intp) 我們可以設(shè)定,但仍然由操作系統(tǒng)來決定;
23、線程的常用操作?休眠線程:Thread.sleep(1000); 加入線程:* 調(diào)用join()的對象,會保證先執(zhí)行完畢,其它線程才會開始執(zhí)行; 禮讓線程:yield()當(dāng)前執(zhí)行的線程,會退回到'就緒'狀態(tài),等待操作系統(tǒng)再次分配執(zhí)行時間. 操作系統(tǒng)很有可能會再次讓這個線程執(zhí)行; 守護(hù)線程:守護(hù)線程:當(dāng)主進(jìn)程結(jié)束時,線程也會跟著結(jié)束(但不會立即結(jié)束,有個小緩沖) setDaemon(true); 中斷線程:Object-->wait() Thread-->sleep() Thread-->yield() 此方式,會在當(dāng)線程處于上述三種狀態(tài)之一時,引發(fā)一個異常, 我們可以在異常中,停止掉線程; 停止線程:stop(),但是常用使用退出標(biāo)志,使線程正常退出。 反對使用stop(),是因?yàn)樗话踩?。它會解除由線程獲取的所有鎖定,而且如果對象處于一種不連貫狀態(tài),那么其他線程能在那種狀態(tài)下檢查和修改它們。結(jié)果很難檢查出真正的問題所在。suspend()方法容易發(fā)生死鎖。調(diào)用suspend()的時候,目標(biāo)線程會停下來,但卻仍然持有在這之前獲得的鎖定。此時,其他任何線程都不能訪問鎖定的資源,除非被'掛起'的線程恢復(fù)運(yùn)行。對任何線程來說,如果它們想恢復(fù)目標(biāo)線程,同時又試圖使用任何一個鎖定的資源,就會造成死鎖。所以不應(yīng)該使用suspend(),而應(yīng)在自己的Thread類中置入一個標(biāo)志,指出線程應(yīng)該活動還是掛起。若標(biāo)志指出線程應(yīng)該掛起,便用wait()命其進(jìn)入等待狀態(tài)。若標(biāo)志指出線程應(yīng)當(dāng)恢復(fù),則用一個notify()重新啟動線程。
* wait():會釋放鎖; *sleep():不釋放鎖; *yield():不釋放鎖; sleep(100L)意思為:占用CPU,線程休眠100毫秒 24、同步的好處和弊端?并發(fā)訪問:* 1.是否是多線程環(huán)境 * 2.是否有共享數(shù)據(jù) * 3.是否有多條語句操作共享數(shù)據(jù) 同步的好處: * 1.它解決了多個線程的并發(fā)性訪問的問題; * 同步的弊端: * 1.由于判斷鎖對象,所以會有額外的執(zhí)行代碼,所以效率會降低; 56、多線程有幾種實(shí)現(xiàn)方法?同步有幾種實(shí)現(xiàn)方法?多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口 同步的實(shí)現(xiàn)方面有兩種,分別是synchronized,wait與notify wait():使一個線程處于等待狀態(tài),并且釋放所持有的對象的lock。 sleep():使一個正在運(yùn)行的線程處于睡眠狀態(tài),是一個靜態(tài)方法,調(diào)用此方法要捕捉InterruptedException異常。 notify():喚醒一個處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時候,并不能確切的喚醒某一個等待狀態(tài)的線程,而是由JVM確定喚醒哪個線程,而且不是按優(yōu)先級。 Allnotity():喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。
25、線程的了解?鎖和死鎖:兩個或者多個線程之間相互等待,導(dǎo)致線程都無法執(zhí)行。 生產(chǎn)者消費(fèi)者,當(dāng)生產(chǎn)者生產(chǎn)產(chǎn)品滿足數(shù)量時,進(jìn)行等待,被消費(fèi)完時,喚醒,繼續(xù)生產(chǎn)。 為什么wait(),notify(),notifyAll()等方法都定義在Object類中: 1).因?yàn)槊總€類都有可能被多線程訪問; 2).如果被線程訪問時,如果資源沒準(zhǔn)備好,每個類都有權(quán)利要求訪問的線程等待、及喚醒; 26、什么是線程池?對于一個Thread線程,不能多次的調(diào)用start(); * 如果想再次運(yùn)行,需要再次實(shí)例化此線程對象; * 如果這個線程對象實(shí)例化時,很耗時,那么我們多次使用,就很不方便; '線程池',它可以緩存一些'線程對象', 我們可以反復(fù)的調(diào)用緩沖的線程對象;
一個線程池包括以下四個基本組成部分:
27、網(wǎng)絡(luò)通信:TCP(傳輸層)上傳任何東西都是可靠的,只要兩臺機(jī)器上建立起了連接,在本機(jī)上發(fā)送的數(shù)據(jù)就一定能傳到對方的機(jī)器上,UDP就好比發(fā)電報,發(fā)出去就完事了,對方有沒有接收到它都不管,所以UDP是不可靠的。TCP傳送數(shù)據(jù)雖然可靠,但傳送得比較慢,UDP傳送數(shù)據(jù)不可靠,但是傳送得快。 Ip(網(wǎng)絡(luò)層):網(wǎng)間數(shù)據(jù)通信。 端口號是用來區(qū)分一臺機(jī)器上不同的應(yīng)用程序的。 客戶端通過端口6666向服務(wù)器端請求連接,服務(wù)器端接受客戶端的連接請求以后,就在服務(wù)器端上安裝一個Socket,然后讓這個Socket與客戶端的Socket連接,這樣服務(wù)器端就可以與客戶端互相通信了,當(dāng)有另外一個客戶端申請連接時,服務(wù)器端接受了以后,又會安裝另外一個Socket與這個客戶端的Socket進(jìn)行連接。
28、error和exception有什么區(qū)別?error 表示恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問題。比如說內(nèi)存溢出。不可能指望程序能處理這樣的情況。 exception 表示一種設(shè)計或?qū)崿F(xiàn)問題。也就是說,它表示如果程序運(yùn)行正常,從不會發(fā)生的情況。
29、Java中的異常處理機(jī)制的簡單原理和應(yīng)用。異常是指java程序運(yùn)行時(非編譯)所發(fā)生的非正常情況或錯誤,與現(xiàn)實(shí)生活中的事件很相似,現(xiàn)實(shí)生活中的事件可以包含事件發(fā)生的時間、地點(diǎn)、人物、情節(jié)等信息,可以用一個對象來表示,Java使用面向?qū)ο蟮姆绞絹硖幚懋惓?,它把程序中發(fā)生的每個異常也都分別封裝到一個對象來表示的,該對象中包含有異常的信息。 Java對異常進(jìn)行了分類,不同類型的異常分別用不同的Java類表示,所有異常的根類為java.lang.Throwable,Throwable下面又派生了兩個子類:Error和Exception,Error 表示應(yīng)用程序本身無法克服和恢復(fù)的一種嚴(yán)重問題,程序只有死的份了,例如,說內(nèi)存溢出和線程死鎖等系統(tǒng)問題。Exception表示程序還能夠克服和恢復(fù)的問題,其中又分為系統(tǒng)異常和普通異常,系統(tǒng)異常是軟件本身缺陷所導(dǎo)致的問題,也就是軟件開發(fā)人員考慮不周所導(dǎo)致的問題,軟件使用者無法克服和恢復(fù)這種問題,但在這種問題下還可以讓軟件系統(tǒng)繼續(xù)運(yùn)行或者讓軟件死掉,例如,數(shù)組腳本越界(ArrayIndexOutOfBoundsException),空指針異常(NullPointerException)、類轉(zhuǎn)換異常(ClassCastException);普通異常是運(yùn)行環(huán)境的變化或異常所導(dǎo)致的問題,是用戶能夠克服的問題,例如,網(wǎng)絡(luò)斷線,硬盤空間不夠,發(fā)生這樣的異常后,程序不應(yīng)該死掉。 java為系統(tǒng)異常和普通異常提供了不同的解決方案,編譯器強(qiáng)制普通異常必須try..catch處理或用throws聲明繼續(xù)拋給上層調(diào)用方法處理,所以普通異常也稱為checked異常,而系統(tǒng)異??梢蕴幚硪部梢圆惶幚?,所以,編譯器不強(qiáng)制用try..catch處理或用throws聲明,所以系統(tǒng)異常也稱為unchecked異常。 |
|