java作用域public private protected 不寫 friendly的區別? public:可以被任何類引用。 protected:除了其他包不能使用,當前類,子孫類,同一包下的所有類都可 以使用。 friendly:不寫時,子孫類和其他包不能使用,當前類,同一包下都可以使用。 p ...
java作用域public private protected 不寫-friendly的區別?
- public:可以被任何類引用。
- protected:除了其他包不能使用,當前類,子孫類,同一包下的所有類都可
以使用。 - friendly:不寫時,子孫類和其他包不能使用,當前類,同一包下都可以使用。
- private:只有當前類中可以使用。
& 和 && 的區別。
- &是位運算符,而&&的邏輯運算符。二者沒有可比性。
collection和collections的區別。
- collection是java中容器框架的頂層介面。繼承它的主要有list和set兩個介面。
- collections是針對容器類的一個幫助類。提供一系列的靜態方法實現對容器的各種
搜索,排序,線程安全化的操作。 - 線程安全化:使用synchronized方法將集合變為線程同步的安全集合。
class model{
List list1 = Collections.synchronizedList(new ArrayList());
List list2 = Collections.synchronizedMap(new Map<String,String>());
List list3 = Collections.synchronizedSet(new TreeSet<>());
}
String s=new String("asd")創建了多少個對象。
- 創建了兩個。首先創建asd的字元串對象。然後new字元串對象將asd賦予它。
- String s = "asd":這種方式變數存儲在方法區中。
- new String("asd"): 這種方式對象存儲在堆中。
java中有沒有goto關鍵字?
- java中的保留字,現在沒有在java中使用。goto語句常與條件語句配合使用。可用來實現
條件轉移,構成迴圈,跳出迴圈體等功能。但是在結構化程式中,一般不使用goto語句,以免
造成程式流的混亂,使理解和調試程式困難。
5%3、-5%3、5%-3、-5%-3的結果是多少?
- 以右邊的符號為準:2 -2 2 -2
Overload和Override的區別
- 重載:Overload在同一類中使用,只要方法名一致,參數個數,返回值都可以不用一致。訪問類型也可以改。
- 重寫:Override繼承關係類使用,方法名,返回值,參數個數必須一致。訪問類型必須必父類大。
set容器里的元素是不能重覆的,那麼使用什麼方法實現的?
- 首先set集合的底層是map實現的,而map的key是不能重覆的。map的key值不重覆是因為put方法會先進行
hashcode的比較,如果值一致那麼再進行equals方法比較。這樣保證key值得唯一性。
error和exception的區別
- error一般是指可以恢復但是非常困難的問題,如棧溢出,記憶體溢出。
- exception指運行時異常,這是一種設計或者實現上的問題。
jdk8的新特性 主要的
- Lambda表達式和函數式介面:
lambda表達式也稱為閉包。是jdk8中的最大的改變,它允許我們將函數當成參數傳遞給某個方法,或者把代碼
本身當做數據處理:函數式開發。
- 介面增加的預設方法和靜態方法:
default和static
- 方法引用:
方法引用使得開發者可以引用現存的方法,java類的構造方法或者實例對象。一般和lambda表達式配合使用。
使得代碼簡介,緊湊。
構造器引用 Class::new///Class<T>::new
靜態方法引用 Class::static_method
某個類的成員方法引用 Class::method
實例對象的成員方法引用 instance::method
- 重覆註解:
自從java5引進註解之後,註解使用的越來越多,尤其是在框架中,但是註解不能在一個地方多次使用,
java8打破了這個限制,可以在一個地方重覆使用同一個註解,使用 @Repeatable定義重覆的註解
- 更好的類型推斷
編譯器可以推導出某個參數的數據類型,使得代碼更加的簡潔
- 拓寬註解的應用場景
現在註解幾乎可以使用在任何元素上。局部變數,介面,超類,實現類等
抽象類的介面的區別
- 相同點:都是不能被直接實例化的
- 不同點:
1. 抽象類是可以有方法體的,介面中沒有,但是java8的新特性中介面可以寫static和default關鍵字
的方法。
2. 抽象類中的成員變數可以隨意修飾,介面中只能是public sttaic final類型
3. 介面中不能含有靜態代碼塊,靜態方法。抽象類可以有,新特性之後,介面可以寫靜態方法。
4. 一個類只能單繼承,但是可以多實現。
5. 抽象類可以定義成員變數,介面中的變數都是常量。
抽象類是否可以繼承實體類?
- 抽象類是可以繼承實體類的,但是前提是實體類具有明確的構造函數。
constructor可以被override麽?
- 不能,因為constructor是不能被繼承的。但是可以被overload。
String類可以被繼承麽?
- 不能,該類是被final修飾的
在try-catch-final中,return在try語句里,那麼執行順序?
- final中的code會在return之前執行。
靜態變數和實例變數的區別
- 靜態變數是被static修飾的變數,也叫作類變數,不屬於類的任何一個對象,一個類不管創建多少個對象
靜態變數在記憶體中有且僅有一個拷貝。 - 實例變數必須依托於某一個實例,需要先創建對象後通過對象才能訪問,靜態變數可以實現讓多個對象共用
記憶體
ArrayList和Vector的區別,HashMap和Hashtable的區別。
ArrayList和Vector:
- 同步性:ArrayList是線程不安全的,也即是不同步的,Vector是線程安全的,也即是同步的。
數據增長:ArrayList在達到閾值的時候會增長原來集合的50%,Vector則會增長100%。
HashMap和Hashtable:
- 歷史原因:Hashtable是基於Dictionary類的,HashMap是java1.2引進的Map介面的一個實現。
- 同步性:Hashtable是線程安全的,HaspMap是線程不安全的的。
值:只有HashMap可以有空值,key或value。
char變數可以存儲一個漢字麽?為什麼?
可以,java中以unicode編碼,一個char占16字元,所以放中文是沒有問題的。
***GC是什麼?為什麼要有GC?
GC就是垃圾收集器。java不像C定義一個變數需要手動釋放記憶體。主要就是GC實現的,他可以自動檢測對象
是否超過作用域從而達到自動回收的目的。
String和StringBuffer和StringBuilder的區別
- String是長度不可變的,而Buffer和Builder是可變的。
- buffer和builder最大的區別就是buffer是線程安全的,builder是線程不安全的。所以多線程推薦使用
buffer,單線程使用builder。
final,finally,finalize的區別
- final:修飾符,修飾類:不可被繼承,修飾變數:變為常量,修飾方法:不能重載
- finally:在處理異常時finally塊來執行任何清除操作。
- finalize:方法名,java允許finalize方法在GC將對象從記憶體中清除之前做必要的清理工作。此方法是
GC確定該對象沒有被使用的時候調用的,屬於Object類,所以所有類都有該方法。
面向對象的特性
- 抽象
- 繼承
- 封裝
- 多態
基本數據類型
- byte char int short long double float boolean
int和integer的區別
- int是基本數據類型,integer是int的封裝類型。
ArrayList和Vector和LinkedList的存儲性能和特性
- ArrayList和Vector都是基於數組實現的,所以查詢快,但是ArrayList是線程不安全的,Vector是線程
安全的,其次,Vector的性能較差。 - LinkedList是基於鏈表的,所以插入,刪除,更改快。
heap和stack的區別
heap堆,stack棧。
- 棧:存取快,僅次於CPU中的寄存器,棧中的數據大小和生存區是確定的,缺乏靈活性。棧數據可以共用
- 堆:動態分配記憶體大小:堆中的GC可以周期的收取不再使用的對象。因為動態分配記憶體,存取慢。