一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Java的靜態(tài)類型檢查示例代碼詳解

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

2021-02-07 12:15tiantianbianma Java教程

本文將使用幾個代碼示例,深入講解Java中的類型檢查機(jī)制。一旦完全理解了本文的例子,就完全掌握了Java中的靜態(tài)類型檢查,感興趣的朋友一起看看吧

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

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

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

Java使用靜態(tài)類型檢查在編譯期間分析程序,確保沒有類型錯誤。基本的思想是不要讓類型錯誤在運(yùn)行期間發(fā)生。

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

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

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

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

代碼示例

假設(shè)我們有如下的兩個類,類Super 和 類Suber,而且他們具有如下繼承關(guān)系:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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對象,所以,在編譯期間,編譯期認(rèn)為它返回的是一個 Super對象。但是,在運(yùn)行期間,該語句實(shí)際返回的是一個 Suber對象,因?yàn)?Suber繼承了Super的me()方法,并返回了自身對象(多態(tài)性)。

靜態(tài)檢查

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

?
1
2
// 錯誤
new Suber().me().doSuber();

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

?
1
2
// 正確
new Suber().me().doSuper();

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

?
1
2
// 正確
((Suber) new Suber().me()).doSuber();

深入擴(kuò)展

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

?
1
2
3
4
5
class Brother extends Super{
public void doBad() {
System.out.println("好好學(xué)習(xí)");
}
}

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

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

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

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

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

總結(jié)

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

原文鏈接:http://www.tiantianbianma.com/java-static-type-check.html/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲美女aⅴ久久久91 | 国产精品一区牛牛影视 | 欧美成人免费观看久久 | 亚洲日本中文字幕在线2022 | 国产成人无精品久久久 | 能播放18xxx18女同 | se婷婷| gay勾搭直男com | 91好色| 91热国内精品永久免费观看 | 久久综久久美利坚合众国 | 亚洲国产欧美另类 | 亚洲一级特黄 | 公园暴露娇妻小说 | 久久精品国产久精国产果冻传媒 | 久久亚洲精选 | 亚洲国产日韩成人综合天堂 | 国产在线观看91 | 操碰免费视频 | 国产成人亚洲影视在线 | 色多多多| 欧乱色国产精品兔费视频 | 成人亚洲欧美日韩在线观看 | 日本免费不卡在线一区二区三区 | 欧美日韩在线一区二区三区 | 四虎精品成人免费观看 | vomoulei成人舞蹈 | 亚洲精品91在线 | 国产草草视频 | 精品一区二区三区高清免费观看 | 国内精品久久久久久中文字幕 | 日本道三区播放区 | 亚洲国产成人久久午夜 | 国产午夜免费不卡精品理论片 | 免费看h片的网站 | 韩国三级视频网站 | 成人香蕉xxxxxxx | 天天做日日做天天添天天欢公交车 | 久久久久国产一级毛片高清片 | 色悠久久久久综合网小说 | 女色在线观看免费视频 |