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

Java的靜態(tài)類型檢查示例代碼詳解

 更新時間:2017年11月20日 11:34:35   投稿:mrr  
本文將使用幾個代碼示例,深入講解Java中的類型檢查機制。一旦完全理解了本文的例子,就完全掌握了Java中的靜態(tài)類型檢查,感興趣的朋友一起看看吧

關于靜態(tài)類型檢查和動態(tài)類型檢查的解釋:

靜態(tài)類型檢查:基于程序的源代碼來驗證類型安全的過程;

動態(tài)類型檢查:在程序運行期間驗證類型安全的過程;

Java使用靜態(tài)類型檢查在編譯期間分析程序,確保沒有類型錯誤?;镜乃枷胧遣灰岊愋湾e誤在運行期間發(fā)生。

在各色各樣的編程語言中,總共存在著兩個類型檢查機制:靜態(tài)類型檢查和動態(tài)類型檢查。

靜態(tài)類型檢查是指通過對應用程序的源碼進行分析,在編譯期間就保證程序的類型安全。

動態(tài)類型檢查是在程序的運行過程中,驗證程序的類型安全。在Java中,編譯期間使用靜態(tài)類型檢查機制分析Java源代碼,可以提前發(fā)現(xiàn)Java中類型缺少的錯誤。這個機制的好處是,不讓錯誤的事情在運行時才被發(fā)現(xiàn)。本文,將使用幾個代碼示例,深入講解Java中的類型檢查機制。一旦完全理解了本文的例子,就完全掌握了Java中的靜態(tài)類型檢查。

深入分析Java的靜態(tài)類型檢查

代碼示例

假設我們有如下的兩個類,類Super 和 類Suber,而且他們具有如下繼承關系:

class Super {
Super me() {
return this;
}
public void doSuper() {
System.out.println("www.tiantianbianma.com");
}
}
class Suber extends Super {
public void doSuber() {
System.out.println("天天編碼");
}
}

首先,思考這個問題:”new Suber().me()” 的返回值是什么? 是一個 Super對象 還是一個 Suber對象?

這個 me() 方法被聲明為返回一個 Super對象,所以,在編譯期間,編譯期認為它返回的是一個 Super對象。但是,在運行期間,該語句實際返回的是一個 Suber對象,因為 Suber繼承了Super的me()方法,并返回了自身對象(多態(tài)性)。

靜態(tài)檢查

我們來看看常見的錯誤示例代碼:

// 錯誤
new Suber().me().doSuber();

這個語句在編譯時會報錯,雖然 “new Suber().me()” 返回的結(jié)果,本質(zhì)上是一個 Suber對象,Suber對象確實也具有 doSuber() 方法。但是,在編譯器看來,”new Suber().me()” 返回結(jié)果的引用類型是 Super,自然不能在Super類型的引用上調(diào)用該類型沒有定義的 doSuber() 方法。所以,我們可以改成如下的正確形式:

// 正確
new Suber().me().doSuper();

另外,既然 “new Suber().me()” 返回的結(jié)果確實是一個 Suber對象,如果想調(diào)用其特有的方法,我們可以使用強制類型轉(zhuǎn)換來完成功能:

// 正確
((Suber) new Suber().me()).doSuber();

深入擴展

現(xiàn)在,假設我們增加了一個如下所示的類:Brother

class Brother extends Super{
public void doBad() {
System.out.println("好好學習");
}
}

那么,大家思考一下如下的語句:

// 正確
((Brother) new Suber().me()).beBad();

這個語句真的是正確的嗎?實際上,該語句確實可以通過靜態(tài)類型檢查和正確編譯。畢竟,編譯器不知道 “new Suber().me()” 的實際類型。但是,該語句在運行時出拋出如下的錯誤:

java.lang.ClassCastException: Suber cannot be cast to Brother

原因很簡單,兩個不存在任何繼承關系的類(Suber和Brother)不可以做類型轉(zhuǎn)換。

總結(jié)

以上所述是小編給大家介紹的Java的靜態(tài)類型檢查示例代碼詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • SpringBoot停止啟動時測試檢查rabbitmq操作

    SpringBoot停止啟動時測試檢查rabbitmq操作

    這篇文章主要介紹了SpringBoot停止啟動時測試檢查rabbitmq操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java實現(xiàn)簡單的遞歸操作方法實例

    Java實現(xiàn)簡單的遞歸操作方法實例

    這篇文章主要給大家介紹了關于Java實現(xiàn)簡單的遞歸操作的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • 關于MVC的dao層、service層和controller層詳解

    關于MVC的dao層、service層和controller層詳解

    這篇文章主要介紹了關于MVC的dao層、service層和controller層詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java八種基本變量作為類的成員變量的默認值操作

    Java八種基本變量作為類的成員變量的默認值操作

    這篇文章主要介紹了Java八種基本變量作為類的成員變量的默認值操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • IDEA?database和datagrip無法下載驅(qū)動問題解決辦法

    IDEA?database和datagrip無法下載驅(qū)動問題解決辦法

    這篇文章主要給大家介紹了關于IDEA?database和datagrip無法下載驅(qū)動問題的解決辦法,文中通過代碼介紹的非常詳細,對大家學習或者使用idea具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-03-03
  • SpringBoot中的WebSocketSession原理詳解

    SpringBoot中的WebSocketSession原理詳解

    這篇文章主要介紹了SpringBoot中的WebSocketSession原理詳解,傳統(tǒng)的?HTTP?協(xié)議是無法支持實時通信的,因為它是一種無狀態(tài)協(xié)議,每次請求都是獨立的,無法保持連接。為了解決這個問題,WebSocket?協(xié)議被引入,需要的朋友可以參考下
    2023-07-07
  • JAVA集合框架工具類自定義Collections集合方法

    JAVA集合框架工具類自定義Collections集合方法

    今天小編就為大家分享一篇關于JAVA集合框架工具類自定義Collections集合方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Java并發(fā)之Phaser的全面解析詳解

    Java并發(fā)之Phaser的全面解析詳解

    Phaser是Java中一個靈活的同步工具,其優(yōu)點在于支持多階段的任務拆分與同步,并且能夠動態(tài)地注冊與注銷參與者,下面我們就來深入了解一下Phaser的應用吧
    2024-02-02
  • java中Hutool工具類的常見使用場景詳解

    java中Hutool工具類的常見使用場景詳解

    在日常開發(fā)中,我們會使用很多工具類來提升項目開發(fā)的速度,而國內(nèi)用的比較多的 Hutool 框架,就是其中之一,本文我們就來介紹一下Hutool的具體使用吧
    2023-12-12
  • 使用Post方法模擬登陸爬取網(wǎng)頁的實現(xiàn)方法

    使用Post方法模擬登陸爬取網(wǎng)頁的實現(xiàn)方法

    下面小編就為大家?guī)硪黄褂肞ost方法模擬登陸爬取網(wǎng)頁的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03

最新評論