Java基礎(一)——2019/12/19
- Java中如何支持正則表達式操作
Java中的String類提供了支持正則表達式操作的方法:matches()、 replaceAll()、split()等。此外,Java還提供了Pattern類和Matcher類來支持正則表達式操作。
- 簡單描述一下正則表達式的用途
我們在處理編寫處理字符串的程序時,常常需要依據某種模式(pattern)對字符串進行一定的操作:查詢、剪切、替換等,正則表達式正是我們用來定義模式(pattern)的強大工具。絕大多數語言均支持正則表達式。
- 比較一下Java和JavaScript
- Java:面向對象、編譯性語言、強類型語言
- JavaScript:基於對象和事件驅動、解釋型語言、弱類型語言
- 編程語言的分類
分類標準 | 類別 | 特徵 | 優點 | 缺點 | 代表語言 |
---|---|---|---|---|---|
程序執行方式 | 編譯型語言 | 需要通過編譯器將源代碼編譯成機器碼, 然後才能執行的語言 |
性能較高 | 修改程序時需要重新編譯,可移植性較差 | C、C++ |
解釋型語言 | 源代碼不需要編譯, 在執行的時候逐行翻譯 |
跨平臺(前提是安裝瞭解釋器)、可以快速部署 | 性能較差 | JavaScript、Python、PHP | |
混合型語言 | 混合型語言也叫做半編譯型語言,源代碼先被編譯成中間碼, 執行時由JIT執行中間碼 |
可移植性強 | 性能中等 | Java、C# | |
對數據類型檢查的時間 | 動態類型語言 | 在運行時確定數據類型, 不需要類型聲明,變量的類型通常爲被賦值的值的類型 |
Python、JavaScript、PHP、swift | ||
靜態類型語言 | 在編譯時確定數據類型, 需要聲明數據類型 |
C、C++、C#、Java | |||
對數據類型的處理方式 | 強類型語言 | 當一個變量被定義成某種類型,如果不進行強制類型轉換(顯示轉換),其類型不會改變。 | 運行效率較高、內存利用率較高 | Java、C#、Python | |
弱類型語言 | 數據類型可以被忽略,一個變量可以賦不同數據類型的值。 給一個整型變量a賦一個字符串值,那麼a就變成字符類型。 |
運行效率較低(存在隱式類型轉換)、 內存利用率較低(考慮通用性而多分配內存)、 對數據類型的檢測力度不夠 |
JavaScript、PHP |
- Attentions
- JIT:Just-In-Time Compiler,即時編譯器,將Java字節碼轉換成機器碼。
- V8引擎:V8引擎被設計用來提高瀏覽器執行JavaScript的性能,V8引擎會將js代碼轉換成機器碼(不同於中間碼),而不是依賴解釋器執行js代碼。
- 通常情況下解釋型語言是動態類型語言、編譯型語言是靜態類型語言。
- C和C++雖然能過隱式類型轉換,但也是編譯器通過調用相應的類型轉換函數完成的,C和C++是強類型語言。
- Java中如何跳出多重嵌套循環
首先嵌套循環的深度不宜過深,超過3層就要考慮是否能夠選擇其他的方式或者對代碼進行重構。可以在循環外部設置flag,然後通過修改flag的值來控制是否跳出嵌套循環。
- &和&&的區別
&(按位與)、&&(邏輯與),需要注意的是&不支持短路,&&支持短路。所以在大多數邏輯判斷中應該使用&&而不是&,否則程序會崩潰,當然在進行位運算時只能使用&。
比如:username != null && !username.equal("")如果寫成username != null & !username.equal("")在username爲null時就會出現空指針異常。
- int和Integer有什麼區別
int是基本數據類型,Integer是引用數據類型,是int的包裝類(wrapper class)。Java爲每個基本數據類型都引入了對應的包裝類型,從Java5開始引入了自動裝箱/拆箱機制,使得兩者之間可以自動轉換。
- String是否屬於基本數據類型
Java中的基本數據類型只有:byte、char、short、int、long、float、double、boolean,其他數據類型均爲引用數據類型。
- String、StringBuilder與StringBuffer
類型 | 特徵 | 適用場景 |
---|---|---|
String | 字符串常量,一旦創建便不可修改。 對String類型的變量進行賦值操作時,會創建新的String對象, 並將指針指向新的String對象。 所以當創建的臨時String對象過多時,JVM的GC便會開始工作, 相應地程序的性能便會下降。 |
只涉及少量的字符串操作 |
StringBuilder | 使用StringBuilder對字符串進行操作時不會產生臨時的String對象, 線程不安全。 |
單線程字符緩衝區的大量操作 |
StringBuffer | 類似於StringBuilder,但是StringBuffer是線程安全的。 | 多線程字符緩衝區的大量操作(通過synchronized實現線程安全) |