1. 面向過程和麪向對象的區別
1.1 面向過程:
優點:
-
性能高。
相比於類調用需要實例化,開銷比較大。適用於單片機、嵌入式開發、Linux/Unix。
NOTICE:
嵌入式開發:
嵌入式開發是指利用分立元件或集成器件進行電路設計、結構設計,再進行軟件編程(通常是高級語言),實驗,經過多輪修改設計、製作,最終完成整個系統的開發。這種嵌入式開發,適用於未來產品比較單一,產量比較大,產品開發週期比較長,成本控制比較嚴格的系統。
嵌入式技術不是單純的軟件技術,也不是單純的硬件技術,是一門如何在一個特定的硬件環境上開發與構建特定的可編程軟件系統的綜合技術。嵌入式技術是在嵌入式系統的發展中應運而生的,它是依附於嵌入式系統,並推動嵌入式系統不斷向前發展的核心動力。嵌入式是一種專用的計算機系統,作爲裝置或者設備的一部分。(https://baike.baidu.com/item/%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91)
缺點:
- 沒有面向對象的編程易維護、易複用和易擴展。
1.2 面向對象
優點:
-
易維護、易複用和易擴展。
因爲具有封裝、繼承、多態性的特性。可以設計出低耦合的的系統,使系統更加靈活和易於維護。
缺點:
- 相比於面向過程的編程性能低。
1.3 JAVA
面向過程的語言也需要分配內存,計算內存偏移量。但是大多數都是直接編譯成機械碼在電腦上使用,另一些面向過程的腳本語言性能不一定比Java好。
Java是半編譯語言,最終的代碼不是可以直接被CPU執行的二進制機械碼。這是性能差的主要原因,並不是因爲它是面向對象的語言。
2. JAVA語言的特點
1.簡單易學;2.面向對象(封裝/繼承/多態);3. 平臺無關性;4. 可靠性;5. 安全性; 6.支持多線程; 7.支持網絡編譯並且很方便; 8. 編譯與解釋並存。
TIPS:
-
編譯型語言在編譯過程中生成目標平臺的指令,解釋型語言在運行過程中才生成目標平臺的指令。
-
虛擬機的任務是在運行過程中將中間代碼翻譯成目標平臺的指令。
3. JVM、JDK和JRE
3.1 JVM(Java Virtual Machine):
JVM是運行Java字節碼的虛擬機。
JDK將.java文件編譯爲.class文件。.class文件即爲字節碼,與操作系統無關。JVM類加載器首先會加載字節碼文件,然後通過編譯器逐行編譯,這種方式執行速度較慢。
IMPROVEMENT:
JIT編碼器:屬於運行時編譯,即經過一次編譯之後,會將其字節碼對應的機器碼保存下來,以後都可以直接使用。——即Java是編譯與解釋共存的語言。
3.2 JDK(Java Development Kit):
功能齊全的Java SDK,包含JRE、編譯器和工具。可以創建和編譯程序。
3.3 JRE:
可以運行已編譯Java程序,但不能創建新程序。
4. Oracle JDK和OpenJDK
Oracle JDK | OpenJDK | |
---|---|---|
版本更新 | 6個月 | 3個月 |
是否開源 | 是OpenJDK的一個實現,並不是完全開源 | 完全開源 |
穩定性 | 更穩定,但是兩者代碼幾乎相同 | |
響應性和JVM性能 | 性能更好 | |
支持版本 | 必須更新到最新版本 | |
許可 | 二進制代碼許可協議 | GPL v2許可 |
5. Java和C++的區別
-
都是面向對象的語言,即支持封裝、繼承和多態;
-
Java不提供指針來直接訪問內存,所以程序內存更加安全;
-
Java的類是單繼承的,C++支持多重繼承;但是Java的接口可以多重繼承;
-
Java有內存管理機制,不需要手動釋放無用內存;
-
Java沒有結束符這一概念。
6. Java程序的主類
主類是Java程序執行的入口點。
Java應用程序中,主類是包含main()方法的類。在應用程序中,主類不一定是public類。
在Java小程序中,主類是一個繼承自系統類JApplet或Applet的子類,這個主類必須是public類。
NOTICE:
- Applet類的作用是提供一個基本框架,使得Applet可以通過Web瀏覽器來運行,Applet沒有main方法,它依靠瀏覽器調用Applet類中的方法。Applet不安全。
- 由於Applet類不能與Swing組件一起工作,所以從Applet類擴展出了一個JApplet類。JApplet的內容窗格使用BorderLayout佈局管理器。
7. Java應用程序與小程序之間的差別
應用程序是從主線程啓動,即main函數;
Applet主要是嵌在瀏覽器去頁面上運行,調用init()或run()來啓動。
8. 字符型常量和字符串常量的區別
字符型常量 | 字符串常量 | |
---|---|---|
形式 | 單引號 | 雙引號 |
含義 | 相當於一個整型值(ASCII值),可參與表達式運算 | 代表一個地址(字符串在內存中的存放位置) |
內存 | 2字節(char) | 若干個字節 |
9. 重載和重寫的區別
重載:可以發生在一個類中,多個方法有相同的名字、不同的參數,則產生了重載。編譯器必須通過各個方法的參數類型和特定方法調用所使用的值類型與特定方法調用所用值類型進行匹配來挑選相應的方法。如果編譯器找不到匹配的參數,會產生編譯錯誤。(即重載解析過程)
重寫:子類對父類允許訪問的方法實現過程進行重新編寫。方法名、參數列表相同,返回值、拋出的異常範圍小於等於父類,訪問修飾範圍大於等於父類。另外,父類的訪問修飾符爲private子類則不能重寫。
10. 構造器Constructor能否重寫?
Constructor不能被override,但是可以overload。所以一個類中可以有多個構造函數。