-
java有幾種數據類型
基本類型:數值:byte,short ,int,long 小數類型:float,double 布爾類型:boolean
引用類型:
類,接口,數值
-
訪問修飾符有哪些
private 當前類 default 當前類,當前包 protected 當前類,當前包,子類 public 當前類,當前包,子類,不同包
-
final的作用
final 修飾的類不可以被繼承 final 修飾的方法不可以被重寫 final 修飾的變量不可以被修改,只是引用不能被修改,引用的內容還是可以改的
-
java三大特性
封裝:將一個對象內部進行隱藏通過修飾符,通過複用性和安全性 繼承:提高代碼的複用性,是多態的前提 多態:父類或者父接口可以引用子類的實例對象,提高靈活性
-
抽象類和接口的對比
相同: 1.抽象類和接口都不能實例化 2.都是用來繼承或者實現的 3.都包含抽象方法,子類都需要重寫覆蓋 不相同: 1. 關鍵字:抽象類abstract 接口 interface 2. 構造器:抽象類可以有構造器 接口不能有構造器 3. 方法修飾符: 抽象類可以是任意訪問修飾符 接口方法只能並且默認就是public 4. 繼承:類只可以繼承一個抽象類, 類可以實現多個接口 5. 字段聲明:抽象類可以是任意的, 接口只能或者默認是public static
-
值傳遞和引用傳遞的區別
值傳遞:方法傳遞參數,當爲基本類型,那麼是值傳遞,直接傳遞的是內容的拷貝,修改賦值不影響原來的值 引用傳遞:方法傳遞參數,當爲引用類型,那麼少是引用傳遞,直接拷貝是內存地址,修改引用內容對原來的值有影響 值和引用傳遞:本質上都是值傳遞,一個傳遞的是內容,一個傳遞的是地址(特殊內容),一個是內容拷貝,一個是地址拷貝,重新對這兩種類型的參數賦值都不影響原來的變量
-
String和StringBuffer、StringBuilder的區別
可變性: 1.不可變:String對象是不可變的,底層的數據結構爲 private final char[] 2.可變: StringBuffer、StringBuilder 是可變的,底層的數據結構爲 char[] value 線程安全性 1.線程安全的:StringBuffer,String是線程安全的,StringBuffer加了同步鎖,String不可再次寫只可讀 2.線程不安全的: StringBuilder線程不安全,沒有進行同步 使用方式 1.少量字符串操作用String 2.線程安全用StringBuffer 3.線程不安全但是要效率用StringBuilder
-
bio,nio,aio的區別
1.bio就是我們使用的傳統io,讀寫阻塞,需要開單獨線程處理,併發能力低 2.nio就是bio的升級,也叫做非阻塞io,提供了Buffer,Channel,Selector的方式實現和操作io,實現多路複用 併發負載能力高 3.aio是nio2版本,也叫做異步非堵塞 io ,異步 io 的操作基於事件和回調機制。
-
hashCode和equals方法
1.在使用Hash相關類型集合的時候,HashSet,HashMap,在判斷是不是一個對象的時候, 是hashCode和equals方法同時返回true,纔會認爲是同一個對象,纔會進行覆蓋,否則當做一個新對象存儲 2.Long,Integer...這些基本類型都幫我們重寫好了hashCode和equals方法,可以通過 hashCode和equals方法唯一標識一個對象,我們可以直接使用不會有問題 3.我們自定義的類,會直接繼承Object的hashCode方法,直接返回內存地址,那麼直接new一個對象 肯定hashCode不會相等,那麼在使用HashSet,HashMap就永遠都不是同一個對象 4.如果你定義的類不會用到Hash相關的集合操作,那麼可以不重寫hashCode和equals方法 5.使用了lombok插件的添加相關注解已經重寫了hashCode和equals方法 public int hashCode() { int PRIME = true; int result = 1; Object $userId = this.getUserId(); int result = result * 59 + ($userId == null ? 43 : $userId.hashCode()); Object $userName = this.getUserName(); result = result * 59 + ($userName == null ? 43 : $userName.hashCode()); Object $appName = this.getAppName(); result = result * 59 + ($appName == null ? 43 : $appName.hashCode()); return result; } public boolean equals(final Object o) { if (o == this) { return true; } else if (!(o instanceof AccountCreateDto)) { return false; } else { ...... }
-
Hash相關集合使用String做Key的好處
使用String作爲key的速度更快,因爲比較hashCode的時候,String的不需要重寫計算Hash, 已經當做String對象的hash屬性緩存下來了 public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value.length; i++) { h = 31 * h + val[i]; } //緩存計算的hash值 hash = h; } //如果有,直接返回 return h; }
-
常用的集合類
1.主要是兩個接口 Collection 和 Map Collection子接口:Set, List,Queue Map接口:沒有細分子接口 2.常見實現 List:ArrayList、LinkedList、Stack,Vector Set:HashSet、TreeSet、LinkedHashSet Map:HashMap、TreeMap、Hashtable、ConcurrentHashMap 3.Set,List,Map特性 Set: 允許存入null,不允許重複 List: 允許存入多個null,允許重複 Map: 存儲的是鍵值對,key可以爲null,不允許重複key
-
ArrayList 和 LinkedList 的區別
1.ArrayList底層用的數組,LinkedList底層是雙向鏈表 2.ArrayList隨機訪問效率高,直接通過數組下標(O(1));LinkedList隨機訪問效率差點,需要移動指針(O(n)) 3.ArrayList添加/刪除效率低,設計到擴容素組元素移動;LinkedList的插入刪除直接改變指針的指向 4.ArrayList 和 LinkedList 都是不同步的,也就是不保證線程安全
-
HashMap 與 HashTable 區別
1.HashMap非線程安全,HashTable線程安全 2.HashMap的key可以爲null,HashTable的key不能爲null 3.HashMap底層數據結構是數組+鏈表+紅黑樹,HashTable底層數據結構沒做優化依然是數組+鏈表 4.HashMap初始大小是16,擴容爲2倍,HashTable初始大小是11,擴容2n+1
常見問題之java基礎
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.