Java基礎(前面知識點總結)

一、Java基礎入門

Java概述和Java基礎語法

Java概述

        1、Java語言概述

        2、Java語言的技術架構:JavaEE(企業版)、JavaSE(標準版)、JavaME(微型版)     都有什麼作用?

        3、Java語言的特點:跨平臺性        什麼是跨平臺性?     爲什麼可以跨平臺??     跨平臺工作原理???

        4、Java語言環境搭建:JRE(運行環境)、JDK(Java開發工具包)    JRE是Java運行環境,是Java的核心類庫(Java所有的類文件都在JRE中)  

                什麼是JDK?    JDK的安裝?    配置環境變量的兩種方式?    爲什麼要配置path?     爲什麼要配置classpath?  classpath配置技巧??

        5、編寫Hello World :      編寫Hello World 需要哪些步驟?  編寫——編譯——運行   各個步驟中關鍵字的作用?

Java基礎語法

        1、關鍵字:什麼是關鍵字??     關鍵字分類?

        2、標識符:什麼是標識符?    標識符命名規則?     標識符的命名規範(類名、包名、函數名和變量名、常量名)???

        3、註釋:註釋的作用?   用於對程序進行註釋,提高程序的閱讀性              註釋分類?   用法?   文檔註釋需要注意的地方?

        4、常量:    什麼是常量?  常量的分類?   整數有幾種表現形式??(二進制、十進制、八進制、十六進制)   進制與進制之間的轉換原理??  

                用代碼如何實現進制轉換?   負數的二進制表現形式?

        5、變量:    什麼是變量?   爲什麼要定義變量?  變量的作用域?  變量的數據類型?(4類8種)  類型的默認值?

        6、類型轉換:  類型轉換分類?    什麼是自動類型轉換?  什麼是強制類型轉換?  數據類型排序??   byte、short、int轉換應注意的地方??

        7、運算符:   運算符的優先級??

        8、算術運算符:%、++、--、+號的用法??

        9、賦值運算符:   +=和=的區別?

        10、比較運算符:比較運算符運算結果?

        11、邏輯運算符:雙&和單&的區別?    雙|和雙||的區別??    ^的原理?(相同爲false,不同爲true)   !

        12、位運算符:<<(左移)、>>(右移)、>>>(無符號右移)原理?    位運算^的特點?

        13、三元運算符:三元運算符和if  else的區別?       好處:可以簡化 if else 代碼; 弊端:因爲是一個運算符,所以運算完必須有

                 一個結果。而 if else 運算完不需要一個結果。比如三元運算符內不能單獨列出輸出表達式。

        14、流程控制語句   流程控制語句的作用? 流程控制語句是用來控制程序中各語句順序的語句

        15、switch選擇結構      使用switch語句需要注意的地方?

        16、while和do while:   while和do while 的區別?

        17、for循環:   for循環中一個不是規律的規律?

函數

        1、什麼是函數?

        2、函數的格式?

        3、函數的特點?

        4、定義函數的兩個基本點???

        5、函數的重載:什麼是函數重載??    重載的作用?  重載的特點?

數組

        1、什麼是數組?

        2、使用數組有什麼好處?

        3、數組的幾種創建方式?

        4、數組的內存分配及特點    什麼是內存結構?   棧內存、堆內存

        5、數組常見操作    獲取最值    數組查找     數組排序

        6、二維數組:二維數組創建?    二維數組賦值?

二、面向對象

面向對象理解

1、什麼是面向對象?

2、面向對象思想的特點?

3、面向對象的特點?

4、類與對象的關係?

5、成員變量和成員函數的區別?

6、創建對象的方法?  匿名對象的使用方式?

7、構造函數:構造函數的作用?  構造函數的特點?

8、this關鍵字:this代表的是什麼?

9、static關鍵字:static關鍵字的作用? static修飾成員後成員的特點? static的弊端? 

        靜態代碼塊的特點和作用?

10、主函數的定義?

11、創建一個對象,計算機的執行流程

封裝

1、什麼是封裝?

2、封裝的表現形式?

3、封裝的好處?

4、單例設計模式:什麼是設計模式?單例設計模式的作用?單例設計模式步驟? 單例設計模式的兩種實現方法?懶漢式和餓漢式的區別?  懶漢式同步?

繼承

1、什麼是繼承?  怎麼完成繼承?(extends)

2、繼承的好處?

3、繼承的特點?  Java爲什麼不支持多繼承?

4、如何使用繼承體系?

5、子父類出現後類中成員的特性:當出現同名變量時?當出現同名函數時?

       重載和重寫的 區別?子父類中的構造函數?子類爲什麼一定要調用父類的構造函數?

       爲什麼this()和super()必須放在構造函數第一行?

6、final關鍵字:

        1、final關鍵字的作用?(類和成員)

        2、 final關鍵字的特點?(類、函數、變量)

7、抽象類:

        1、什麼是抽象類?

        2、抽象方法的由來?

        3、抽象類中抽象方法的作用?

        4、抽象類的特點?

        5、被abstract修飾的方法不能同時被哪些修飾符所修飾?原因?

                (final、static、private)

8、模板方法設計:什麼是模板方法設計?

9、接口:

        1、什麼是接口?

        2、接口中的成員格式?注:接口中的成員都是public的  

        3、接口的特點?

        4、接口爲什麼可以多實現?

        5、抽象類和接口的區別?

多態

1、什麼是多態?

2、多態的表現形式?(向上轉型和向下轉型)

3、多態的前提?

4、多態的好處?弊端?

5、多態的出現代碼中成員函數(非靜態)的特點?(一句話,簡單到不行)

6、多態的出現代碼中成員函數(靜態)的特點?(一句話,簡單到不行)

7、多態的出現代碼中成員變量的特點?(一句話,簡單到不行)

8、內部類:

        1、什麼是內部類?

        2、內部類訪問規則?(內部類訪問外部類和外部類訪問內部類)

        3、在其他外部類中訪問非靜態內部類?

                (外部類.內部類 變量名 = new 外部類().new 內部類())

        4、在其他外部類中訪問內部類靜態方法?

                (外部類.內部類.內部類方法名())

        5、在其他外部類中訪問內部類非靜態方法?

                (new 外部類.內部類().內部類方法名())  注意靜態方法和非靜態方法的區別!!!

        6、內部類在類中成員位置上時可以被哪些修飾符所修飾?修飾後有什麼特點?

                private 和 static

        7、當內部類定義在類中局部位置上時應注意的問題?

                1、不可以被成員的修飾符所修飾

                2、可以直接訪問外部類中的成員,因爲還持有外部類的引用,但是不可以訪 

                        問它所在的局部中的變量,只能訪問被final修飾的局部變量

9、匿名內部類

        1、匿名內部類怎麼創建?

                使用父類或接口創建子類對象,複寫父類或接口中的方法,調用方法

                格式:1、new 父類名(或接口名){

                                    要複寫的方法();

                                 }.要調用的方法();        //只可以調用一次

                 當想調用多個方法時:   父類名(或接口名)  變量名 = new  父類名(或接口名){

                                                               要複寫的方法();

                                                        }

                                                       變量名.方法名();   //可以調用多次

三、異常

1、什麼是異常?

2、異常的由來?

3、Java對於異常的劃分(嚴重和不嚴重)?

4、異常體系?

5、異常體系的由來?

6、異常體系的特點?

7、異常處理方式?

8、throw和throws的區別?

9、什麼是自定義異常?

10、自定義異常如何添加異常信息?

11、異常處理原則?

12、RuntimeException異常的特點?原因?

13、Java中異常分類?

14、異常在子父類中的體現?

15、try處理的幾種格式

四、多線程       

1、什麼是多線程?

2、多線程存在的意義?舉例

3、多線程的特性?

        而cpu執行哪個程序,是毫無規律性的。這也是多線程的一個特性:隨機性。哪個線程被cpu執行,或者說搶到了cpu的執行權,哪個線程就執行。而cpu不會只執行一個,當執行一個一會後,又會去執行另一個,或者說另一個搶走了cpu的執行權。至於究竟是怎麼樣執行的,只能由cpu決定

4、線程的兩種創建方式?繼承Thread    實現Runnable

5、爲什麼一定要複寫潤方法?

6、start方法的作用?

7、使用實現方式創建線程時,爲什麼要將子類作爲實際參數傳遞?

       原因:因爲自定義的run方法所屬的對象時Runnable接口的子類對象,而該對象中是沒有開啓線程的方法的,所以要讓線程執行指定對象的run方法就必須明確run方法所屬的對象,然後調用start方法開啓線程

8、爲什麼實現方式比繼承方式好?好在哪裏?

       因爲繼承存在侷限性,如果子類在繼承Thread前已經繼承了其他類,那麼是不能再繼承Thread類的,因爲Java不支持多繼承,而這時候想要開啓線程就只能通過實現Runnable接口來實現,因爲接口可以子在繼承類的同時還可以實現接口

9、實現方式和繼承方式的區別?

       繼承Thread:線程代碼存放在Thread子類run方法中。

       實現Runnable:線程代碼存放在接口子類run方法中。

      繼承操作的不是同一個Thread類的子類對象,而實現操作的是同一個Runnable接口的子類對象

10、線程中的幾種狀態?(要求要回畫狀態圖)

        1、 被創建:等待啓動,調用start啓動。

       2、運行狀態:具有執行資格和執行權。

       3、臨時狀態(阻塞):有執行資格,但是沒有執行權。

       4、凍結狀態:遇到sleeptime)方法和wait()方法時,失去執行資格和執行權,sleep方法時間

                到或者調用notify()方法時,獲得執行資格,變爲臨時狀態。

       5、消忙狀態:stop()方法,或者run方法結束。

        注:當已經從創建狀態到了運行狀態,再次調用start()方法時,就失去意義了,java運行時會

               提示線程狀態異常。

11、wait方法和sleep方法的區別?

       wait()會釋放cpu執行權,釋放鎖。

     sleep會釋放執行權,但是卻不會釋放鎖

12、線程安全

        1、爲什麼會出現線程安全問題?

                當多條語句在操作同一個線程共享數據時,一個線程對多條語句還沒有執行完,另一個線程

                得到了執行權,參與運行了,導致共享數據錯誤

        2、解決線程安全的方法?

               對多條操作共享數據的語句,在某個時間段,讓一個線程把有共享數據參與的語句一次性執

                行完,在該線程執行過程中,其他進程不可以參與執行

        3、解決線程安全的兩種方式(同步代碼塊和同步函數)要會寫!!!

        4、使用同步函數時,使用的是哪一個鎖?

        5、同步的前提

                1、必須要有兩個或兩個以上的線程

                2、必須是多個線程使用同一個鎖

       6、如何尋找線程中的問題?

             1、明確哪些代碼是多線程要運行的代碼

                2、明確共享數據、

                3、明確多線程運行代碼中那些語句是操作共享數據的

        7、線程的利弊?

        8、靜態同步函數使用的是哪把鎖?

                原理:通過驗證發現不在是this,因爲靜態方法中不可以定義this,靜態進內存是,內存中沒

             有本類對象,但是一定有該類對應的字節碼對象,類名.class該對象的類型是class,所以靜態

             同步函數使用的鎖匙該方法所在類的字節碼 文件對象,也就是類名.class,並且該對象在內存

             中是唯一的,因爲字節碼文件是唯一的

13、死鎖     爲什麼會出現死鎖?要求會寫死鎖程序!!!

14、線程通信

        1、什麼是線程通信?要求要會畫圖!!!

        2、wait()、notify()、notifyAll()的作用?

                都是使用在同步中,因爲要對持有監視器(鎖)的線程操作

        3、爲什麼wait()、notify()和notifyAll()都必須定義在Object類中呢?

                 原因:因爲這些方法在操作同步中的線程時,都必須標識他們所操作線程持有的鎖,只有

             同一個鎖上的被等待的線程可以被同一個鎖上的notify喚醒,不可以對不同鎖中的線程進行喚

             醒,因爲不是同一把鎖,也就是說:等待和喚醒必須是同一把鎖,而鎖可以是任意對象,所

             以可以被任意對象調用的方法要定義在Object類中

        4、JDK1.5版本後提供的同步的解決方案是什麼?      

                 1、將同步synchronized替換成了顯式Lock操作

                 2、將Object類中的wait、notify、notifyAll替換成了Condition對象,該對象可以對lock鎖進

                              行獲取

                 3、可以實現只喚醒對方的操作

                 結論:1.5版本之後提供了顯式的鎖機制,以及顯式的鎖對象上的等待喚醒操作機制,同

                        時,它把等待喚醒機制進行了封裝,封裝完一個鎖可以對應多個等待和喚醒

15、如何停止線程?

1、開啓多線程運行,運行代碼通常是循環結構。只要控制住循環,就可以讓run方法結束,也就是線程結束。

2、當遇到特殊情況時,比如線程處於了凍結狀態,則第一種方式是沒有辦法結束線程的,當沒有指定的方式讓凍結的線程恢復到運行狀態時,這時需要對凍結進行清除。強制讓線程恢復到運行狀態中來。這樣就可以操作標記讓線程結束。實現方式:Thread類提供的interrupt();方法 

16、線程中提供的其他方法

         1、setDaemon(boolean boo)           返回值類型爲 void

                  主要將該線程標記爲守護線程或用戶線程。

                   理解:守護線程可以理解爲後臺線程,而我們看到的線程其實都是前臺線程,當你把某

                   些、線程標記爲後臺線程後,他就具備了一個特殊的含義,後臺線程的特點:開啓後會和

                   前臺線程共同搶奪cpu的執行權運行,開啓運行都沒有區別,就結束有區別,當所有的前

                   臺線程都結束後,後臺線程會自動結束,後臺線程依賴於前臺線程

        2、join()          返回值類型void

                  主要用於等待線程終止 

                  理解:當主線程執行到join方法時,凡是在該方法後面的線程都會被處於凍結狀態,只用當join

                  線程結束後,後面的線程纔會被執行

      3、setPriority(int newPriority)   返回值類型爲void

              主要用於修改線程的優先級

                    線程優先級等級:     1級——10級   默認爲5級

                各個等級在Java中已經定義好了最終靜態常量保存了1級、5級和10級   如圖:                           

                 注:在給線程設置優先級時,只需要使用Thread類調用即可

                    如: setPriority(Thread.MAX_PKIORITY)    //設置最高優先級

   4、yieId()    static  void

      用於暫停當前正在執行的線程對象,並執行其他線程,就好比說我執行完

      了,該你了(就是你執行完聽一次當搶奪到執行權後在執行,在等

       待...................)





           

















                            

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