![Java基礎(chǔ)知識復(fù)習(xí)資料_第1頁](http://file4.renrendoc.com/view/c4b3bf7b914c08744e98881486929ca0/c4b3bf7b914c08744e98881486929ca01.gif)
![Java基礎(chǔ)知識復(fù)習(xí)資料_第2頁](http://file4.renrendoc.com/view/c4b3bf7b914c08744e98881486929ca0/c4b3bf7b914c08744e98881486929ca02.gif)
![Java基礎(chǔ)知識復(fù)習(xí)資料_第3頁](http://file4.renrendoc.com/view/c4b3bf7b914c08744e98881486929ca0/c4b3bf7b914c08744e98881486929ca03.gif)
![Java基礎(chǔ)知識復(fù)習(xí)資料_第4頁](http://file4.renrendoc.com/view/c4b3bf7b914c08744e98881486929ca0/c4b3bf7b914c08744e98881486929ca04.gif)
![Java基礎(chǔ)知識復(fù)習(xí)資料_第5頁](http://file4.renrendoc.com/view/c4b3bf7b914c08744e98881486929ca0/c4b3bf7b914c08744e98881486929ca05.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Java基礎(chǔ)知識復(fù)習(xí)資料
l.java語言是強(qiáng)類型還是弱類型語言?為什么?
Java是強(qiáng)類語言,在使用變量時(shí)有如下規(guī)則:
0變量必須聲明,并且初始化以后才能使用.
E變量必須有明確的類型(type)。
0變量不能重復(fù)定義。
javascript是一種弱類型語言,即變量在聲明時(shí),不能明確聲明其類型
變量的類型是在運(yùn)行時(shí)確定的,并且可以隨時(shí)改變
2JAVA的數(shù)據(jù)類型有哪些?
「(1)基本數(shù)據(jù)類型(八種):
一整型:byte1字節(jié),short2字節(jié),int4字節(jié),long8字節(jié)
浮點(diǎn)型:float4字節(jié),double8字節(jié)
[float類型共32位(不int相同),其中1位為符號位,指數(shù)8位,尾數(shù)23位。
一1(double類型能表示64位,其中1位符號位,11位指數(shù),52位尾數(shù)】
【浮點(diǎn)數(shù)的字面量默認(rèn)是double]
字符型:char2字節(jié)【unicode編碼值】
-boolean型:boolean1字節(jié)【值只有true和false】
隱式類型轉(zhuǎn)換:
正方向:char今
byte今short—int->long->float->double
一負(fù)方向:
⑵引用類型(自定義類型):對象:比如String
數(shù)組:int口
接口:interface
3JAVA中成員變量和局部變量的區(qū)別?
⑴成員變量:是在類范圍內(nèi)定義的(也叫成員屬性)
「類屬性:使用static修飾的就是類屬性。
作用域:類屬性的作用域與這個(gè)類的生存范圍相同,它作為類的一個(gè)成員,
與類共存亡。只要類存在,程序就可以訪問該類的類屬性。
-實(shí)例屬性:不被static修飾的就是實(shí)例屬性。
作用域:實(shí)例屬性則從這個(gè)類的實(shí)例(對象)被創(chuàng)建開始存在,直到系統(tǒng)完
全銷毀這個(gè)實(shí)例,它作為實(shí)例(對象)的一個(gè)成員,與實(shí)例(對象)
共存亡。只要實(shí)例存在,程序就可以訪問該實(shí)例的實(shí)例屬性。
⑵局部變量:在一個(gè)方法內(nèi)定義的變量。(包括方法的形式參數(shù))
—1.形參:作用域是整個(gè)方法體
-2.方法局部變量:一個(gè)代碼塊中
-3.代碼塊局部變量:一個(gè)代碼塊中
注意:局部變量除了形式參數(shù)外,都必須顯示初使化(必須顯示指定初使值)。否則
不可以訪問它們。
形式參數(shù)不須顯示初使化,它在被調(diào)用時(shí)由系統(tǒng)完成。
4.前++和后++的區(qū)別?
「i++,后++,先將i的值作為整個(gè)表達(dá)的值,然后將i增加1。
第1頁共43頁
0++i,先++,先將i增加1,然后將i的值作為整個(gè)表達(dá)的值。
5.短路運(yùn)算符和非短路運(yùn)算符的區(qū)別?
_一短路運(yùn)算符[條件1&&條件2),如果條件1不成立,則條件2不執(zhí)行;
一一非短路運(yùn)算符[條件1&條件2],兩個(gè)條件都會執(zhí)行。
6.怎樣取得數(shù)組的長度?
數(shù)組:arr.length集合:list.size()字符串:str.length。
7.實(shí)現(xiàn)數(shù)組拷貝(復(fù)制)的2種方法?
—System.arraycopy(src,srcPos,dest,destPos,length);
—src-疵數(shù)組。
srcPos-源數(shù)組中的起始位置。
_—dest-目標(biāo)數(shù)組。
destPos-目標(biāo)數(shù)據(jù)中的起始位置。
-length-要復(fù)制的數(shù)組元素的數(shù)量。
—Arrays.copyOf(src,length):是JDK1.6版本提供的方法,比起System.arraycopy()
使用更簡便.
(注:當(dāng)然,可以用新建數(shù)組用for循環(huán)的方式進(jìn)行復(fù)制)
8.java中的4種訪問制權(quán)限有哪些?分別作用范圍是什么?
類內(nèi)包內(nèi)子類任意
public7777
protectedQ2Q
[default]
private7
-(1).public:最大訪問控制權(quán)限,對所有的類都可見。
(2).protect:修飾的,在類內(nèi)部、同一個(gè)包、子類中能訪問
第2頁共43頁
(3).default:包訪問權(quán)限,即同一個(gè)包中的類可以可見。默認(rèn)不顯式指定訪問控制權(quán)限
時(shí)就是default包訪問控制權(quán)限。
(4).private:最嚴(yán)格的訪問控制權(quán)限,僅該類本身可見。
(注:訪問控制修飾符可以修飾類,成員變量,方法,但是修飾類只用public和default)
9JAVA5的新特性有哪些?
(1)循環(huán)(For-each循環(huán))
for(typevariable:array){body}
for(typevariable:arrayList){body)
而1.4必須是:
for(inti=0;i<array,length;i++){typevariable=
array[i];body}
for(inti=0;i<arrayList.size();i++){typevariable=(type)
arrayList.get(i);body)
(2)泛型
以ArrayList為例,包括創(chuàng)建一個(gè)容器對象和取得容器內(nèi)對象操作:
1.5ArrayList<Type>arrayList=newArrayList<Type>0;arrayList.get(i)
1.4ArrayListarrayList=newArrayList();(Type)arrayList.get(i)
(3)自動裝箱拆箱
在JDK5.0以前,在原始類型與相應(yīng)的包裝類之間的轉(zhuǎn)化是不能自動完成的。要完
成這種轉(zhuǎn)化,需要手動調(diào)用包裝類的構(gòu)造函數(shù),在JDK5.0環(huán)境中,可以自動轉(zhuǎn)化:
1.5Integerwrapper=n;intn=wrapper;
1.4Integerwrapper=newInteger(n);intn二ValueO;
自動裝包/拆包大大方便了基本類型數(shù)據(jù)和它們包裝類地使用。
自動裝包:基本類型自動轉(zhuǎn)為包裝類.(int?Integer);
自動拆包:包裝類自動轉(zhuǎn)為基本類型.(Integer?int);
⑷靜態(tài)導(dǎo)入
靜態(tài)導(dǎo)入功能對于JDK5.0以前的版本是不支持的。
importstaticjava.lang.Math;
importstaticjava.lang.System;
1.5out.printin(sqrt(PI));
1.4System.out.printin(Math,sqrt(Math.PI));
(5)可變參數(shù)(Varargs)
可變參數(shù)使程序員可以聲明一個(gè)接受可變數(shù)目參數(shù)的方法。注意,可變參數(shù)必
須是函數(shù)聲明中的最后一個(gè)參數(shù)。在JDK1.5之前,可以用重載來實(shí)現(xiàn),但是
這樣就需要寫很多的重載函數(shù)。
linelpublicvoidwrite(Object...objs){
line2for(Objectobj:objs)
line3System.out.println(obj);
line4}
第3頁共43頁
10.面向?qū)ο缶幊讨袔追N對象組合方式-is-aZhas-a/use-a:
「(1).is-a組合:一個(gè)類繼承具有相似功能的另一個(gè)類,根據(jù)需要在所繼承的類基礎(chǔ)上進(jìn)
行擴(kuò)展。
優(yōu)點(diǎn):具有共同屬性和方法的類可以將共享信息抽象到父類中,增強(qiáng)代碼復(fù)用性,
同時(shí)也是多態(tài)的基礎(chǔ)。
缺點(diǎn):子類中擴(kuò)展的部分對父類不可見,另外如果共性比較少的時(shí)候使用繼承會
增加冗余代碼。
(2).has-a組合:has-a組合是在一個(gè)類中引用另一個(gè)類作為其成員變量。
優(yōu)點(diǎn):可擴(kuò)展性和靈活性高。在對象組合關(guān)系中應(yīng)優(yōu)先考慮has-a組合關(guān)系。
缺點(diǎn):具有共性的類之間看不到派生關(guān)系。
一(3%use-a組合:是一個(gè)類中使用到了另外一個(gè)類,依賴關(guān)系
11.構(gòu)造方法(構(gòu)造器)特點(diǎn)?
0Java中的構(gòu)造器(構(gòu)造方法)聲明在類內(nèi)部。
0方法名與類名一致的方法叫構(gòu)造方法
0構(gòu)造方法不能聲明返回值類型。
0構(gòu)造方法可以包含參數(shù),參數(shù)一般是創(chuàng)建對象實(shí)例必須依賴的條件(前提條件)。
子類默認(rèn)調(diào)用父類的無參構(gòu)造器,如果父類沒有無參構(gòu)造器,那么子類必需顯示的去
調(diào)用父類的有參構(gòu)造器
如果一個(gè)類沒有提供無參構(gòu)造器,那么編譯器將會自動提供一個(gè)無參構(gòu)造器。
12JAVA中屬性和方法的靜態(tài)綁定和動態(tài)綁定?
靜態(tài)綁定:Java根據(jù)引用變量類型查找屬性
動態(tài)綁定:java根據(jù)實(shí)際的對象查找方法
13.JavaBean規(guī)范?
1)必須有包(package)
2)Java類,具有無參數(shù)構(gòu)造器
3)有用getXxx()和setXxx()聲明的Bean屬性
0如:getNamef)和setName(Stringn)聲明的Bean屬性為:name,不是否有實(shí)例變
量name無關(guān)
0boolean類型的get方法可以有兩種形式:getMarried()戒者isMarried。
4)必須實(shí)現(xiàn)序列化接口(注:在學(xué)習(xí)10的時(shí)候具體學(xué)習(xí))
14.static關(guān)鍵字的特點(diǎn)?
static靜態(tài)關(guān)鍵字修飾:屬性、方法、內(nèi)部類、代碼塊
static修飾的資源屬于類級別,是全體對象實(shí)例共享的資源
static變量在類加載期間初始化
靜態(tài)代碼塊是在類加載期間運(yùn)行的代碼塊,由于類只加載一次,所以靜態(tài)代碼塊只執(zhí)
第4頁共43頁
行一次!
15.final關(guān)鍵字的特點(diǎn)?
final可以修飾類,方法,變量
final修飾的類,不能再被繼承
final修飾的方法,不能覆蓋final方法
final修飾的變量
final的局部變量,只能初始化不能改
final的方法參數(shù),不能改
final的引用,引用指向不能改,但是對象的屬性可以改
16.常見的final類有哪些?
Java的String就是final類,不能被繼承!
Math是final類,不能被繼承!
Integer>Long,Character等包裝類是final類,不能被繼承!
17.抽象類和接口的區(qū)別?
抽象類-不具體的類
1抽象方法,只有行為的概念,沒有具體的行為實(shí)現(xiàn)。
使用:abstract關(guān)鍵字修飾,并且沒有方法體。
2包含抽象方法的類,就一定是抽象類。
使用:abstract關(guān)鍵字修飾,包含抽象方法。
如:平面圖形一定可以計(jì)算面積。
publicabstractclassCRMSystem{
publicabstractClientaddClient(
Stringname,Stringqq);
}
3抽象方法和抽象類非常適合作為系統(tǒng)的分析和設(shè)計(jì)的工具。
4抽象類不能直接創(chuàng)建實(shí)例??梢远x引用變量。
5抽象類只能被繼承,一個(gè)具體類繼承一個(gè)抽象類,必須實(shí)
現(xiàn)所有抽象方法。
接口
1.接口:全部的方法都是抽象方法,全部的屬性都是常量。
接口用來表示純抽象概念,沒有任何具體的方法和屬性。
2.不能實(shí)例化,可以定義變量。
3.接口變量可以引用具體實(shí)現(xiàn)類的實(shí)例。
4.接口只能被實(shí)現(xiàn),一個(gè)具體類實(shí)現(xiàn)接口,必須使用全部的
抽象方法。
5.接口之間可以繼承。
6.一個(gè)具體類可以實(shí)現(xiàn)多個(gè)接口,實(shí)現(xiàn)多繼承現(xiàn)象,表示:
一個(gè)概念即是XXX也是XXX.
7.接口中的屬性,默認(rèn)是常量publicstaticfinal
8.接中的方法一定是:publicabstract
9.實(shí)現(xiàn)一個(gè)接口,使用關(guān)鍵字implements,實(shí)現(xiàn)實(shí)際上是
一種繼承關(guān)系。接口和實(shí)現(xiàn)類是父子類型的關(guān)系
第5頁共43頁
18.重載和重寫的區(qū)別?
重載:方法名相同,參數(shù)不同(參數(shù)類型或者長度)
重載和修飾符和返回類型無關(guān)。
一是方法的參數(shù)列表必須改變,包括參數(shù)的類型,參數(shù)的個(gè)數(shù)多少,參數(shù)順序。
二是重載對返回類型,訪問修飾符,異常聲明沒有任何限制,可以作任意的修改。
實(shí)質(zhì)上,重載只是創(chuàng)建了一個(gè)方法而已,特殊的地方在于方法的名字。
重寫:兩同兩小一大(規(guī)則)
兩同:方法名相同參數(shù)類型相同
兩?。悍祷刂殿愋?基本數(shù)據(jù)類型要一致,引用類型可以是其子類)
拋出的異常要小(也可以拋出父類型的異常的部分異常,或者不拋出異常)
一大:訪問控制修飾符大
(1)重寫方法必須和被重寫方法具有相同的參數(shù)列表,返回類型必須和被重寫方
法的返回類型相同或者是返回類型的子類型。
(2)重寫方法的訪問控制修飾符不能比被重寫方法更嚴(yán)格(比如一個(gè)在父類中
聲明為public的方法重寫成一個(gè)protected的方法)。
(3)只有實(shí)例方法才能被重寫,超類中的final方法不能被重寫。
(4)重寫方法不能拋出新的檢查異常,或者是拋出比被重寫方法聲明的檢查異
常更廣泛的檢查異常。
19.==和equal邪的區(qū)別?
“==",比較引用值和基本數(shù)據(jù)類型是否相等。
0xxx.equals。方法比較對象的內(nèi)容是否相等。默認(rèn)的比較規(guī)則是:比較引用
20.為什么要同時(shí)覆蓋hashcode()和equals。?
hashCode。方法要不equals方法一同覆蓋(Sun公司規(guī)定)
0當(dāng)兩個(gè)對象equals比較為true時(shí),應(yīng)具有相同的hashCode。值
0當(dāng)兩個(gè)對象equals比較為false時(shí),應(yīng)具有.不相同的hashCode()值
13hashCode()值要穩(wěn)定(一致性),一個(gè)對象創(chuàng)建以后就不應(yīng)該再變化
默認(rèn)的hashCode。值是當(dāng)前堆對象地址轉(zhuǎn)換的一個(gè)整數(shù),這個(gè)整數(shù)不是內(nèi)存地址!
在java的中,判斷兩個(gè)對象是否相等的規(guī)則是:
首先,判斷兩個(gè)對象的hashcode是否相等
如果不相等,認(rèn)為兩個(gè)對象也不相等
如果相等,則判斷兩個(gè)對象用equals運(yùn)算是否相等
如果不相等,認(rèn)為兩個(gè)對象也不相等
如果相等,認(rèn)為兩個(gè)對象相等
21.String類有哪些常用的方法?
charAt()
length()
trim()
toLowerCase()
toUpperCase()
indexOf()
lastlndexOf()
endsWith()
第6頁共43頁
startsWith()
substring(intstart,intend)
substring(intstart)
toCharArrayf)
22.String,StringBuilder,StringBuffer的區(qū)別?
String=char口+操作(復(fù)制創(chuàng)建新對象)char口不可變
StringBuilder=char[]+對char□操作(處理當(dāng)前數(shù)組內(nèi)容)char口可變
1)StringBuilder是變長字符序列
2)StringBuilder方法:append,insert...都返回當(dāng)前StringBuilder對象本身的引用
StringBuffer和StringBuilderAPI幾乎一樣!
StringBuffer是java早期提供的(JDK1.O),速度稍慢,線程安全
StringBuilder是Java5以后提供的(JDK5.0),速度快,非線程安全
23.談?wù)劶峡蚣艿睦斫猓?/p>
集合框架包括集合不映射(CollectionandMap)
List元素有先后次序的集合,元素有index位置,元素可以重復(fù),繼承自Collection
接口,實(shí)現(xiàn)類:ArrayList,Vector,LinkedList
List表示有先后次序的對象集合
ArrayList是使用變長數(shù)組算法實(shí)現(xiàn)的,ArrayList實(shí)現(xiàn)自List
1)ArrayList和Vector的比較
0Vector(1.0版本提供的),線程安全的,效率稍低,也是使用變長數(shù)組算
法實(shí)現(xiàn)的,繼承自List接口
0ArrayList,線程不安全的,效率高速度快(現(xiàn)在較常用)
2)ArrayList和LinkedList的比較
0LinkedList是采用雙向循環(huán)鏈表實(shí)現(xiàn)的List
0ArrayList是采用變長數(shù)組算法實(shí)現(xiàn)的的List
在ArrayList的中間插入或刪除一個(gè)元素意味著這個(gè)列表中剩余的元素都
會被移動;而在LinkedList的中間插入或刪除一個(gè)元素的開銷是固定的。
ArrayList查詢速度快,而LinkedList增刪速度快
Set元素?zé)o續(xù),不能重復(fù)添加,是數(shù)學(xué)意義上的集合,繼承自Collection接口
0實(shí)現(xiàn)類:HashSet(是一個(gè)只有Key的HashMap),使用Set時(shí)要重寫hashcode,equals方
法
HashMap以鍵-值對(關(guān)鍵字:值)的形式存儲對象,關(guān)鍵字key是唯一的、不重復(fù)
的
1)key可以是任何對象,Value可以任何對象
2)(key:value)成對放置在集合中
3)重復(fù)的key算一個(gè),重復(fù)添加是替換操作(會覆蓋原來的元素)
4)HashMap根據(jù)key檢索查找value值
HashMap新,非線程安全,不檢查鎖,快
Hashtable舊(JDK1.2版本以前),線程安全,檢查鎖,慢一點(diǎn)(差的很
小)
第7頁共43頁
CQU0GtiJOB框架
23.散列表的特點(diǎn)?
散列表中存放的對象是不連續(xù)的,所以稱為“散列表”
散列表的優(yōu)點(diǎn):查找迅速
在ArrayList中查找Mac,順序查找,需要查找5次
0在HashMap中(底層實(shí)現(xiàn)原理是散列表)查找Mac,經(jīng)過散列運(yùn)算,僅需1次
散列表原理
ArrayList|
05
___________按照name?找數(shù)值,如:name="Mac*'端要直詢1次|__________
24.java泛型的作用是什么?
泛型是Java5以后提出的語法現(xiàn)象,作用是在編譯期檢查的類型約束(運(yùn)行期不檢查
第8頁共43頁
泛型),泛型可以用來約束類中元素的類型
25.Collection和Collections的區(qū)另!!?
Collection是集合接口,下面有子接口,List,Set
集合的工具類為Collections,同數(shù)組的工具類Arrays相同,其中提供了許多的方法,
諸如排序、二分查找、打亂、填充等操作。
26.內(nèi)部類的分類?各有什么特點(diǎn)?
1)根據(jù)位置的不同,Java中的內(nèi)部類分為四種:
0靜態(tài)內(nèi)部類
0使用static修飾,聲明在類體中
0靜態(tài)內(nèi)部類中可以訪問外部類的靜態(tài)成員
0成員內(nèi)部類
回聲明在類體中,不使用static,具有類的成員特征,也就是,必須有類的實(shí)例才能
創(chuàng)建內(nèi)部類實(shí)例
0內(nèi)部類實(shí)例可以訪問共享外部類的成員變量(很常用)
0如:鏈表的節(jié)點(diǎn)就可以定義為內(nèi)部類
0局部內(nèi)部類把類聲明在方法中,就是局部內(nèi)部類,作用域
0類似局部變量(很少見)
0匿名內(nèi)部類
匿名類,非常常見,可以寫在任何地方,就像一般的語句
語法更象是創(chuàng)建對象:Dated=newDate(){//...};
匿名類是對原類的一個(gè)繼承,同時(shí)創(chuàng)建了實(shí)例,{}就是繼承以后的類體
類體中可使用所有類的語法
匿名類不能寫構(gòu)造器
匿名類可以從抽象類或者接口繼承,必須提供抽象方法的實(shí)現(xiàn)
2)任何內(nèi)部類都編譯成獨(dú)立的class文件
3)最大的作用:封裝!
27.怎么將Date和String互相轉(zhuǎn)換?
第9頁共43頁
larena
絡(luò)內(nèi)科核日期的揄入與揄出
DateFormatfmt=
newSimpleDateFormatC'HH:mm:ss");
fmt.format(date)
cal.getTimeO
28.Java中的異常理解?
異常是程序運(yùn)行過程過程出現(xiàn)的錯(cuò)誤,在Java中用類來描述,用對象來表示具體的異常。
Java將其區(qū)分為Error與Exception,Error是程序無力處理的錯(cuò)誤,Exception是程序可以處
理的錯(cuò)誤。
l)Error與Exception
Error是程序無法處理的錯(cuò)誤,比如OutOfMemoryError、ThreadDeath等。這些異常發(fā)
生時(shí),Java虛擬機(jī)(JVM)一般會選擇線程終止。Error:一般指虛擬機(jī)相關(guān)問題,如虛擬機(jī)
崩潰,虛擬機(jī)出錯(cuò)等這種錯(cuò)誤無法恢復(fù)或不可捕獲,將導(dǎo)致應(yīng)用程序中斷。對于Error一
般不編寫針對性代碼對齊進(jìn)行處理。
Exception是程序本身可以處理的異常,這種異常分兩大類運(yùn)行時(shí)異常和非運(yùn)行時(shí)異常。
程序中應(yīng)當(dāng)盡可能去處理這些異常。
第10頁共43頁
2)運(yùn)行時(shí)異常和非運(yùn)行時(shí)異常
檢查異常:當(dāng)代碼中拋出了一個(gè)檢查異常,那么編譯器在編譯代碼時(shí)會檢查代碼是否有
處理該異常的代碼片段,沒有則編譯不通過。
非檢查異常:編譯器不檢查該類異常拋出是否有代碼處理。
(ClassNotFoundException不是RuntimeException的子類)
運(yùn)行時(shí)異常都是RuntimeException類及其子類異常,如
NullPointerException,IndexOutOfBoundsException,ArraylndexOutOfBoundsException,
ClassCastException
等,這些異常是不檢查異常,程序中可以選擇捕獲處理,也可以不處理。這些異常一
般是由程序邏輯錯(cuò)誤引起的,程序應(yīng)該從邏輯角度盡可能避免這類異常的發(fā)生。
非運(yùn)行時(shí)異常是RuntimeException以外的異常,類型上都屬于Exception類及其子
類。從程序語法角度講是必須進(jìn)行處理的異常,如果不處理,程序就不能編譯通過。如
IOException^SQLException等以及用戶自定義的Exception異常,一般情況下不自定義檢查
異常。
自定義異常(自己定義異常表達(dá)錯(cuò)誤)
MyExceptionextendsException檢測(check)異常
MyExceptionextendsRuntimException運(yùn)行時(shí)(runtimeb異常
29.JAVA中異常處理的方式有哪些?
l)try...catch...finally
try(
〃(嘗試運(yùn)行的)程序代碼
}catch(異常類型異常的變量名){
〃異常處理代碼
}finally{
//
)
注:子類異常的處理塊必須在父類異常處理塊的前面,否則會發(fā)生編譯錯(cuò)誤。
finally塊中一定會執(zhí)行嗎?
2)throws,throw
throw關(guān)鍵字是用于方法體內(nèi)部,用來拋出一個(gè)Throwable類型的異常。如果拋出了檢
查異常,則還應(yīng)該在方法頭部聲明方法可能拋出的異常類型。
throws關(guān)鍵字用于方法體外部的方法聲明部分,用來聲明方法可能會拋出某些異常。
僅當(dāng)拋出了檢查異常,該方法的調(diào)用者才必須處理或者重新拋出該異常。
30.實(shí)現(xiàn)序列化的作用?(implementsSerializable)
序列化的作用是,將數(shù)據(jù)分解成字節(jié)流,以便存儲在文件中或在網(wǎng)絡(luò)上傳輸。
31.10流的分類?以及常用流的寫法?
分為:字節(jié)流和字符流或者輸入流和輸出流
Inputstreamis=newFilelnputStream("gbk.txt");
Readerin=newInputStreamReader(is);
BufferedReaderreader=newBufferedReader(in);
第11頁共43頁
Printwriterout=newPrintWtirer(
newOutputStreamWriter(
newFileOutputStream(filename)));
32.創(chuàng)建線程的兩種方式?
繼承Thread類(extendsThread)或者實(shí)現(xiàn)Runnable接口(implementsRunnable)
1)繼承Thread類
a實(shí)現(xiàn)步驟:
0繼承Thread類,覆蓋run()方法,提供并發(fā)運(yùn)程的過程
0創(chuàng)建這個(gè)類的實(shí)例
0使用start()方法啟動線程
2)實(shí)現(xiàn)Runnable接口
0實(shí)現(xiàn)步驟:
0實(shí)現(xiàn)Runnable接口,實(shí)現(xiàn)run()方法,提供并發(fā)運(yùn)程的過程
0創(chuàng)建這個(gè)類的實(shí)例,用這個(gè)實(shí)例作為Thread構(gòu)造器參數(shù),創(chuàng)建Thread類
0使用start()方法啟動線程
33.線程的5中狀態(tài)
1)New新建狀態(tài)
0當(dāng)程序使用new關(guān)鍵字創(chuàng)建了一個(gè)線程后,該線程就處于新建狀態(tài),此時(shí)線程還未啟
動,
當(dāng)線程對象調(diào)用start。方法時(shí),線程啟動,進(jìn)入Runnable狀態(tài)
2)Runnable可運(yùn)行(就緒)狀態(tài)
回當(dāng)線程處于Runnable狀態(tài)時(shí),表示線程準(zhǔn)備就緒,等待獲取CPU
3)Running運(yùn)行(正在運(yùn)行)狀態(tài)
0假如該線程獲取了CPU,則進(jìn)入Running狀態(tài),開始執(zhí)行線程體,即run()方法中的內(nèi)
容
0注意:
如果系統(tǒng)另有1個(gè)CPU,那么在伏意時(shí)間點(diǎn)則另有1條線程處于Running狀態(tài):
如果是雙核系統(tǒng),那么同一時(shí)間點(diǎn)會有2條線程處于Running狀態(tài)
但是,當(dāng)線程數(shù)大于處理器數(shù)時(shí),依然會是多條線程在同一個(gè)CPU上輪換執(zhí)行
當(dāng)一條線程開始運(yùn)行時(shí),如果它不是一瞬間完成,那么它不可能一直處于Running狀態(tài),
線程在執(zhí)行過程中會被中斷,目的是讓其它線程獲得執(zhí)行的機(jī)會,像這樣線程調(diào)度的策
略取決于底層平臺。對于搶占式策略的平臺而言,系統(tǒng)系統(tǒng)會給每個(gè)可執(zhí)行的線程一小
段時(shí)間來處理伍務(wù),當(dāng)該時(shí)間段(時(shí)間片)用完,系統(tǒng)會剝奪該線程所占資源(CPU),
讓其他線程獲得運(yùn)行機(jī)會。
0調(diào)用yield。方法,可以使線程由Running狀態(tài)進(jìn)入Runnable狀態(tài)
4)Block阻塞(掛起)狀態(tài)
0當(dāng)如下情班下,線程會進(jìn)入阻塞狀態(tài):
0線程調(diào)用了sleep。方法主動放棄所占CPU資源
0線程調(diào)用了一個(gè)阻塞式I。方法(比如控制臺輸入方法),在該方法返回前,該線
程被阻塞
0……
第12頁共43頁
0當(dāng)正在執(zhí)行的線程被阻塞時(shí),其它線程就獲得執(zhí)行機(jī)會了。需要注意的是,當(dāng)阻塞結(jié)束
時(shí),該線程將進(jìn)入Runnable狀態(tài),而非直接進(jìn)入Running狀態(tài)
5)Dead死亡狀態(tài)
回當(dāng)線程的run()方法執(zhí)行結(jié)束,線程進(jìn)入Dead狀態(tài)
0需要注意的是,不要試圖對一個(gè)已經(jīng)死亡的線程調(diào)用start。方法,線程死亡后將不能再
次作為線程執(zhí)行,系統(tǒng)會拋出HlegalThreadStateException異常
1)new運(yùn)算創(chuàng)建線程后,線程進(jìn)入New狀態(tài)(初始狀態(tài))
2)調(diào)用start。方法后,線程從New狀態(tài)進(jìn)入Runnable狀態(tài)(就緒狀態(tài))
0start。方法是在main。方法(Running狀態(tài))中調(diào)用的
3)線程結(jié)束后,進(jìn)入Dead狀態(tài)(死亡狀態(tài)),被對象垃圾回收
4)main()方法結(jié)束后,其它線程,比如上例中pl和p2開始搶著進(jìn)入Running狀態(tài)
0由誰搶到是底層操作系統(tǒng)決定(操作系統(tǒng)分配時(shí)間片)
0單核處理器:在一個(gè)時(shí)間點(diǎn)上另有一個(gè)線程在Running狀態(tài);雙核處理器:2個(gè)
0如果pl進(jìn)入Running狀態(tài),當(dāng)操作系統(tǒng)分配給它的時(shí)間片到期時(shí),pl進(jìn)入Runnable
狀態(tài),p2進(jìn)入Running狀態(tài)
0在期間有可能其它的進(jìn)程的線程獲得時(shí)間片,那么pl和p2同時(shí)進(jìn)入Runnable狀態(tài),
等待操作系統(tǒng)分配時(shí)間片
5)線程進(jìn)入Dead狀態(tài)后,另能被垃圾回收,不能再開始
6)如果線程在運(yùn)行過程中,自己調(diào)用了yield。方法,則主動由Running狀態(tài)進(jìn)入
Runnable狀態(tài)
34.異步與同步的區(qū)別?
第13頁共43頁
1)異步
并發(fā),各干自己的。如:一群人上卡車
2)同步
步調(diào)一致的處理。如:一群人上公交車
35.數(shù)據(jù)庫中,char和varchar類型的區(qū)別?
char(n)表示定長字符串(方便查詢)最長放入n個(gè)字符,放入的數(shù)據(jù)如果不
夠n個(gè)字符則補(bǔ)空格,無論如何都占n個(gè)字符長度。
varchar(n)表示變長字符串(節(jié)省空間)最長放入n個(gè)字符,放入的數(shù)據(jù)是幾
個(gè)長度就占多大空間。
selectdecode(a2,'A','AAAA','BBBB')FROMtable;
selectdecode(al,'A','AAAA','BBBB')FROMTT;—此處是兩個(gè)空格
36.在數(shù)據(jù)庫中怎么做表的復(fù)制?(一條語句完成)?
createtableemp_xxxasselect*fromemp_yyy;
(注:如何將一個(gè)表中的數(shù)據(jù)復(fù)制到另外一個(gè)表中?
insertintotable(select*fromtable2);兩個(gè)表結(jié)構(gòu)一樣
insertintotable(name,age)(selectname,agefromtable2);復(fù)制指定的字段
)
37.分別簡述一下DDL,DML,DQL,TCL,DCL?
1)數(shù)據(jù)定義語言DDL(DataDefinitionLanguage),是SQL語言集中負(fù)責(zé)數(shù)據(jù)結(jié)構(gòu)定義不
數(shù)據(jù)庫對象定義的語言,主要有create、alter、drop和truncate四種常用語句。
DDL對數(shù)據(jù)結(jié)構(gòu)起作用。
國create數(shù)據(jù)庫對象的創(chuàng)建
回alter修改數(shù)據(jù)庫對象
團(tuán)drop刪除數(shù)據(jù)庫對象
團(tuán)truncate清空表數(shù)據(jù)
2)數(shù)據(jù)操縱語言DML(DataManipulationLanguage),用戶通過它可以實(shí)現(xiàn)對數(shù)據(jù)表
的基本操作,即對表中數(shù)據(jù)的增、刪、改。
DML對數(shù)據(jù)起作用。
0insert插入操作
0update更新操作
0delete刪除操作
3)數(shù)據(jù)查詢語言DQL(DataQueryLanguage),用戶主要通過它實(shí)現(xiàn)對數(shù)據(jù)的查詢操作。
0select查詢操作
4)TCL事務(wù)控制語句是用來對DML操作進(jìn)行確認(rèn)的。
commit提交數(shù)據(jù)
rollback數(shù)據(jù)回滾
savepoint保存點(diǎn)
5)數(shù)據(jù)控制語言(DataControlLanguage,DCL)用于對用戶授權(quán)或撤銷其權(quán)限,也可
使用角色實(shí)現(xiàn)對用戶的批量授權(quán)或撤銷權(quán)限,在應(yīng)用開發(fā)層面較少用到。
第14頁共43頁
grant(授予權(quán)限)/revoke(回收權(quán)限)
38.0racle常用的單行函數(shù)有哪些?
round(數(shù)字,小數(shù)點(diǎn)后的位數(shù))用于數(shù)字的四舍五入
trunc(數(shù)字,小數(shù)點(diǎn)后的位數(shù))用于截取,如果沒有第二個(gè)參數(shù),默認(rèn)是0
to_date()和to_char()是時(shí)間處理的函數(shù)
0to_date將字符串?dāng)?shù)據(jù)按指定格式轉(zhuǎn)換為日期數(shù)據(jù)
0to_char將日期數(shù)據(jù)按指定格式轉(zhuǎn)換為字符串?dāng)?shù)據(jù)
coalesce(參數(shù)列表)函數(shù)的作用:返回參數(shù)列表中第一個(gè)非空參數(shù),參數(shù)列表中最
后一個(gè)值通常為常量
decode。函數(shù)是Oracle中等價(jià)于casewhen語句的函數(shù),作用同case語句相同。
decode函數(shù)語法如下:
decode(判斷條件,匹配1,值1,匹配2,值2,…,默認(rèn)值)
nvl(bonus,0)空值轉(zhuǎn)換函數(shù)
39.常用的組函數(shù)有哪些?
AVG求平均數(shù)
COUNT求數(shù)量
MAX求最大值
MIN求最小值
SUM求和
注意:
avg/sum操作數(shù)字
max/min可以操作各種數(shù)據(jù)類型
組函數(shù)默認(rèn)忽略空值
40.判斷語句是否正確?
selectename,count(*)fromempwhereename='KING'groupbyename;
selectcount(*),sum(sal)fromempgroupbyename;
在SELECT列表中所有未包含在組函數(shù)中的列都應(yīng)該包含在GROUPBY子句中。
包含在GROUPBY子句中的列不必包含在SELECT列表中。
41.研發(fā)部有哪些職位?
selectdistinctjobfromemp_xxx
wheredeptno=(selectdeptno
fromdept_xxx
wheredname='developer');
42.ALL,Any,ln的用法?
ALL-大于最大值
Any-大于最小值
子查詢的條件是單列還是多列沒關(guān)系,關(guān)鍵是要分清返回的是單行還是多行。
如果是單行,用單行比較運(yùn)算符,=,>,<這些
如果是多行,用in,>all,>any,<all,<any這些
43.哪個(gè)部門的平均薪水比部門20的平均薪水高?
selectdeptno,avg(nvl(salary,0))avg_s
fromemp_xxx
groupbydeptno
havingavg(nvl(salary,O))>(selectavg(nvl(salary,O))
第15頁共43頁
fromemp_xxx
wheredeptno=20);
44.什么叫關(guān)聯(lián)子查詢?
子查詢中不再是獨(dú)立的Sq|語句,需要依賴主查詢傳來的參數(shù),這種方式叫關(guān)聯(lián)子
查詢
哪些員工的薪水比本部門的平均薪水低?不再和整個(gè)部門的平均薪水比較。
selectename,salary,deptno
fromemp_xxxa
wheresalary<(selectavg(nvl(salary,O))
fromemp_xxx
wheredeptno=a.deptno);
--子查詢不再是獨(dú)立的Sql語句,需要依賴主查詢傳來的參數(shù)a.deptno
45.哪些人不是別人的經(jīng)理?
selectenamefromemp_xxxa
wherenotexists(select1fromemp_xxx
wheremgr=a.empno);
46.union和unionall的區(qū)別?
union去掉重復(fù)記錄,unionall不去重
0union排序,unionall不排序
(當(dāng)列的個(gè)數(shù)、列的順序、列的數(shù)據(jù)類型一致時(shí),我們稱這兩個(gè)結(jié)果集結(jié)構(gòu)相同
0只有結(jié)構(gòu)相同的結(jié)果集才能做集合操作)
47.0racle中表連接的方式有哪些?
內(nèi)連接(自然連接)
等值連接、自然連接和不等值連接
{內(nèi)連接是join關(guān)鍵字連接兩個(gè)表,語法為tableljointable2on條件。
根據(jù)使用的比較方式不同,內(nèi)連接又分為等值連接、自然連接和不等值連接。
等值連接:所謂等值連接,是指在連接條件中使用等于(=)運(yùn)算符比較被連接的值,
也就是通過相等的列值連接起來的查詢。
例子:Selectempno,ename,sal,emp.deptno,dnamefromemp,deptwhere
emp.deptno=dept.deptno;
非等值連接:所謂不等連接,就是在連接條件中使用除等號(=)外的其他比較運(yùn)算
符,構(gòu)成非等值連接查詢。可以使用的比較運(yùn)算符包括:〉(大于)、<(小于)、>=(大于
等于)、<=(小于等于)、<>(不等于)、!=(不等于)、LIKE、IN和BETWEEN等。
例子:selecte.ename,e.sal,s.gradefromempejoinsalgradesone.salbetweens.losal
ands.hisal;查詢所有員工的薪水等級
自然連接:自然連接是在兩張表中尋找那些數(shù)據(jù)類型和列名都相同的字段,然后自動
地將他們連接起來,并返回所有符合條件的結(jié)果。
例子:select*fromempnaturaljoindept;
)
外連接
外連接的結(jié)果集=內(nèi)連接的結(jié)果集+驅(qū)動表在匹配表中找不到匹配記錄的數(shù)
第16頁共43頁
據(jù)和空值
使用一張表中的所有記錄去和另一張表中的記錄按條件匹配(空值也會匹配),這
個(gè)表中的所有記錄都會顯示。
左外連接,右外連接,全外連接
LEFT/RIGHT/FULLOUTERJOIN
}
(1)左外連接(左邊的表不加限制)
{
【例】tlleftouterjoint2其中tl是驅(qū)動表,t2是
匹配表
等價(jià)于:t2rightouterjointl
【例】查詢每個(gè)員工的經(jīng)理的名字?
selectworker,ename,manager,enamefromempworkerleft
outerjoinempmanageronworker.mgr=manager.empno;
)
(2)右外連接(右邊的表不加限制)
{
tlrightouterjoint212是驅(qū)動表,tl是匹配表
等價(jià)于:t2leftouterjointl
【例】一哪些員工沒有下屬(不是別人的領(lǐng)導(dǎo))?外連接+匹
配表PKisnull表示否定問題,不是,不包括,等等。
selectmanager,enamefromempworker
rightouterjoinempmanageronworker,mgr=
manager,empno
(首先找到所有經(jīng)理下面的員工是哪些)
whereworker,empnoisnull;
(然后將員工為空的過濾出來)
}
(3)全外連接(左右兩表都不加限制)fullouterjoin
(
左表和右表都不做限制,所有的記錄都顯示,兩表不足的地方用
null填充。
【例】
selecte.ename,d.locfromempefullouterjoindeptdon
(e.deptno=d.deptno);
)
自連接(同一張表內(nèi)的連接)自連接是等值連接的一種。表中的列外鍵關(guān)聯(lián)自己表的
主鍵列。
(
自連接(selfjoin)是SQL語句中經(jīng)常要用的連接方式,使用自連接可以將自身表的
一個(gè)鏡像當(dāng)作另一個(gè)表來對待,從而能夠得到一些特殊的數(shù)據(jù)。
【例】查詢每個(gè)員工的經(jīng)理的名字?
第17頁共43頁
selectworker.ename,manager.enamefromempworkerjoinempmanageron
worker.mgr=manager.empno;
)
48.什么是事務(wù)(Transaction)?什么是事務(wù)控制?
事務(wù)(Transaction)是指組成單個(gè)邏輯工作單元的一系列操作
事務(wù)控制(TransactionControl)則是指通過將一組相關(guān)操作組合為一個(gè)要么全部成功、
要么全部失敗的邏輯工作單元(即事務(wù)),以簡化錯(cuò)誤恢復(fù)、提高應(yīng)用程序的可靠性。
49.約束條件(constraint)有哪些?
主鍵(Primarykey,簡稱PK)
1)主鍵約束(primarykey)=不能重復(fù)+不能為null
2)主鍵約束可以用兩種方式定義:列級約束和表級約束
非空約束(notnull,簡稱NN)
注意:非空約束只能定義在列級
唯一約束(Unique,簡稱UK)
可以定義在表級和列級
檢查約束(Check,簡稱CK)
可以定義在表級和列級
因?yàn)榧s束條件建立在列級時(shí)可讀性不好,而丐不方便定義約束條件名字,一般
建議定義在表級。
外鍵(Foreignkey,簡稱FK)
之前講的幾個(gè)約束條件都是用來約束單個(gè)表中的列,而外鍵約束定義在兩個(gè)表
的兩個(gè)字段上(或者一個(gè)表的兩個(gè)字段上),用亍保證相關(guān)兩個(gè)字段的關(guān)系
constraintfk_customerid_cardinfo2foreignkey(customerlD)referencesuserlnfo(customerlD)
注意:一張表中,只能有一個(gè)PK,但是可以有多個(gè)FK
50.視圖(View),索引(Index),序列(Sequence)?
視圖(View):
視圖的使用和表相同
視圖的好處:簡化查詢;屏蔽數(shù)據(jù)庫表結(jié)構(gòu)、限制對數(shù)據(jù)的訪問
視圖不包含任何數(shù)據(jù)。是基表數(shù)據(jù)的投影。
視圖本身并不在物理上保存數(shù)據(jù),在視圖上進(jìn)行的查詢或更新操作實(shí)際上都是針
對其基表來完成的。
當(dāng)基表變化時(shí),視圖也隨著變化。
索引(Index):
index:索引(Index)一種用于提升查詢效率的數(shù)據(jù)庫對象,使用索引可以快速
定位數(shù)據(jù)、減少磁盤I/O操作次數(shù)。,注意:對于數(shù)據(jù)變更頻繁(DML操作頻繁)的表,索引
會影響查詢性能。
如果數(shù)據(jù)表有PK/Unique兩種約束,索引自動創(chuàng)建,除此以外,索引必須手
動創(chuàng)建
自定義索引語法:createindex索引名on表名(列名);
第18頁共43頁
為什么索引查詢快?
(Oracleserver通過rowid快速定位要找的行
通過rowid定位數(shù)據(jù)能有效的降低讀取數(shù)據(jù)塊的數(shù)量
索引的使用和維護(hù)是自動的,一般情況下不需要用戶干預(yù))
序列(Sequence):
序列的特性:產(chǎn)生連續(xù)的不同的數(shù)字值用來作為數(shù)據(jù)表的主鍵。序列這種對象在
Oracle、db2等數(shù)據(jù)庫中有,在mysql、sqlserver中沒有。(在mysql通過
autojncrement自動增長列來實(shí)現(xiàn)同樣的功能)
51.TRUNCATE與前述DELETE操作的區(qū)別?
DELETE為DML操作,可以回滾,而TRUNCATE為DDL操作,一經(jīng)執(zhí)行不可撤銷,
故其效率要高一些;DELETE操作可以選擇刪除表中全部或部分?jǐn)?shù)據(jù),而TRUNCATE操作
只能刪除表中全部數(shù)據(jù)。
如果不再用到表中數(shù)據(jù)、但又需要保留表的結(jié)構(gòu),則可該使用TRUNCATETABLE操作;如
果連表的結(jié)構(gòu)也需要了,則可使用DROPTABLE操作將表徹底刪除。
52.第n條到第n條記錄的獲取方式?
Oracle獲取方式:
selectename,sal,rnfrom(selectename,sal,rownumrnfromemp)wherern>=5and
rn<=10;
selectename,sal,rnfrom(selectenamezsal,rownumrnfromemp)wherernbetween5
and10;
selectidznamejop,rnfrom(selectid,name,jop,rownumrnfromdeptlOwhere
rownum<10)wherern>5;
selectt2.*from(selecttl.*,rownumrnfromemptlwhererownum<=5)t2wherern>3;
MySql獲取方式:
SELECT*FROMtableLIMIT5,10;//檢索記錄行6-15
53JDBC編程步驟?
1)注冊Driver
Oracle:Class.forName("oracle.jdbc.driver.OracleDriver");
Mysql:Class.forName("com.mysql.jdbc.Driver");
2)建立連接
Mysql:Stringurl="jdbc:mysq上//localhost:3306/tarena";
Oracle:Stringurl=//jdbc:oracle:thin:@localhost:1521:tarena",;
Stringname=//rootw;
Stringpwd="root";
C
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024民間借貸合同范本(28篇)
- 2025年農(nóng)村子女撫養(yǎng)費(fèi)用分擔(dān)協(xié)議
- 2025年供電企業(yè)與用戶用電合作協(xié)議
- 2025年共同策劃健身房合作合同書
- 企業(yè)勞動合同協(xié)議2025年
- 2025年企業(yè)員工勞動合同補(bǔ)充協(xié)議范本
- 2025年鋁合金預(yù)拉伸厚板和蒙皮鋁合金板項(xiàng)目立項(xiàng)申請報(bào)告模范
- 2025年高性能陶瓷復(fù)合材料項(xiàng)目立項(xiàng)申請報(bào)告模板
- 2025年企業(yè)變更代理協(xié)議
- 2025年漲緊輪項(xiàng)目提案報(bào)告模板
- 中心醫(yī)院消防施工組織設(shè)計(jì)
- 港口自動化與智慧港口發(fā)展方向
- 人教版小學(xué)英語單詞表(完整版)
- 飛灰處置及資源化綜合利用項(xiàng)目可行性研究報(bào)告模板-備案拿地
- 2024年咨詢工程師考試大綱
- 免疫治療皮疹護(hù)理查房
- 2024年棉柔巾行業(yè)市場趨勢分析
- 黑龍江省哈爾濱市雙城區(qū)2024年八年級下冊物理期末經(jīng)典試題含解析
- 老年期譫妄課件
- 項(xiàng)目采購管理培訓(xùn)
- 河道保潔服務(wù)日常巡邏方案及措施
評論
0/150
提交評論