編譯期只會檢查實例聲明的類型和強制轉化的類型是否存在extend/implement關系,因為從聲明變數類型,到強制轉化變數的類型之間可能存在編譯期無法解析的代碼,雖然示例中只是一個簡單的賦值,肉眼就可以判斷實際類型,但是對於編譯器來說是無法判斷的,舉個簡單的例子:
public static void foo(boolean flag) {
Useful xx = flag ? new Useful() : new MoreUseful();
((MoreUseful)xx).g(); // 編譯器如何判斷此處是否有錯誤?
// flag=false的時候可以正常運行,就不能說這里有編譯期錯誤}public static void main(String[] args) {
foo(true);
foo(false);
}
『貳』 C語言中編譯 生成 調試 測試 運行各是什麼意思有什麼區別
C語言中編譯 生成 調試 測試 運行的區別如下:
區別一:
從編譯方面來看:
編譯依賴於編譯器,英文是compile, vc中這一過程是將源代碼轉換成目標文件,如:obj文件,rc文件等。
區別二:
從生成方面來看:
生成指的是連接的過程,英文是build,依賴於鏈接器。vc中在這一階段將所有的目標文件和所有需要用到的組件組合成一個整體,例如需要生成的是windows系統下的PE可執行文件,鏈接器會依照特定格式將目標文件組合,最後生成PE格式的,exe或dll文件。
區別三:
從調試方面來看:
調試是所有或部分代碼編寫完成後,讓程序在調試器中運行,用這種手段對程序進行分析,找出並修正潛在問題。
區別四:
從運行方面來看:
運行就是讓程序在系統中運行。
C語言的介紹:
C語言是目前流行的通用程序設計語言,是計算機專業人員和計算機愛好者開發軟體的首選開發工具。C語言源程序必須經過某種編譯工具翻譯成為目標機器語言程序才能夠在計算機上執行。
然而隨著程序編寫規模的擴大,順利編寫出正確的程序絕非一件容易的事情,早期的許多編譯工具僅僅提供翻譯功能,已滿足不了應用的要求,編程人員需要-種功能全面並高度集成的編譯環境。
程序是一段具有一定功能的代碼,編寫程序的目的是解決問題。當程序人員寫完程序後,其實並不起作用,只有當編寫的程序經過一系列的處理後,能夠解決問題時。
序才成為真正的程序,這一系列的處理過程,-般就是編輯、編譯、連接、調試與運行等。目前最成熟的C語言集成環境主要有Turbo C2.0和Turbo C 3.0( 簡稱TC30)或Borland C++3.1( 簡稱BC31)以及Visual C++ 6.0。
『叄』 JDK的編譯和運行程序命令是什麼個針對什麼類型文件
javac針對.java文件,編譯源代碼為位元組碼文件
java針對.class文件,JVM解釋執行程序
『肆』 C語言文件的編譯與執行的四個階段並分別描述
開發C程序有四個步驟:編輯、編譯、連接和運行。
任何一個體系結構處理器上都可以使用C語言程序,只要該體系結構處理器有相應的C語言編譯器和庫,那麼C源代碼就可以編譯並連接到目標二進制文件上運行。
1、預處理:導入源程序並保存(C文件)。
2、編譯:將源程序轉換為目標文件(Obj文件)。
3、鏈接:將目標文件生成為可執行文件(EXE文件)。
4、運行:執行,獲取運行結果的EXE文件。
(4)運行類型和編譯類型擴展閱讀:
將C語言代碼分為程序的幾個階段:
1、首先,源代碼文件測試。以及相關的頭文件,比如stdio。H、由預處理器CPP預處理為.I文件。預編譯的。文件不包含任何宏定義,因為所有宏都已展開,並且包含的文件已插入。我歸檔。
2、編譯過程是對預處理文件進行詞法分析、語法分析、語義分析和優化,生成相應的匯編代碼文件。這個過程往往是整個程序的核心部分,也是最復雜的部分之一。
3、匯編程序不直接輸出可執行文件,而是輸出目標文件。匯編程序可以調用LD來生成可以運行的可執行程序。也就是說,您需要鏈接大量的文件才能獲得「a.out」,即最終的可執行文件。
4、在鏈接過程中,需要重新調整其他目標文件中定義的函數調用指令,而其他目標文件中定義的變數也存在同樣的問題。
『伍』 運行時和編譯時有沒有什麼區別
運行時 編譯連接並運行 大概意思檢查錯誤並運行,如果錯了,則返回重新編譯,通過則運行
編譯時 編譯連接 檢查錯誤,並不運行,不管對錯,都返回編譯狀態.
關於SIZEOF()
SIZEOF() ()里加數據類型,則計算此數據類型所佔的內存位元組數.
如 SIZEOF( int ) 計算int型所佔的內存位元組數.
SIZEOF() ()里還可以加字元串或一個字元串數組,計算這個字元串的長度,即所佔的內存位元組數.
如 SIZEOF(abcd) 計算abcd這個字元串所佔的內存位元組數,
注意:
計算結果為5,字元型每個字元佔一個位元組,還有一個隱藏的\0,用來結束字元串的,所以要多加一個位元組.
『陸』 關於JAVA多態的編譯時類型與執行時類型的一個問題.
多態的對象,在編譯器為sub分配內存空間的時候執行的父類的屬性,
運行期,也就是調用方法的時候,指定是子類的行為
這是因為,對象的屬性是在聲明時指定,方法數據對象的行為
『柒』 C++中什麼是編譯時,什麼是運行時,二者有何區別
編譯階段主要進行語法的檢查,無誤。將程序代碼轉換成目標代碼(二進製表示,打開看不懂),沒有和操作系統進行連接,不能運行。完成連接後,程序能夠進入系統運行。
運行時,一定是編譯過的,沒有語法錯誤。編譯時,沒有生成目標文件,可能有語法錯誤。
『捌』 編譯時和運行時對象分別是什麼數據類型
編譯時被當做NSString 的實例來處理,運行時其isa指向的是[NSData Class],故運行時該實例只能收到NSData的固有實例方法(或者自己寫的Category),如果對該實例發送諸如 testObject stringByAppendingString:@"哈哈哈" ,編譯時不會報錯只會給出黃色警告,但是運行時會直接崩潰,錯誤信息可能是
-[_NSZeroData stringByAppendingString:]: unrecognized selector sent to instance 0x8946440
故可以看出NSData 在運行時的真實類型是_NSZeroData(這里用的NSData alloc init,這里是個空的NSData,所以是ZeroData,不是說所有的)
如果對該實例發送諸如 testObject
::這類消息 編譯器會直接給出紅色錯誤,無法運行,但其實這個實例是有這個方法的。
這里如果改為 id testObject=[[NSData alloc]init];
那麼發送NSString 的方法仍然會崩潰,發送NSData的實例方法則完全正常。並且兩種情況編譯器都不會再給出警告或錯誤。
『玖』 java運行時類型和編譯時類型都是什麼意思
運行時類型是 程序運行過程中再判斷是什麼類型,
編譯時類型是 在寫好代碼後,編譯時已經確定是什麼類型了