第一部分 Java SE基礎(1)java
1.1 java的8種基本數據類型 裝箱 拆箱緩存
1.1.1 8種基本的數據類型安全
1.1.2裝箱 拆箱多線程
自動裝箱是 Java 編譯器在基本數據類型和對應的對象包裝類型之間作的一個轉化。好比:把 int 轉化成 Integer,double 轉化成 Double,等等。反之就是自動拆箱。ide
原始類型: boolean,char,byte,short,int,long,float,double函數
封裝類型:Boolean,Character,Byte,Short,Integer,Long,Float,Double性能
有了基本數據類型,爲何還須要包裝類型?優化
Java是一個面對對象的語言,而基本的數據類型,不具有面向對象的特性。ui
好比Integer能夠用null表示爲空,int只能爲0.this
1.1.3 String 出 轉出 int 型,判斷能不能轉?如何轉?
答:能夠轉,得處理異常 Integer.parseInt(s) 主要爲 NumberFormatException:
1)當你輸入爲字母時,也就是內容不是數字時,如 abcd
2)當你輸入爲空時 3)當你輸入超出int 上限時 Long.parseLong("123")轉換爲 long。
1.1.4 short s1 = 1; s1 = s1 + 1; 有什麼錯? short s1 =1; s1 +=1; 有什麼錯?
1) 對於 short s1=1;s1=s1+1 來講,在 s1+1 運算時會自動提高表達式的類型爲 int,那麼將 int 賦予給 short 類型的變量 s1 會出現類型轉換錯誤。
2) 對於 short s1=1;s1+=1 來講 +=是 java 語言規定的運算符,java 編譯器會對它進行特殊處理,所以能夠正確編譯
1.1.5 .Int 與 與 Integer 區別
1.1.6. 字節字符區別
字節是存儲容量的基本單位,字符是數子,字母,漢子以及其餘語言的各類符號。
1 字節=8 個二進制單位:一個一個字符由一個字節或多個字節的二進制單位組成
1.1.7 java 基本類型與引用類型的區別
基本類型保存原始值,引用類型保存的是引用值(引用值就是指對象在堆中所處的位置/地址)
---------------------------------------------------------------------------------------------我是分割線------------------------------------------------------道長且阻,行則將至---------------------------------------
1.2 重寫重載 重寫重載
一.繼承的好處和壞處
好處:1. 子類能自動繼承父類的接口
2. 建立子類的對象時,無須建立父類的對象
壞處:1. 破壞封裝,子類與父類之間緊密耦合,子類依賴於父類的實現,子類缺少獨立性 (tip:高內聚,低耦合)
2. 支持擴展,可是每每以增長系統結構的複雜度爲代價
3. 不支持動態繼承。在運行時,子類沒法選擇不一樣的父類
4. 子類不能改變父類的接口
二.重載、重寫
Java 中的方法重載發生在同一個類裏面兩個或者是多個方法的方法名相同可是參數不一樣的狀況。與此相對,方法覆蓋是說子類從新定義了父類的方法。方法覆蓋必須有相同的方法名,參數列表和返回類型。覆蓋者可能不會限制它所覆蓋的方法的訪問。
重寫(override)又名覆蓋:
1.不能存在同一個類中,在繼承或實現關係的類中;
2. 名相同,參數列表相同,方法返回值相同,
3.子類方法的訪問修飾符要大於父類的。
4.子類的檢查異常類型要小於父類的檢查異常。
重載(overload)
1.能夠在一個類中也能夠在繼承關係的類中;
2.名相同;
3.參數列表不一樣(個數,順序,類型) 和方法的返回值類型無關。
三.Java 中是否能夠覆蓋(override)一個 private 或者是 static 的方法?
Java 中 static 方法不能被覆蓋,由於方法覆蓋是基於運行時動態綁定的,而 static 方法是編譯時靜態綁定的。static 方法跟類的任何實例都不相關,因此概念上不適用。
java 中也不能夠覆蓋 private 的方法,由於 private 修飾的變量和方法只能在當前類中使用,若是是其餘的類繼承當前類是不能訪問到 private 變量或方法的,固然也不能覆蓋。
---------------------------------------------------------------------------------我是分割線-------------------------------------------------永懷善意,清澈明朗-----------------------------------------------------
1.3 面向對象
new 一個對象的過程和 eclone 一個對象的過程區別
new 操做符的本意是分配內存。程序執行到 new 操做符時,首先去看 new 操做符後面的類型,由於知道了類型,才能知道要分配多大的內存空間。分配完內存以後,再調用構造函數,填充對象的各個域,這一步叫作對象的初始化,構造方法返回後,一個對象建立完畢,能夠把他的引用(地址)發佈到外部,在外部就可使用這個引用操縱這個對象。
clone 在第一步是和 new 類似的,都是分配內存,調用 clone 方法時,分配的內存和原對象(即調用 clone 方法的對象)相同,而後再使用原對象中對應的各個域,填充新對象的域,填充完成以後,clone 方法返回,一個新的相同的對象被建立,一樣能夠把這個新對象的引用發佈到外部。
1.4 String,StringBuffer ,StringBuilder ,hashcode ,equal
一.String StringBuffer StringBuilder 的區別
量。此時String的速度比StringBuffer和StringBuilder的性能好不少。
二.String 不可變?
String中的hashcode以及toString
四.String,是否能夠繼承,「+」怎樣實現,與 StringBuffer 區別
1.5 java 文件讀取
1.6 java反射
Java 中 的 反 射 首 先 是 能 夠 獲 取 到 Java 中 要 反 射 類 的 字 節 碼 , 獲 取 字 節 碼 有 三 種 方 法 ,
1.Class.forName(className) 2.類名.class 3.this.getClass()。
而後將字節碼中的方法,變量,構造函數等映射成相應的 Method、Filed、Constructor 等類,這些類提供了豐富的方法能夠被咱們所使用、
1.7static 和 和 final 的區別
final 的好處: 的好處:
1. final 關鍵字提升了性能。JVM 和 Java 應用都會緩存 final 變量。
2. final 變量能夠安全的在多線程環境下進行共享,而不須要額外的同步開銷。
3. 使用 final 關鍵字,JVM 會對方法、變量及類進行優化。
1、 static 方法是否能夠覆蓋? 方法是否能夠覆蓋?
static 方法不能被覆蓋,由於方法覆蓋是基於運行時動態綁定的,而 static 方法是編譯
時靜態綁定的。static 方法跟類的任何實例都不相關,因此概念上不適用。
二.是否能夠在 二.是否能夠在 static 環境中訪問非 static 變量?
靜態變量 ,靜態代碼塊先於 靜態代碼塊先於 System.out.println(「0000」)執行 執行 , 靜態的東西只執行一次,至關於全局變量。
參考文章:[1] https://www.bilibili.com/video/av29503459?from=search&seid=13524817771325516763
[2]http://www.javashuo.com/article/p-fxhjenvs-ba.html
[3]《java面經》紙質版