中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

有哪些Java基礎知識

發布時間:2021-10-26 15:51:32 來源:億速云 閱讀:150 作者:iii 欄目:編程語言

本篇內容介紹了“有哪些Java基礎知識”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

 面向對象與面向過程的區別
首先面向過程和面向對象的語言沒有具體的性能高下之分,要依據每種語言的設計來做參考。個人認為面向過程和面向對象的最大區別在于:面向過程的語言是結構化的,面向對象的語言是模塊化的。模塊化的代碼比結構化的代碼更易于維護,復用與擴展。

OracleJDK與OpenJDK的區別
OpenJDK是基于Sun捐贈的HotSpot的源代碼開發的,是開源的。OracleJDK是Oracle對JDK商業化版本,由Oracle發布并維護,因此OracleJDK比OpenJDK更可靠。

Java與C++的異同

  • Java和C++都是基于面向對象的語言。

  • Java不提供指針來訪問內存,C++運行指針訪問內存。

  • 垃圾回收機制。Java無需開發者手動釋放內存,因為Java由垃圾回收機制自動回收內存;C++則需要開發者手動釋放內存。因此Java在內存管理上相對C++更安全。

  • Java不支持多繼承,而C++支持。

JVM、JDK和JRE的區別

  • JVM:(java virtual machine)是java虛擬機

  • JRE:(java runtime environment)是java運行時環境

  • JDK:(java development kit)是java開發工具包,不僅包含來jre和jvm,還提供來javac編譯器和javadoc等其他開發所需工具

Java語言的特點

  • 面向對象

  • 平臺無關性,也就是跨平臺(依靠JVM)

  • 垃圾回收機制(GC)

  • 支持多線程

  • 支持便捷的網絡編程

  • 編譯和解釋(JIT)

  • 安全

面向對象的特征
面向對象的三大特征:封裝、繼承、多態。

  • 封裝:封裝是隱藏對象屬性和實現細節,只對外提供可訪問或修改的接口的技術。封裝的目的是為了簡化編程和增加程序的安全性,使得使用者無需了解對象的具體實現細節。

  • 繼承:繼承是在已存在的類上定義新的類的技術。在Java中,已存在的類被成為基類(父類),新的類叫派生類(子類)。子類擁有父類所有屬性、方法。但是子類對父類中私有的方法或屬性并不擁有,并不能訪問和使用。繼承的目的主要是為零代碼的復用。

  • 多態:多態指的是相同類型的對象,調用其相同的方法,參數也相同,但是它的表現形式也就是結果不同。多態的目的是為了程序的可擴展性和維護性。在java中可以使用繼承和接口2大特性實現多態。

重載和重寫的區別
個人認為重載和重寫完全沒有可比性,不知道為啥老有人喜歡拿圖嗎做筆記。

  • 重載:重載是描述一個類中有多個方法名相同的方法,但是它們的參數、類型、返回值、參數順序可能不同,表現形式也就不同。

  • 重寫:重寫是描述子類對父類的某個方法的邏輯進行重新編寫,但重寫的只是方法的內容,方法名、參數、類型、順序、返回值都不變的。

接口和抽象類的區別

  • 接口需要被實現,而抽象類是需要被繼承的。

  • 接口里的方法都是公共抽象的,而抽象類幾允許抽象也允許非抽象的方法(在JDK8中,接口被允許定義defalut方法,JDK9中還允許定義private私有方法)。

  • 一個類允許實現多個接口,但只允許繼承一個抽象父類。

  • 接口是對類的規范,規范的是行為能力。而抽象類是對類的抽象,抽象的是邏輯。

Object類方法有哪些?

  • getClass

  • equals

  • hashCode

  • toString

  • wait

  • wait(long):讓當前對象進入TIMED_WATING狀態

  • wait(long,int):讓當前對象進入TIMED_WATING狀態

  • notify

  • notifyAll

  • clone

  • finalize

靜態屬性方法和成員屬性方法區別
靜態屬性和方法屬于類Class,而成員屬性和方法屬于實例化的對象。

靜態方法只能使用靜態方法和靜態屬性,不能使用成員屬性和方法。因為靜態屬性和方法在對象還沒有實例化的時候就存在類。

簡單理解就是不允許一個已經在的事物使用一個不存在的事物。

子類屬性與父類屬性初始好順序

  • 無論如何,靜態數據首先加載,所以先初始化父類靜態變量和靜態初始塊(靜態變量和靜態初始塊按源代碼編寫的順序執行,普通初始化塊和普通成員變量也是如此),再初始化子類靜態變量和靜態初始化塊。

  • 普通初始化塊和普通成員變量優先于構造方法,所以接下來加載父類的普通初始化塊和普通成員變量,再調用父類構造方法。

  • 調用子類普通代碼塊,普通變量和構造方法。

自動拆箱和裝箱
自動拆箱和裝箱實際上是Java編譯器的一個語法糖。

自動裝箱是指:將基本數據類型轉為對應的包裝類對象的過程。

自動拆箱是指:將包裝類型轉為對應的基本數據類型。

自動裝箱實際上是調用類包裝類對象的valueof方法,如:Integer.valueof(1)

自動拆箱實際上是調用類包裝類的xxxValue方法,如:Integer.intValue()

在自動裝箱的時候,如果包裝類允許緩存并且值在緩存的范圍內,那么裝箱生產的對象會被緩存到常量池中。

Integer、Byte、Short、Long、Character包裝類型具有緩存池,而其他三種:Float、Double、Boolean不具有緩存池。

包裝類的緩存池緩存范圍基本都為:-128—— 127之間,除了Character的緩存范圍為0——127。

String為什么不可變?
先說下我的看法:String是Java中最常使用的類沒有之一,如果String時可變的,那么會發生非常多數不清的問題。如IP地址、人名、郵箱非常多的敏感數據。如果String時可變的,就會發生安全問題,且字符串常量池也就無從談起了。

String時不可變的,那么它的本質上也是線程安全的。不可變類的缺點就是每個不同值需要創建一個對象。

String是用final修飾的,保證類String類不能被擴展。String內部的字段時用final修飾的,并且沒有對外提供修改字段的方法。這也是為什么String不可變的原理。

final關鍵字的作用

  • 被final修飾的類,不能被繼承,并且這個類所有成員方法都為final,不能被重寫。

  • 被final修飾的屬性變量,不能被修改。如果該變量是基本數據類型,那么其值在初始化后不能被修改。如果該變量是引用類型,那么該引用不能再指向其他對象。

  • 被final修飾的方法不能被子類重寫。

StringBuilder和StringBuffer區別
StringBuilder 和 StringBuffer 都是可變的字符串,但是StringBuilder線程不安全的。

StringBuffer是線程安全的。因此單線程情況下考慮使用StringBuilder,多線程考慮使用StringBuffer。

他們之間的關系就好比HashMap和HashTable的關系。

equals知識點

  • == 與 equals區別

  • ==,如果是基本數據類型,比較的是值,如果是引用數據類型,比較的是對象的內存地址;equals比較的是對象的值。因此在java中比較2個對象的值是否相等使用equals,判斷2個對象釋放是一個對象,使用==。

  • hashCode方法返回:

  • equals方法重寫要求

  • 自反性:x.equals(x) == true 永遠成立

  • 非空性:x.equals(null) == false 永遠成立

  • 對稱性:如果x.equals(y) == true,那y.equals(x) == true

  • 傳遞性:如果x.equals(y) == tue,并且y.equals(z) == true,那么一定滿足x.equals(z) == true

  • 一致性:如果x.equals(y) == true,那么只要x和y的值不變,那么x.equals(y) == true 永遠成立

  • 為什么重寫equals方法一定要重寫hashcode方法?

在普通環境下(不涉及hash表),equals方法和hashcode方法一毛錢關系沒有的,此時重寫equals但不重寫hashcode是沒有關系的。但當使用map、set這些散列表時,它們會根據對象的hashcode來計算對象在散列表中的位置的。試想下,如果2個對象的值相等,但是由于它們是2個對象,hashcode卻不相等。 那么即使放入map,set(map)仍會存在重復數據。

深拷貝和淺拷貝

  • 深拷貝:拷貝所有的內容,除了基本數據類型變量復制一份,連引用類型變量也復制一份。

  • 淺拷貝:復制基本數據類型變量,對于引用類型的變量,直接返回這個引用本身。

IO流分類

  • 按照流的流向,分為:輸入流和輸出流。

  • 按照操作單元,分為:字節流和字符流。

使用字節流還是字符流?
考慮通用性,應該使用字節流。如果只是文本文件的操作,可以使用字符流。

BigDecimal
BigDecimal時Java中表示大浮點數的類型。

在Java中,如果遇到浮點數的判斷,可以使用BigDecimal來做計算,因為如果使用普通數據類型很可能會發生精度丟失的情況,這個時候的結果可能會出乎意料之外。

Java異常體系結構
在Java中,異常分為 Exception和Error,這2個類都繼承自Throwable。

  • Exception: Exception異常是程序本身可以處理的。Exception 分為運行時異常(RuntimeException)和 非運行時異常(CheckedException)。

  • RuntimeException: RuntimeException(運行時異常)是在程序運行時可能會發生的異常,如NullPointException, 這類異常往往是不可預料的,編譯器也不會要求你手動try catch或throws。

  • CheckedException: CheckedException(非運行時異常)是RuntimeException以外的異常,如IOException, 這類異常要求必須顯示的try catch或throws , 如果不處理,那么編譯就不會通過。

  • Error: Error錯誤是程序無法處理的,表示程序或JVM出現了很嚴重的,無法解決的問題。

Comparable和Comparator

  • Comparable: 自然排序接口。實現了它的類意味著就支持排序。

  • Comparator: 外部比較器。無需讓需要排序的對象實現排序邏輯,而是根據Comparator定義的邏輯來排序。 Comparator相較于Comparable更加的靈活。

為什么要慎用 Arrays.asList()?
因為Arrays.asList這個方法返回的根本就不是我們期盼的ArrayList, 而是Arrays類內部實現的ArrayList,這個內部類只支持訪問和set操作, 并不支持remove,add,clear等修改操作。

Java中引用的類型
Java中引用類型總共有四種: 強引用,軟引用,弱引用,虛引用。

  • 強引用(Strong Reference): Java程序中絕大部分都是強引用,一般使用new關鍵字創建的對象就是強引用。 只要強引用存在,強引用的對象就不會被回收,除非不可達(參考jvm部分)

  • 軟引用(Soft Reference): 軟引用一般不會被回收,但是當堆內存不夠的時候, 比如幾乎快要發生OOM的時候,就會回收掉軟引用對象。

  • 弱引用(Weak Reference): 只要垃圾回收開始,就會回收掉弱引用的對象。

  • 虛引用(Phantom Reference,又稱幽靈引用): 和其他幾種引用不同,虛引用不決定對象的生命周期, 它在任何時候都可能被回收掉。

“有哪些Java基礎知識”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

从江县| 罗田县| 巴青县| 平和县| 历史| 叙永县| 米林县| 江北区| 犍为县| 广德县| 金门县| 花莲市| 会宁县| 福泉市| 抚远县| 洛扎县| 闸北区| 东源县| 泽库县| 安平县| 岳池县| 武汉市| 临泽县| 麦盖提县| 浏阳市| 佛坪县| 汾西县| 营口市| 丰县| 湘西| 区。| 古蔺县| 洛宁县| 仙居县| 上饶市| 雷州市| 车险| 咸阳市| 四会市| 彰武县| 临汾市|