Java (理論)

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、運算

%取餘數 / 除號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章