導航:首頁 > 源碼編譯 > java編譯和運行時

java編譯和運行時

發布時間:2022-04-20 06:07:21

java編譯和運行。

首先cd到你java文件存放的目錄,比如你的java文件的名稱為helloworld.java,在cmd中輸入javac
helloworld.java
敲擊回車,這個命令會將你的java文件編譯成class文件,然後在cmd框中輸入java
helloworld敲擊回車就能運行你的java文件輸出結果

❷ 求教JAVA編譯與運行的區別。

編譯只是編譯成了位元組碼,就是可執行的.class文件
運行時識別,主要是java的RTTI(運行時類型識別)機制和反射機制,而兩者之間的區別在於:
」對RTTI來說,編譯器在編譯期打開和檢查.class文件。(換句話說,我們可以用「普通」的方式調用一個對象的所有方法。),而對於反射機制來說,.class文件在編譯期是不可獲取的,所以是在運行期打開和檢查.class文件。「
但是同樣的,反射也需要載入這個類的Class對象,所以那個類的class對象對於jvm必須是可取的的,比如在本地機器上,或者通過網路取得,比如取得一串位元組串。
具體的內容可以參考《Thinking
in
java》的」類型識別「那一章,講的比較詳細的

❸ Java創建對象是在編譯時還是在運行時

運行期。編譯好的java程序(即.class文件)需要運行在JVM中。程序,無論代碼還是數據,都需要存儲在內存中。JVM為java程序提供並管理所需要的內存空間。JVM內存分為"堆"、"棧"、"方法區"三個區域,分別用於存儲不同數據。首先JVM會檢查創建這個對象的類是否是一個以前從沒有見過的類型,如果不是,JVM將為其分配內存,如果是,java虛擬機將調用具體的ClassLoader找到對應的.class文件,並將這個文件的內容讀到內存中去。
1)堆:
1.1)用於存儲所有new出來的對象(包括成員變數)。
1.2)垃圾:沒有任何引用所指向的對象。
垃圾回收器(GC)不定時到內存中清掃垃圾,
並不一定一發現垃圾就立刻回收,
回收過程是透明的(看不到的),
通過調用System.gc()可以建議虛擬機盡快調度GC來回收。
1.3)內存泄漏:不再使用的內存沒有被及時的回收。
建議:不再使用的對象,及時將引用設置為null。
1.4)成員變數的生命周期:
創建對象時存儲在堆中,對象被回收時一並被回收。
2)棧:
2.1)用於存儲正在調用的方法中的所有局部變數(包括參數)
2.2)JVM會為每一個正在調用的方法分配一塊對應的棧幀,
棧幀中存儲方法中的局部變數(包括參數),
方法調用結束時,棧幀被清除,局部變數一並被清除。
2.3)局部變數的生命周期:
調用方法時存在棧中,方法結束時與棧幀一並被清除。
3)方法區:
3.1)用於存儲.class位元組碼文件(包括方法)。
3.2)方法只有一份,通過this來區分具體的對象。
既然對象在堆中創建,因此Java創建對象是在運行時,而不是編譯時。

❹ Java編譯時註解和運行時註解有什麼區別

區別如下:
1)編譯時註解,註解內容只存在源文件,在編譯期間將被丟棄,不能通過JVM獲取註解信息;
2)運行時註解,編譯時被存儲在.class位元組碼文件,可以通過JVM運行時獲取註解信息(且只限於被RUNTIME註解的註解)。

❺ 請問java中的編譯期和運行期有什麼區別

編譯時是調用檢查你的源程序是否有語法錯誤,如果沒有就將其翻譯成位元組碼文件。即.class文件。
運行時是java虛擬機解釋執行位元組碼文件。

❻ 簡述JAVA程序的編輯編譯和運行過程

第一步(編譯): 創建完源文件之後,程序會先被編譯為.class文件。Java編譯一個類時,如果這個類所依賴的類還沒有被編譯,編譯器就會先編譯這個被依賴的類,然後引用,否則直接引用,這個有點象make。

如果java編譯器在指定目錄下找不到該類所其依賴的類的.class文件或者.java源文件的話,編譯器話報「cant find symbol」的錯誤。

第二步(運行):java類運行的過程大概可分為兩個過程:1、類的載入 2、類的執行。需要說明的是:JVM主要在程序第一次主動使用類的時候,才會去載入該類。也就是說,JVM並不是在一開始就把一個程序就所有的類都載入到內存中,而是到不得不用的時候才把它載入進來,而且只載入一次。

特別說明:java類中所有public和protected的實例方法都採用動態綁定機制,所有私有方法、靜態方法、構造器及初始化方法<clinit>都是採用靜態綁定機制。而使用動態綁定機制的時候會用到方法表,靜態綁定時並不會用到。

(6)java編譯和運行時擴展閱讀:

Java整個編譯以及運行的過程相當繁瑣,本文通過一個簡單的程序來簡單的說明整個流程。

Java代碼編譯:是由Java源碼編譯器來完成;

Java位元組碼的執行:是由JVM執行引擎來完成

Java程序從源文件創建到程序運行要經過兩大步驟:

1、源文件由編譯器編譯成位元組碼(ByteCode)

2、位元組碼由java虛擬機解釋運行。因為java程序既要編譯同時也要經過JVM的解釋運行,所以說Java被稱為半解釋語言( "semi-interpreted" language)。

❼ java 編譯通過但是運行時錯誤

java編譯運行是2個步驟
先用javac編譯,然後用java命令運行,哪個步驟出錯自然就是什麼錯誤了
那就看是語法錯誤還是邏輯錯誤了,語法錯誤就是編譯時出錯,邏輯錯誤就是運行時出錯,邏輯錯誤比如說是演算法錯誤,比如判斷偶數寫成了%2==1這樣的

❽ 請問java程序在編譯和運行時有什麼區別,系統分別都會做什麼

Java程序的編譯
使用命令: javac *.java
編譯時,會將寫的.java文件(高級語言),生成相應的位元組碼文件.class文件(二進制代碼)
Java程序的執行
使用命令:java *
流程: 載入到 -- 連接 ---- 初始化 ...
運行時,首先會由將相應的.class文件,載入到內存中,並驗證.class文件的有效性,將相應類的Class載入到內存中,並對類中的靜態變數進行初始化操作,然後就由 主 類開始執行
具體的可以看一下 JVM 類載入過程,以及jVM的內存分配機制

❾ java編譯時類型和運行時類型該如何理解

編譯期只會檢查實例聲明的類型和強制轉化的類型是否存在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);
}

❿ java基礎:編譯時和運行時的區別

前者是java-->class文件轉換過程,後者是系統運行class文件的過程

閱讀全文

與java編譯和運行時相關的資料

熱點內容
源碼置入微信小程序 瀏覽:918
如何開一家少兒編程公司 瀏覽:953
光伏計算日照時用什麼app 瀏覽:234
計算階乘的python程序 瀏覽:47
傳奇如何選擇伺服器 瀏覽:574
英雄聯盟光輝和程序員哪個厲害 瀏覽:253
什麼是pojo編程 瀏覽:924
外掛編程視頻 瀏覽:133
學javaapp 瀏覽:12
客戶端無盤如何與伺服器連接 瀏覽:792
狙擊手命令 瀏覽:505
財務防雷指標公式源碼 瀏覽:877
mysql源碼解讀 瀏覽:247
安卓手機如何玩光遇ios版 瀏覽:918
單片機匯編語言C語言 瀏覽:109
雲伺服器4g多少錢一個 瀏覽:440
json雙引號java 瀏覽:402
javades加密演算法 瀏覽:76
程序員母親禮物 瀏覽:603
找裝修設計用什麼app 瀏覽:854