所謂的內聯函數,就是函數在被調用的地方直接展開,編譯器在調用的時候不用像通常函數那樣,參數壓棧,返回時參數出棧以及資源釋放等,這樣提升了程序執行速度,對應java語言中也有一個關鍵字final來知名那個函數式內聯的.內聯部已訂好,當被指定爲內聯的方法體很大的時候,展開的開銷可能就已經超過了普通函數調用的時間,引入內聯反而下降了性能,所以在選擇這個關鍵字的時候須要慎重,不過,在之後高版本的JVM中,在處理內斂的時候作出了優化,他會根據方法的規模來決定是否展開調用
構造函數能夠是內聯函數 構造函數能夠設置默認的參數 構造函數在定義類對象的時候自動執行
FileInputStream,從文件中以字節流讀取 FileReader,從文件中以字符流讀取 FileWriter,向文件中,寫入字符
接口中的變量,默認是public static final 接口中的方法,默認是public abstract
Collection類型的集合只能裝入Object類型的數據,題中傳入的是0,可是會自動裝箱爲Integer JVM造成對象後會放入堆中,listlist1和listlist2都指向堆中的同一個對象 instanceof是用來判斷對象的類型,也就是對象屬於哪一個類的實例,由於指向的是同一個對象,因此都爲Integer對象,也就是都爲true
Super super = new Sub(); // 向上轉型不須要向值類型轉換 Sub sub = (Sub)new Super(); // 向下轉型必需要強制類型轉換 這道題考察的是多態,對於多態,能夠總結爲: 1,父類引用指向子類對象 2,父類引用只能調用父類的field和method,不能調用子類的field和method,會報錯 3,上面說只能調用父類中的field和method,若是子類中的method覆蓋了父類中的method,那麼使用父類的引用,調用的將是子類中重寫的method,而不是父類中的method; 若是子類field與父類field重名,使用父類的引用,調用field的話,調用的是父類中的field的值 3,子類"覆蓋"父類的變量不會報錯
getDeclaredMethods():
Returns an array containing {@code Method} objects reflecting all the declared methods of the class or interface represented by this {@code Class} object, including public, protected, default (package) access, and private methods, but excluding inherited methods. 翻譯:返回類的全部聲明的方法,包括這個類/接口中的方法(public,private,protected,default),可是不包括這個類所繼承的超類中的方法 getMethods(): Returns an array containing {@code Method} objects reflecting all the public methods of the class or interface represented by this {@code Class} object, including those declared by the class or interface and those inherited from superclasses and superinterfaces. 翻譯:返回這個類/接口中的全部public方法,包括這個類/接口的超類/父接口中的public方法 同理: getDeclaredMethods() 和 getFields()java
補充知識: public class ArrayList extends AbstractList implements List, RandomAccess, 說明ArrayList支持隨機訪問 Cloneable, 說明ArrayList支持克隆 java.io.Serializable 說明ArrayList支持序列化
ConcurrentHashMap使用segment來分段和管理鎖 static class Segment extends ReentrantLock impliments Serializable{ 瀏覽器
} public class ReentrantLock implements Lock,Serializable安全
interface Lockbash
public class HashMap extends AbstractMap implements Map,Cloneable,Serializable
public static List asList( T ... a) { return new ArrayList(a); } private static class ArrayList{ //這個ArrayList爲Arrays的內部類 } app
SimpleDateFormat 是線程不安全的
使用JDBC的完整流程: 加載JDBC驅動程序 提供連接URL 建立數據庫鏈接 建立一個Statement 執行SQL語句 處理 關閉JDBC鏈接
通過驗證,以Stream結尾的都是字節流byte,以Reader,Writer結尾的都是字符流 須要注意的: InputStreamReader: An InputStreamReader is a bridge from byte streams to character streams: It reads bytes and decodes them into characters using a specified {@link java.nio.charset.Charset charset}. The charset that it uses may be specified by name or may be given explicitly, or the platform's default charset may be accepted. InputStreamReader 是字節流通向字符流的橋樑:它使用指定的 charset 讀取字節並將其解碼爲字符。它使用的字符集能夠由名稱指定或顯式給定,或者能夠接受平臺默認的字符集。 OutputStreamReader: An OutputStreamWriter is a bridge from character streams to byte streams:Characters written to it are encoded into bytes using a specified {@link java.nio.charset.Charset charset}. OutputStreamWriter 是字符流通向字節流的橋樑:可以使用指定的 charset 將要寫入流中的字符編碼成字節。它使用的字符集能夠由名稱指定或顯式給定,不然將接受平臺默認的字符集。
考察Statement與PreparedStatement的使用與區別: interface Statement extends Wrapper,AutoCloseable interface PreparedStatement extends Statement Statement是一個接口,用於爲一條SQL語句生成執行計劃,若是須要執行10條SQL語句,則須要生成十次執行計劃 PreparedStatement繼承自Statement,具備Statement的所有功能,主要用來解決使用Statement屢次執行同一SQL語句的效率問題,PreparedStatement使用的是數據庫支持預編譯的功能,預先將SQL語句進行編譯,屢次執行同一條SQL語句的時候,只須要將編譯好的SQL語句直接執行就能夠,提升了效率,同時能夠防止SQL注入,提升了安全性 構造PreparedStatement的時候須要傳入SQL語句,進行預編譯,excute的時候,excute裏面不傳入SQL 構造Statement的時候不須要傳入SQL語句,excute的時候須要傳入SQL語句
Object 類中wait(),notify(),notifyAll()方法的區別: 1)wait() notify(), notifyAll() public final native void wait() throws InterruptedException ; public final native void notify(); public final native void notifyAll(); 都是native方法,都爲final方法, 沒法被override 2) 調用某個對象的wait()方法,可以讓當前線程阻塞,前提是當前線程必須擁有此對象做爲鎖,並且obj.wait()方法必須位於synchronized(obj)中 3) 調用某個對象的notify()可以喚醒一個正在等待這個對象的線程,若是有多個縣城都在等待此對象,則從中喚醒一個 4) 調用notifyAll()可以喚醒全部正在等待這個對象的monitor的線程 爲何這三個不是Thread中的方法,而是Object類中的方法? 固然因爲Thread也是Object,因此Thread也能夠調用此方法 緣由: 因爲每個對象均可以擁有鎖,因此讓當前線程等待某個對象的鎖,固然須要經過這個對象來操做了,而不是用當前線程來操做,由於當前線程可能會等待多個鎖,若是經過線程來操做,就很複雜 上面已經提到,若是條用某個對象的wait()方法,當前線程必須擁有這個對象的鎖,所以調用wait()方法必須在synchronized塊或者synchronized方法中進行 調用某個對象的wait()方法,至關於讓當前線程交出此對象的鎖,而後進入等待狀態,等待後續再次得到此對象的鎖(Thread中的sleep方法使當前線程暫停一段時間,從而讓其餘線程有機會繼續執行,可是在這期間sleep不是訪對象鎖) notify()方法可以喚醒一個正在等待該對象的鎖的線程,若是有多個線程,只能喚醒其中的一個,具體喚醒那個線程不肯定 調用對象的notify()方法,當前線程也必須用用這個對象的synchronized,所以調用notify()方法必須在synchronized()中執行 Condition是在jdk 1.5中出現的,用來替代傳統的Object的wait,notify()和notifyAll(),實現線程間的通訊,使用Contion的await(),singal()這種方式來實現線程的協做更加安全和高效,阻塞隊列使用的是Condition來模擬線程間的協做 Condition是一個接口 public interface Condition { await(); signal(); signalAll(); } Condition依賴於Lock接口,生成一個Condition的基本代碼是lock.newCondition(); 調用Condition的await()和signal()方法,必須都在lock.lock()的保護以內 wait()對應於await(); notify()對應於signal; notifyAll()對應於signalAll();
ThreadLocal裏面能夠放一個值 ThreadLocal類用於建立一個線程本地變量 Thread中有一個成員變量ThreadLocals,該變量的類型是ThreadLocalMap,也就是一個Map,他的鍵是threadLocal,值爲變量的副本.經過ThreadLocal的get()方法能夠獲取到該線程變量對應的value
不管是靜態內部類,仍是非靜態內部類,都是外部類的一個屬性,因此,對於非靜態內部類,須要使用InstanceObject().new InnerClass(),對於靜態內部類,可使用new OuterClass.staticInnerClass()的方式來進行建立 不管是靜態內部類,仍是非靜態內部類,都須要使用OuterClass.innerClassName來進行引用