Java中靜態類型檢討是若何停止的實例思緒詳解。本站提示廣大學習愛好者:(Java中靜態類型檢討是若何停止的實例思緒詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中靜態類型檢討是若何停止的實例思緒詳解正文
以下內容來自維基百科,關於靜態類型檢討和靜態類型檢討的說明:
•靜態類型檢討:基於法式的源代碼來驗證類型平安的進程;
•靜態類型檢討:在法式運轉時代驗證類型平安的進程;
Java應用靜態類型檢討在編譯時代剖析法式,確保沒有類型毛病。根本的思惟是不要讓類型毛病在運轉時代產生。
以下代碼是一個例子,懂得了他,你會更好的懂得Java靜態類型檢討是若何任務的。
代碼示例
假定我們有以下類,A和B,B繼續A。
class A { A me() { return this; } public void doA() { System.out.println("Do A"); } } class B extends A { public void doB() { System.out.println("Do B"); } }
起首,挪用new B().me()將前往甚麼呢?A對象照樣B?
me()辦法被聲明將前往A對象,所以在編譯時代,編譯器只曉得它前往A對象。但是,它在運轉時代卻前往了B對象,由於B繼續了A的辦法前往了本身。
靜態類型檢討是若何任務的?
以下代碼行長短法的,即便辦法doB()是被B對象挪用的。成績在於它的援用類型是A,在編譯器件,編譯器不曉得它的真實類型,所以將它當作A類型。
//illegal new B().me().doB();
所以,只要上面的代碼是可以被挪用的:
//legal new B().me().doA();
但是,我們可以將其強迫類型轉換成B,以下代碼:
//legal ((B) new B().me()).doB();
接上去,我們添加一個C類:
class C extends A{ public void doBad() { System.out.println("Do C"); } }
那末,上面的代碼語句將經由過程靜態類型檢討:
//legal ((C) new B().me()).beBad();
編譯器不曉得它的真實類型,然則在運轉時代將會拋出異常,由於B類型不克不及轉換成C類型;
以上所述是小編給年夜家引見的Java中靜態類型檢討是若何停止的實例思緒詳解的相干常識,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!