Java基礎(chǔ)知識復(fù)習(xí)資料_第1頁
Java基礎(chǔ)知識復(fù)習(xí)資料_第2頁
Java基礎(chǔ)知識復(fù)習(xí)資料_第3頁
Java基礎(chǔ)知識復(fù)習(xí)資料_第4頁
Java基礎(chǔ)知識復(fù)習(xí)資料_第5頁
已閱讀5頁,還剩38頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論