1.封裝:隱藏一切可隱藏的東西,只向外界提供最簡單的編程接口
2.多態(tài):編譯時多態(tài):方法重載 運行時多態(tài):1.方法重寫,2父類型引用子類型對象
3.抽象:抽象是將一類對象的共同特征總結(jié)出來構(gòu)造類的過程佣盒,包括數(shù)據(jù)抽象和行為抽象兩方面型檀。抽象只關(guān)注對
象有哪些屬性和行為,并不關(guān)注這些行為的細(xì)節(jié)是什么
4.equsqls和hashcode:hashcode不同,equals一定不同,hashcode相同,equals有可能不同
5.String是final類,不可以被繼承
6.重載發(fā)生在一個類中,同名的方法如果有不同的參數(shù)列表(參數(shù)類型不同晴叨、參數(shù)個數(shù)不同或者二者都不同)則視為
重載闯估;重寫發(fā)生在子類與父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的返回類型少梁,比父類被重寫方
法更大的權(quán)限修飾符等孵,不能比父類被重寫方法聲明更多的異常
7.char 類型可以存儲一個中文漢字稚照,因為 Java 中使用的編碼是 Unicode,一個 char 類型占 2 個字節(jié)(16 比特)俯萌,所以放一個中
文是沒問題的
8.抽象類和接口的區(qū)別
不同:1.構(gòu)造方法 2.抽象方法和具體方法.3.抽象類可以定義成員變量 4.抽象類未必有抽象方法 接口全是抽象方法 5.抽象類可以有靜態(tài)方法
6.一個類可以繼承一個類,但可以實現(xiàn)多個接口
相同:1.都不能被實例化 2.都可以作為對象引用類型 3.都必須實現(xiàn)抽象方法
9.靜態(tài)變量:是被 static 修飾符修飾的變量果录,也稱為類變量,它屬于類咐熙,不屬于類的任何一個對象
實例變量: 必須依存于某一實例弱恒,需要先創(chuàng)建對象然后通過對象才能訪問到它。靜態(tài)變量可以實現(xiàn)讓多個對
象共享內(nèi)存棋恼。
10.==和 equals 的區(qū)別
==:如果比較的對象是基本數(shù)據(jù)類型返弹,則比較的是數(shù)值是否相等;如果比較的是引用數(shù)據(jù)類型爪飘,則比較的是對象
的地址值是否相等
11.equals 方法不能用于基本數(shù)據(jù)類型的變量义起,如果沒有對 equals 方法進(jìn)行重寫,則比較的是引用類型的變
量所指向的對象的地址
12.Java 中異常分為哪些種類:按照異常需要處理的時機分為編譯時異常(也叫強制性異常)也叫 CheckedException 和運行時異常
(也叫非強制性異常)也叫 RuntimeException
13.error 和 exception 的區(qū)別:Error 類和 Exception 類的父類都是 Throwable 類
Error 類一般是指與虛擬機相關(guān)的問題悦施,如系統(tǒng)崩潰,虛擬機錯誤去团,內(nèi)存空間不足抡诞,方法調(diào)用棧溢出等
Exception 類表示程序可以處理的異常,可以捕獲且可能恢復(fù)
14.請寫出你最常見的 5 個 RuntimeException
1)java.lang.NullPointerException 空指針異常
2)java.lang.ClassNotFoundException 指定的類找不到
3)java.lang.NumberFormatException 字符串轉(zhuǎn)換為數(shù)字異常
4)java.lang.IndexOutOfBoundsException 數(shù)組角標(biāo)越界異常土陪,常見于操作數(shù)組對象時發(fā)生昼汗。
5)java.lang.IllegalArgumentException 方法傳遞參數(shù)錯誤。
6)java.lang.ClassCastException 數(shù)據(jù)類型轉(zhuǎn)換異常鬼雀。
15.throw和throws的區(qū)別:
throw:
1)throw 語句用在方法體內(nèi)顷窒,表示拋出異常,由方法體內(nèi)的語句處理源哩。
2)throw 是具體向外拋出異常的動作鞋吉,所以它拋出的是一個異常實例,執(zhí)行 throw 一定是拋出了某種異常励烦。
throws:
1)throws 語句是用在方法聲明后面谓着,表示如果拋出異常,由該方法的調(diào)用者來進(jìn)行異常的處理坛掠。
2)throws 主要是聲明這個方法會拋出某種類型的異常赊锚,讓它的使用者要知道需要捕獲的異常的類型治筒。
3)throws 表示出現(xiàn)異常的一種可能性,并不一定會發(fā)生這種異常舷蒲。
16.final和finally的區(qū)別
1)final:用于聲明屬性耸袜,方法和類,分別表示屬性不可變牲平,方法不可覆蓋堤框,被其修飾的類不可繼承。
2)finally:異常處理語句結(jié)構(gòu)的一部分欠拾,表示總是執(zhí)行胰锌。
- switch:從java7開始,可以是字符串,但是long還是不能
18.StringBuilder:StringBuilder 是 Java5 中引入的,它和 StringBuffer 的方法完全相同藐窄,區(qū)別在于它是在單線程環(huán)境下使用的资昧,
因為它的所有方法都沒有被 synchronized 修飾,因此它的效率理論上也比 StringBuffer 要高
19.java日期待更
20.java基本數(shù)據(jù)類型:
整型:byte 1字節(jié) short 2 int 4 long 8
浮點型:float 4字節(jié) double 8
字符型: char 2字節(jié)
21.String荆忍、StringBuffer格带、StringBuilder 的區(qū)別
(1)、可變不可變
String:字符串常量刹枉,在修改時不會改變自身叽唱;若修改,等于重新生成新的字符串對象微宝。
StringBuffer:在修改時會改變對象自身棺亭,每次操作都是對 StringBuffer 對象本身進(jìn)行修改,不是生成新的對
象蟋软;使用場景:對字符串經(jīng)常改變情況下镶摘,主要方法:append(),insert()等岳守。
(2)凄敢、線程是否安全
String:對象定義后不可變,線程安全湿痢。
StringBuffer:是線程安全的(對調(diào)用方法加入同步鎖)涝缝,執(zhí)行效率較慢,適用于多線程下操作字符串緩沖區(qū)
大量數(shù)據(jù)譬重。
StringBuilder:是線程不安全的拒逮,適用于單線程下操作字符串緩沖區(qū)大量數(shù)據(jù)。
(3)臀规、共同點
StringBuilder 與 StringBuffer 有公共父類 AbstractStringBuilder(抽象類)消恍。
StringBuilder、StringBuffer 的方法都會調(diào)用 AbstractStringBuilder 中的公共方法以现,如 super.append(...)狠怨。
只是 StringBuffer 會在方法上加 synchronized 關(guān)鍵字约啊,進(jìn)行同步。最后佣赖,如果程序不是多線程的恰矩,那么使用
StringBuilder 效率高于 StringBuffer。
22.如何將一個 java 對象序列化到文件里
在 java 中能夠被序列化的類必須先實現(xiàn) Serializable 接口憎蛤,該接口沒有任何抽象方法只是起到一個標(biāo)記作用
23.字節(jié)流和字符流的區(qū)別
字節(jié)流讀取的時候外傅,讀到一個字節(jié)就返回一個字節(jié); 字符流使用了字節(jié)流讀到一個或多個字節(jié)(中文對應(yīng)的字節(jié)
數(shù)是兩個俩檬,在 UTF-8 碼表中是 3 個字節(jié))時萎胰。先去查指定的編碼表,將查到的字符返回棚辽。 字節(jié)流可以處理所有類型數(shù)
據(jù)技竟,如:圖片,MP3屈藐,AVI 視頻文件榔组,而字符流只能處理字符數(shù)據(jù)。只要是處理純文本數(shù)據(jù)联逻,就要優(yōu)先考慮使用字符
流搓扯,除此之外都用字節(jié)流。字節(jié)流主要是操作 byte 類型數(shù)據(jù)包归,以 byte 數(shù)組為準(zhǔn)锨推,主要操作類就是 OutputStream、
InputStream
字符流處理的單元為 2 個字節(jié)的 Unicode 字符公壤,分別操作字符换可、字符數(shù)組或字符串,而字節(jié)流處理單元為 1 個字
節(jié)境钟,操作字節(jié)和字節(jié)數(shù)組锦担。所以字符流是由 Java 虛擬機將字節(jié)轉(zhuǎn)化為 2 個字節(jié)的 Unicode 字符為單位的字符而成的俭识,
所以它對多國語言支持性比較好慨削!如果是音頻文件、圖片套媚、歌曲缚态,就用字節(jié)流好點,如果是關(guān)系到中文(文本)的堤瘤,用
字符流好點玫芦。在程序中一個字符等于兩個字節(jié),java 提供了 Reader本辐、Writer 兩個專門操作字符流的類
24.如何實現(xiàn)對象克隆
1). 實現(xiàn) Cloneable 接口并重寫 Object 類中的 clone()方法桥帆;
2). 實現(xiàn) Serializable 接口医增,通過對象的序列化和反序列化實現(xiàn)克隆
25.什么是 java 序列化,如何實現(xiàn) java 序列化:
序列化就是一種用來處理對象流的機制老虫,所謂對象流也就是將對象的內(nèi)容進(jìn)行流化叶骨。可以對流化后的對象進(jìn)行讀
寫操作祈匙,也可將流化后的對象傳輸于網(wǎng)絡(luò)之間忽刽。序列化是為了解決在對對象流進(jìn)行讀寫操作時所引發(fā)的問題。
序 列 化 的 實 現(xiàn) : 將 需 要 被 序 列 化 的 類 實 現(xiàn) Serializable 接 口 夺欲, 該 接 口 沒 有 需 要 實 現(xiàn) 的 方 法 跪帝,
implements Serializable 只是為了標(biāo)注該對象是可被序列化的,然后使用一個輸出流(如:FileOutputStream)來構(gòu)造
一個 ObjectOutputStream(對象流)對象些阅,接著伞剑,使用 ObjectOutputStream 對象的 writeObject(Object obj)方法就
可以將參數(shù)為 obj 的對象寫出(即保存其狀態(tài)),要恢復(fù)的話則用輸入流扑眉。
26.ConcurrentHashMap待更
27.List的三個子類的特點:
ArrayList 底層結(jié)構(gòu)是數(shù)組,底層查詢快,增刪慢.
LinkedList 底層結(jié)構(gòu)是鏈表型的,增刪快,查詢慢昌跌。
voctor 底層結(jié)構(gòu)是數(shù)組 線程安全的,增刪慢,查詢慢。
28.List 和 Map骗随、Set 的區(qū)別
(1).結(jié)構(gòu)特點:List 和 Set 是存儲單列數(shù)據(jù)的集合轰豆,Map 是存儲鍵和值這樣的雙列數(shù)據(jù)的集合;List 中存儲的數(shù)據(jù)是有順序弓千,并
且允許重復(fù)衡便;Map 中存儲的數(shù)據(jù)是沒有順序的,其鍵是不能重復(fù)的洋访,它的值是可以有重復(fù)的镣陕,Set 中存儲的數(shù)據(jù)是無
序的,且不允許有重復(fù)姻政,但元素在集合中的位置由元素的 hashcode 決定呆抑,位置是固定的(Set 集合根據(jù) hashcode 來進(jìn)行數(shù)
據(jù)的存儲,所以位置是固定的汁展,但是位置不是用戶可以控制的鹊碍,所以對于用戶來說 set 中的元素還是無序的);
(2).實現(xiàn)類:
List 接口有三個實現(xiàn)類(LinkedList:基于鏈表實現(xiàn)食绿,鏈表內(nèi)存是散亂的侈咕,每一個元素存儲本身內(nèi)存地址的同時還
存儲下一個元素的地址。鏈表增刪快器紧,查找慢耀销;ArrayList:基于數(shù)組實現(xiàn),非線程安全的铲汪,效率高熊尉,便于索引罐柳,但不
便于插入刪除;Vector:基于數(shù)組實現(xiàn)狰住,線程安全的硝清,效率低)。
Map 接口有三個實現(xiàn)類(HashMap:基于 hash 表的 Map 接口實現(xiàn)转晰,非線程安全芦拿,高效,支持 null 值和 null
鍵查邢;HashTable:線程安全蔗崎,低效,不支持 null 值和 null 鍵扰藕;LinkedHashMap:是 HashMap 的一個子類缓苛,保存了
記錄的插入順序;SortMap 接口:TreeMap邓深,能夠把它保存的記錄根據(jù)鍵排序未桥,默認(rèn)是鍵值的升序排序)。
Set 接口有兩個實現(xiàn)類(HashSet:底層是由 HashMap 實現(xiàn)芥备,不允許集合中有重復(fù)的值冬耿,使用該方式時需要重
寫 equals()和 hashCode()方法;LinkedHashSet:繼承與 HashSet萌壳,同時又基于 LinkedHashMap 來進(jìn)行實現(xiàn)亦镶,底
層使用的是 LinkedHashMp)
(3).區(qū)別:List 集合中對象按照索引位置排序,可以有重復(fù)對象袱瓮,允許按照對象在集合中的索引位置檢索對象缤骨,例如通過
list.get(i)方法來獲取集合中的元素;Map 中的每一個元素包含一個鍵和一個值尺借,成對出現(xiàn)绊起,鍵對象不可以重復(fù),值對
象可以重復(fù)燎斩;Set 集合中的對象不按照特定的方式排序虱歪,并且沒有重復(fù)對象,但它的實現(xiàn)類能對集合中的對象按照特定
的方式排序瘫里,例如 TreeSet 類实蔽,可以按照默認(rèn)順序荡碾,也可以通過實現(xiàn) Java.util.Comparator<Type>接口來自定義排序
方式谨读。
29.Map 中的 key 和 value 可以為 null 么
HashMap 對象的 key、value 值均可為 null坛吁。
HahTable 對象的 key劳殖、value 值均不可為 null铐尚。
且兩者的的 key 值均不能重復(fù),若添加 key 相同的鍵值對哆姻,后面的 value 會自動覆蓋前面的 value
30.Thread和Runnable多線程
31.線程局部變量 ThreadLocal,注意局部兩個字就和java普通局部變量差不多
用于實現(xiàn)線程內(nèi)的數(shù)據(jù)共享宣增,即對于相同的程序代碼,多個模塊在同一個
線程中運行時要共享一份數(shù)據(jù)矛缨,而在另外線程中運行時又共享另外一份數(shù)據(jù)
32.多線程共享數(shù)據(jù)
在 Java 傳統(tǒng)線程機制中的共享數(shù)據(jù)方式爹脾,大致可以簡單分兩種情況:
多個線程行為一致,共同操作一個數(shù)據(jù)源箕昭。也就是每個線程執(zhí)行的代碼相同灵妨,可以使用同一個 Runnable 對
象,這個 Runnable 對象中有那個共享數(shù)據(jù)落竹,例如泌霍,賣票系統(tǒng)就可以這么做。
多個線程行為不一致述召,共同操作一個數(shù)據(jù)源朱转。也就是每個線程執(zhí)行的代碼不同,這時候需要用不同的
Runnable 對象积暖。例如藤为,銀行存取款。
待續(xù)