欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java基面試礎知識詳解

 更新時間:2019年08月15日 14:47:04   作者:whx_ls  
這篇文章主要介紹了java基面試礎知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下

面向對象的三大特性

1)封裝

就是把同一類事物的屬性和方法歸到同一個類中,方便使用

防止該類的代碼和數(shù)據(jù)被外部類定義的代碼隨意訪問

要訪問該類的數(shù)據(jù)和代碼必須通過嚴格的方法控制

封裝的主要功能在于我們能修改自己的實現(xiàn)代碼,而不用修改哪些調(diào)用程序的代碼片段。

優(yōu)點:減少耦合,類內(nèi)部自由修改,可以對類成員變量進行更精確的控制,隱藏信息、實現(xiàn)細節(jié)。

最佳實踐:

為了實現(xiàn)良好的封裝,通常將類的成員變量聲明為private ,通過public的set和get方法完成對屬性的操作

2)繼承

繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法

特性:

子類擁有父類的非private屬性,方法

子類可以擁有自己的屬性和方法,即子類可以對父類進行擴展

子類可以用自己的方式實現(xiàn)父類的方法

java的繼承是單繼承

關鍵字:extends

3)多態(tài)

封裝和繼承幾乎都是為多態(tài)而準備的

多態(tài)是同一個行為具有多個不同表現(xiàn)實行或形態(tài)的能力

多態(tài)是一個接口,使用不同的實例而執(zhí)行不同的操作

多態(tài)存在的三個必要條件:

繼承

重寫

父類引用指向子類對象

重載和重寫區(qū)別

重寫(Override)

重寫是子類對付類的允許訪問的方法的實現(xiàn)過程進行重新編寫,返回值和形參都不能改變。 子類根據(jù)需要實現(xiàn)自己的方法

重載(Overload) 是在一個類里面,方法名字相同,而參數(shù)不同(個數(shù)和類型不同),返回類型可以相同也可以不同 最常用的就是構造器的重載

方法重載是一個類的多態(tài)性表現(xiàn),而方法重寫是子類與父類的一種多態(tài)性的表現(xiàn)。

重寫發(fā)生在子類和父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的返回類型,比父類被重寫方法更好的訪問,不能比父類被重寫方法聲明更多的異常?!\行時多態(tài)

重寫原則: 參數(shù)列表必須完全與被重寫方法的一致,返回類型必須完全與被重寫的方法的返回類型一致 構造方法不能被重寫,聲明為final的方法不能被重寫,聲明為static的方法不能被重寫,但是能夠被再次申明

訪問權限不能比父類中被重寫的方法的訪問權限更低。

重寫的父類方法能夠拋出任何非強制異常(也叫非運行異常),無論被重寫的方法是否拋出異常,但是,重寫的方法不能拋出新的強制性異常,或者比被重寫方法聲明更廣泛的強制性異常,反之則可以。

多態(tài)的實現(xiàn)機制

多態(tài)允許基類(父類)指針或引用指向派生類(子類)的對象,而在具體訪問方法時實現(xiàn)動態(tài)綁定。

編譯時多態(tài)(重載)

運行時多態(tài)(重寫)

多態(tài)是針對類的方法而言的,對于類的成員變量是定義的時候確定的,即編譯的時候就確定的。

是否可以繼承String類

String是final類型的,所以不能被繼承 java類支持多繼承嗎?可以實現(xiàn)多個接口嗎?

java不支持多繼承,但是類可以實現(xiàn)多個接口,間接的實現(xiàn)多繼承,也可以通過內(nèi)部類。

接口和抽象類有什么區(qū)別

接口和抽象類都是繼承樹的上層,他們的共同點如下:

1)都是上層的抽象層

2)都不能夠被實例化

3)都能包含抽象的方法,這些抽象的方法用于描述類具備的功能

區(qū)別:

在抽象類中可以寫非抽象的方法,從而避免在子類中重復書寫,提高代碼復用性–抽象類的優(yōu)勢,而接口當中只能有抽象的方法(jdk8之后也可以有實現(xiàn)方法) 一個類只能繼承一個直接父類,這個父類可以是具體的類也可以是抽象類,但是一個類可以實現(xiàn)多個接口,接口的設計具有更大的擴展性,而抽象類的設計必須十分謹慎。

抽象級別:接口 大于 抽象類 大于 實現(xiàn)類

接口的設計目的:是針對類的行為進行約束,側重于動作,而抽象類的設計目的是代碼復用。 抽象類是 is a的關系,接口是has a的關系。

java中修飾符的作用域以及可見性 public :當前類、子類,同一包、其他包都可以訪問 protected:當前類,子類以及同一包可以訪問,其它包不可以 default:當前類和同一包可以訪問,子類和其他包不可以 private:當前類可以訪問,同一包、子類、其它包都不可以訪問

==和equals方法的區(qū)別:

兩個操作用于對象的比較,檢查對象的相等性,但是區(qū)別在與equals是方法,而==是操作符 一般使用==比較原生類型如:boolean、int、char等等,使用equals比較對象 如果兩個引用指向相同的對象==返回true,equals方法的返回結果依賴于具體的實現(xiàn),一般重寫equals方法,也重寫hashcode方法, 字符串的對比使用的是equals代替==操作符

靜態(tài)變量和實例變量的區(qū)別?

一個static方法內(nèi)不可以調(diào)用非static方法 因為非靜態(tài)方法是與對象關聯(lián)在一起的,必須創(chuàng)建一個對象后,才可以在該對象上進行方法調(diào)用,而靜態(tài)方法調(diào)用不需要創(chuàng)建對象,也就是說,當一個靜態(tài)方法被調(diào)用時,如果從一個static方法中發(fā)出對非static方法的調(diào)用,那么非靜態(tài)方法關聯(lián)到哪個對象上呢?這個邏輯無法成立。

static方法是靜態(tài)方法,是屬于類的方法;

非static方法是屬于對象的方法,所以要想在static方法中調(diào)用非static方法要先創(chuàng)建一個對象,再由這個對象來調(diào)用。 本質是JVM加載順序決定的,加載static方法的時候非靜態(tài)方法還沒有初始化,當然不能調(diào)用了

靜態(tài)變量和實例變量的區(qū)別?

1)在語法定義上的區(qū)別:

靜態(tài)變量前要加static關鍵字,而實例變量前則不加

2)在程序運行時的區(qū)別:

實例變量是屬于某個對象的屬性,必須創(chuàng)建了實例對象,其中的實例變量才會被分配內(nèi)存空間,才可以使用這個實例變量 靜態(tài)變量不屬于某個實例對象,而是屬于類,所以也稱為類變量,只要程序加載了類的字節(jié)碼,不用創(chuàng)建任何實例對象,靜態(tài)變量就會分配內(nèi)存空間,而且只分配一次,靜態(tài)變量就可以被使用了??傊瑢嵗兞勘仨殑?chuàng)建后才可以通過這個對象來使用,靜態(tài)變量則直接可以使用類名來調(diào)用。

Integer和int的類型 Integer是int提供的封裝類,從java5之后引入了自動裝箱、拆箱機制,使得兩者可以相互轉換,而int是java基本數(shù)據(jù)類型 Integer默認值是null,而int默認值是0 Integer是對象,用一個引用指向這個對象,而int是基本類型,直接存儲數(shù)據(jù)。

Integer提供了好多與整數(shù)相關的操作方法,例如:將一個字符串轉換成整數(shù)等. Integer會有緩存

這里寫圖片描述

String、StringBuilder、StringBuffer:

1.執(zhí)行速度方面,StringBuilder大于StringBuffer大于String String最慢的原因:String為字符串常量,而StringBuilder和StringBuffer均為字符串變量,即String對象一旦被創(chuàng)建后該對象是不可更改的,但后兩者的對象是變量,是可以更改的

2.線程安全:StringBuilder是線程不安全的,而StringBuffer是線程安全的(StringBuffer中很多方法帶有synchronized關鍵字)–同步關鍵字

3.總結:String:適用于少量字符串操作的情況; StringBuilder:適用于在單線程下在字符緩沖區(qū)進行大量操作的情況; StringBuffer:適用于在多線程下在字符緩沖區(qū)進行大量操作的情況

String中的常用方法有哪些: length()、isEmpty()、split()、toLowerCase()、toUpperCase() subString()、trim()、concat(“abc”)、contains(“a”)

java程序初始化的順序是什么樣子的?

一般遵循三個原則:

1.靜態(tài)變量優(yōu)先于非靜態(tài)變量初始化,其中靜態(tài)變量只初始化一次,而非靜態(tài)變量可能會初始化很多次

2.父類優(yōu)先子類進行初始化

3.按照成員變量定義順序進行初始化,即使變量定義散布于方法之中,它們依然在方法調(diào)用之前(包括構造函數(shù))先初始化。 父類靜態(tài)字段初始化 父類靜態(tài)代碼塊 子類靜態(tài)字段初始化 子類靜態(tài)代碼塊 父類普通字段初始化 父類構造代碼塊({//代碼}) –優(yōu)先于構造函數(shù)執(zhí)行 父類構造函數(shù) 子類普通字段初始化 子類構造代碼塊 子類構造函數(shù)

很明顯的看出,static字段,代碼塊的在執(zhí)行順序優(yōu)先于非sattic、代碼塊,這是因為靜態(tài)域是屬于類的,在類加載后就一直存在,而普通域則需要創(chuàng)建對象才能訪問。而在創(chuàng)建對象時,要先加載父類,然后再加載子類,因此父類的靜態(tài)字段初始化和靜態(tài)代碼塊執(zhí)行優(yōu)先于子類

應用:單例模式的設計(只創(chuàng)建一次對象的目的)

簡單介紹反射機制?

反射是框架設計的靈活 使用的前提條件:必須先得到代表字節(jié)碼的Class,Class類用于表示.class文件(字節(jié)碼)

什么是反射機制? java反射是在運行狀態(tài)中,對任意一個類,都能夠知道這個類的所有屬性和方法,對于任何一個對象,都能夠調(diào)用它的任意一個屬性和方法,這種動態(tài)獲取信息以及動態(tài)調(diào)用對象的方法的功能稱為java的反射機制

要想剖析一個類,必須首先獲得該類的字節(jié)碼文件對象,而剖析使用的就是Class類中的方法,所以先要獲得每一個字節(jié)碼文件對應的Class類型的對象

Class是反射的基石

1.Class是一個類,一個描述類的類,封裝了描述方法的Method,描述字段的Filed,描述構造器的Constructor等屬性,通過反射可以得到類的各個成分。

2.對于每個類而言,JRE都為其保留一個不變的Class類型的對象,一個Class對象包含了特定某個類的有關信息。

3.Class對象只能由JVM創(chuàng)建

4.一個類在JVM中只有一個Class實例 5.反射相關的類:java.lang.reflect包下

獲取Class對象的三種方式:

1.Object—getClass(); 通過已知對象獲取

2.任何數(shù)據(jù)類型(包括基本數(shù)據(jù)類型)都有一個靜態(tài)的Class屬性 通過類名.Class

3.通過Class的靜態(tài)方法: Class.forName(String calssName):最常用

這里寫圖片描述

應用:使用JDBC連接數(shù)據(jù)庫的時候,都使用的反射,一般都是通過配置文件書寫連接哪個數(shù)據(jù)庫,比如:mysql、oracle等,以及對應的關鍵信息

簡單來說: 反射就是把各種java類中的各種成分映射成一個個的java對象 成員變量、方法、構造方法、構造方法、包等信息 利用反射技術可以對一個類進行剖析,把各個組成部分映射成一個個對象 核心類: Class:代表一個類 Constructor類:代表類的構造方法 Filed類:代表類的成員變量 Method:代表類的方法

這里寫圖片描述

這里寫圖片描述

這里寫圖片描述

這里寫圖片描述

這里寫圖片描述

反射中,Class.forName和classloader的區(qū)別:

相同點:java中Class.forName()和classloader都可以用來對類進行加載

不同點:

class.forName除了將類的.class文件加載到jvm中之外,還會對類進行解釋,執(zhí)行類中的static塊 而classloader只做一件事情,就是將.class文件加載到jvm中,不會執(zhí)行static中的內(nèi)容,只有在newinstance才會去執(zhí)行static塊。

calssforName(name,initialize,loader)帶參函數(shù)也可以控制是否加載static塊,并且只有調(diào)用了newinstance才會構造函數(shù),來創(chuàng)建類的對象,jvm底層可以控制—–一般不會干預

這里寫圖片描述

Try catch finally的問題 當在try、catch中有return時,finally是否會執(zhí)行?

總結:

1.不管有沒有異常,finally中的代碼都會執(zhí)行

2.當try、catch中有return語句時,finally中的代碼依然會繼續(xù)執(zhí)行

3.finally是在return后面的表達式運算之后執(zhí)行的,此時并沒有返回運算后的值,而是把值保存起來,不管finally對該值做了任何改變,返回的值都不會改變,依然返回保存起來的值,也就是說方法的返回值是在finally運算之前就確定了的。

4.如果return的數(shù)據(jù)是引用數(shù)據(jù)類型,而在finally中對該引用數(shù)據(jù)類型的屬性值的改變起作用,try 中return返回的就是finally中改變后的屬性值

5.finally代碼最好不要包含return,程序會提前退出,也就是說返回的值不是try catch中的值

先執(zhí)行try中的語句,包括return后面的表達式 有異常時,先執(zhí)行catch中的語句,包括return 后面的表達式; 然后執(zhí)行fianlly中的語句,如果finally里面有return語句,會提前退出 最后執(zhí)行try 中的return,有異常執(zhí)行catch中return;

在執(zhí)行try catch 中的return之前一定會執(zhí)行finally中的代碼(如果finally存在),如果finally中有return語句,就會執(zhí)行finally中的return方法,所以finally中的return語句一定會被執(zhí)行的,比那一起吧finally中的retrun語句標識為一個warning

final、finally、finalize final是最終的意思,表示不能被改變,可用于成員變量、方法和類 修飾變量:變量一旦被初始化不可改變 修飾方法:方法不能被覆蓋 修飾類:類不能夠被繼承

finally:異常處理關鍵字,finally中的主體總會執(zhí)行,無論異常發(fā)生與否 finalize:類的finalize方法,可以告訴垃圾回收器應該執(zhí)行的操作,該方法從Object繼承而來,在從堆中永久刪除對象之前,調(diào)用該對象的finalize方法

注意:無法確切的保證垃圾回收器何時調(diào)用該方法,也無法保證調(diào)用不同對象方法的順序,

常見異常:

這里寫圖片描述

finally:finally語句塊總是會被執(zhí)行,它主要用于回收在try中打開的物理資源,如數(shù)據(jù)庫連接,網(wǎng)絡連接,只有finally執(zhí)行完成之后,才會回來執(zhí)行try catch 塊中的return語句或者throw語句,如果finally中使用了throw或者return終止方法的語句,則就不會跳回執(zhí)行,直接終止

throw:拋出異常 throws:用在方法簽名中,用于聲明該方法可能拋出的異常

java中的異常框架: Throwable (Interface) Error Exception RunTimeException

Throwable: 它是java語言中所有錯誤或異常的超類 它包含兩個子類:Error和Exception Throwable包含了其線程創(chuàng)建時執(zhí)行線程執(zhí)行堆棧的快照,它提供了printStackTrance()等接口用于獲取堆棧跟蹤數(shù)據(jù)信息

Exception 以及子類是Throwable的一種形式,它指出了合理的應用程序想要捕獲的條件

3.RuntimeException 是那些可能在java虛擬機正常運行期間拋出的異常的超類 編譯器不會檢查運行時異常 如果代碼產(chǎn)生RuntimeException,則需要通過修改代碼避免。

Error:和Exception一樣,也是Throwable的子類,它用于指示合理程序不應該出現(xiàn)試圖捕獲的嚴重問題,編譯器也不會檢查

java異常分為兩類:

1,被檢查的異常(Checked Exception) Exception中除了運行時異常就都稱為編譯異常

2.運行時異常(RuntimeException)—RuntimeException以及其子類 3.錯誤(Error) 內(nèi)存溢出

總結

以上所述是小編給大家介紹的java基面試礎知識詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

相關文章

  • 關于文件合并與修改md5值的問題

    關于文件合并與修改md5值的問題

    這篇文章主要介紹了關于文件合并與修改md5值的問題,使用本博客的方法,不僅僅可以修改md5值,還可以達到隱藏文件的目的,需要的朋友可以參考下
    2023-04-04
  • Dubbo?LoadBalance基于權重的隨機負載均衡算法提高服務性能

    Dubbo?LoadBalance基于權重的隨機負載均衡算法提高服務性能

    這篇文章主要為大家介紹了Dubbo?LoadBalance基于權重的隨機負載均衡算法提高服務性能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>
    2023-10-10
  • 深入理解java自旋鎖

    深入理解java自旋鎖

    這篇文章主要介紹了如何深入理解java自旋鎖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,下面和小編來一起學習下吧
    2019-05-05
  • Java?延時隊列及簡單使用方式詳解

    Java?延時隊列及簡單使用方式詳解

    這篇文章主要介紹了Java延時隊列簡單使用方式,通過本文學習知道延時隊列是什么可以用來干什么,本文通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-08-08
  • 圖文詳解JAVA實現(xiàn)哈夫曼樹

    圖文詳解JAVA實現(xiàn)哈夫曼樹

    所謂哈夫曼樹就是要求最小加權路徑長度,這是什么意思呢?簡而言之,就是要所有的節(jié)點對應的路徑長度(高度-1)乘以該節(jié)點的權值,然后保證這些結果之和最小。下面這篇文章就給大家詳細介紹
    2016-08-08
  • SparkStreaming-Kafka通過指定偏移量獲取數(shù)據(jù)實現(xiàn)

    SparkStreaming-Kafka通過指定偏移量獲取數(shù)據(jù)實現(xiàn)

    這篇文章主要為大家介紹了SparkStreaming-Kafka通過指定偏移量獲取數(shù)據(jù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Java+Swing實現(xiàn)中國象棋游戲

    Java+Swing實現(xiàn)中國象棋游戲

    這篇文章將通過Java+Swing實現(xiàn)經(jīng)典的中國象棋游戲。文中可以實現(xiàn)開始游戲,悔棋,退出等功能。感興趣的小伙伴可以跟隨小編一起動手試一試
    2022-02-02
  • springboot swagger2注解使用的教程

    springboot swagger2注解使用的教程

    這篇文章主要介紹了springboot swagger2注解使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • Spring AspectJ 實現(xiàn)AOP的方法你了解嗎

    Spring AspectJ 實現(xiàn)AOP的方法你了解嗎

    這篇文章主要為大家介紹了Spring AspectJ 實現(xiàn)AOP的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • MybatisPlus實現(xiàn)數(shù)據(jù)權限隔離的示例詳解

    MybatisPlus實現(xiàn)數(shù)據(jù)權限隔離的示例詳解

    Mybatis Plus對Mybatis做了無侵入的增強,非常的好用,今天就給大家介紹它的其中一個實用功能:數(shù)據(jù)權限插件,感興趣的可以跟隨小編一起了解下
    2024-04-04

最新評論