1、棧和棧堆關係:
棧(stack)又名堆棧,只是換了個抽象的名字。
2、內存分配及變量存儲位置
寄存器、堆棧、堆、靜態域、常量池、非RAM存儲
3、hash
Hash是散列的意思,就是把任意長度的輸入,通過散列算法變換成固定長度的輸出,該輸出就是散列值。即hashCode(有可能重複),需要equal()方法來輔助確定一個對象。
1)如果散列表中存在和散列原始輸入K相等的記錄,那麼K必定在f(K)的存儲位置上
2)不同關鍵字經過散列算法變換後可能得到同一個散列地址,這種現象稱爲碰撞
3)如果兩個Hash值不同(前提是同一Hash算法),那麼這兩個Hash值對應的原始輸入必定不同
判斷時,先根據hashCode值找到hash表中這個位置的所有對象,再通過equal()來確定唯一的對象
使用hashCode是爲了避免對每個對象的判斷,減少判斷次數
https://blog.csdn.net/zhangyuan19880606/article/details/51240372
https://www.cnblogs.com/whgk/p/6071617.html
4、static:
初始化只會執行一次,一個類的所有實例共享同一份靜態內容,可以直接通過類名點出來。
5、final:
final修飾類時,表明這個類不能被繼承;基本數據類型final變量,數值不能更改;引用類型的final變量,引用不能改變。
6、整數默認int類型,浮點數默認double類型,單引號代表char類型,雙引號String類型
數值太長可以加下劃線來更具可讀性如:10_000_000
單引號引的數據 是char類型的,單引號只能引一個字符(表示單個字符)
雙引號引的數據 是String類型的,而雙引號可以引0個及其以上(引用字符串)
7、switch支持的數據類型?
expr可以是byte、short、char、int、enum、String類型,但是long類型不能
8、StringBuilder 、StringBuffer、 String
運行速度快慢爲:StringBuilder > StringBuffer > String
在線程安全上,StringBuilder是線程不安全的,而StringBuffer是線程安全的
String:適用於少量的字符串操作的情況
StringBuilder:適用於單線程下在字符緩衝區進行大量操作的情況
StringBuffer:適用多線程下在字符緩衝區進行大量操作的情況
9、爲什麼重寫toString方法
不重寫toString方法,當Object對象去調用toString時,輸出的是該對象的hash碼如:com.spdb.com.TableInfo@ea23517
重寫完就能按你想要的輸出如:TableInfo{TableID='0101', TableName='101桌', TableState=0}
10、String重寫了 equals() 方法變成了比較字符串內容,== 依然是比較兩個字符串是否爲同一對象,比較的是引用地址
public static void main(String[] args) {
//往字符串常量池添加一個hello,如果存在就不添加,並指向常量池的hello
String str1 = "hello";
//第一步,往字符串常量池添加一個hello,如果存在就不添加
//第二步,往堆裏新建一個hello,堆裏可重複添加,並指向堆剛纔新建的hello
String str2 = new String("hello");
}
public static void main(String[] args) {
String str1 = new String("hello");
String str2 = new String("hello");
//一共會產生三個hello,一個在字符串常量池,兩個new hello在堆裏
System.out.println(str1.equals(str2)); //true 字符串內容相同
System.out.println(str1 == str2); // false 在堆裏是兩個對象
}
equalsIgnoreCase()忽略大小寫的equals方法
trim()去掉字符串兩端空格
11、常量池
String pool,所有String都存在常量池中,new String(“xx”)指向的是堆的引用,指向常量池相同的字符串,引用相同。
Integer pool,在Integer(0-127)都是存在一個常量池中的,(不包含new Integer(xx)初始化),所以他們的引用也是相同的。
12、StringUtils.isBlank (org.apache.commons.lang3.StringUtils 的包)
isEmpty 沒有忽略空格參數,是以是否爲空和是否存在爲判斷依據。
isBlank 是在 isEmpty 的基礎上進行了爲空(字符串都爲空格、製表符、tab 的情況)的判斷。(一般更爲常用)
13、抽象類abstract,凡是實現類必須要完整的重寫所有的方法。(實現類!)部分不重寫的話子類只能也是抽象類,直至所有抽象方法被全部重寫爲止。
15、Serializable接口中什麼方法變量都沒有,只是用來標記可以序列化的功能,一個類要實現序列化必須實現Serializable接口,沒有任何方法需要實現.。
16、關鍵字instanceof
instanceof運算符的前一個操作符是一個引用變量,後一個操作數通常是一個類(可以是接口),用於判斷前面的對象是否是後面的類,或者其子類、實現類的實例。如果是返回true,否則返回false。
17、javaBean
通常有Session bean,Entity bean(實體類),MessageDrivenBean三大類。
規範:
1. 必須要有一個默認構造器
2. 提供get/set方法,如果只有get方法,那麼這個屬性是隻讀屬性!
3. 屬性:有get/set方法的成員,還可以沒有成員,只有get/set方法。屬性名稱由get/set方法來決定!而不是成員名稱!
4. 方法名稱滿足一定的規範,那麼它就是屬性!boolean類型的屬性,它的讀方法可以是is開頭,也可以是get開頭!
https://www.cnblogs.com/xdp-gacl/p/3871730.html
18、重定向
response.sendRedirect("遊覽器的訪問路徑");
重定向的路徑是遊覽器的訪問路徑。(重定向就是遊覽器發起新的一個請求)
19、轉發
轉發後還是同一個請求域相同,只是將response交給別人響應,轉發forward是留頭不留體,留響應頭不留響應體(指response,而request還是共享的)。
RequestDispatcher qr = request.getRequestDispatcher("/session2/login.jsp");//得到轉發器
qr.forward(request, response);//轉發
20、// TODO Auto-generated catch block
標記需要處理的地方,Eclipse有個面板叫做Tasks(可以在Window->Show View->Tasks中打開這個面板),顯示項目前100個Tasks的標籤名,你點擊後就會到那個位置去。
21、將Java文件編譯爲class文件
通過命令行 cd進入到Java文件目錄下,輸入javac Testjava.java回車;即可會在當前目錄生成Testjava.class文件;
22、虛方法
可以被重寫的方法都可以稱作虛方法,因此虛方法並不需要做特殊的聲明,也可以理解爲除了用static、final、private修飾之外的所有方法都是虛方法。
java中沒有virtual這個關鍵字,virtual是C++中用來聲明虛函數時用的. C++中用虛函數來表現多態性
23、運算
%取餘數 / 除號