編譯期java
classInitalizedClass{
static{
System.out.println("!");
}
publicstaticintinititalize_varible=1;
}
{
publicstaticvoidmain(String[]args){
System.out.println(InitalizedClass.inititalize_varible);
}
}
上面的結果是:
!
1
classInitalizedClass{
static{
System.out.println("!");
}
//和上面的例子唯一的差異就是此處的變數INITIALIZED_VARIBLE被聲明為final
_VARIBLE=1;
}
{
publicstaticvoidmain(String[]args){
System.out.println(InitalizedClass.INITIALIZED_VARIBLE);
}
}
上面的結果是:
1
為什麼兩個例子執行結果不一樣,原因是第二個例子中的INITIALIZED_VARIBLE為編譯期常量,它不會導致類的初始化的
㈡ 請高手解釋下java編譯期錯誤與運行期錯誤
編譯錯誤就是編譯時候報的錯,你寫的java程序總不能馬上就跑,先要編譯成class吧,如果我寫的程序是「我是大笨蛋」,那當然是不符合語法的,於是編譯器會報錯。如果我寫的語法是正確的,那麼編譯器就會把他轉換成適當的class文件,然後你就可以運行了,運行中再出錯就是運行錯誤了。
㈢ java中創建對象時,在編譯期和運行期的情形相同嗎
就是創建的父類的對象了,因為你用子類創建對象可是復制給了父類變數,那樣時候子類創建的對象失去自己的特性,於是轉換父類的啊。。。所以創建的是父類的對象了。。。
㈣ 在java中,什麼叫編譯期間完全未知的classes
簡單的來說,比如你用介面或者父類的引用,將來由spring或者ioc/di相關的技術注入一個子類的實現給它,那麼它在編譯期間,就是完全未知的。
所謂的ioc/di其實也就是通過反射的機制實現的,只是可以交給框架來做,也可以自己手動反射,因為你要new的那個類在編譯的時候只是一個配置文件,或者只是一個字元串,JVM是沒辦法知道它具體是哪個類的,當然這個類有可能被轉載在JVM中了(也有可能沒有,如EJB中對於遠程對象的調用),但是具體的實現要等被注入之後(或者說反射之後)才能知道。也就是要在運行期間才知道。所以對於編譯期是未知的。
不知道我這么說你能不能明白,你可以再繼續查反射方面的資料,或者閱讀SSH相關的資料,能幫助你更好的理解反射。你也可以去看一下JVM原理,可以輔助理解編譯期,運行期。
希望能幫到你。
㈤ 請問java中的編譯期和運行期有什麼區別
編譯時是調用檢查你的源程序是否有語法錯誤,如果沒有就將其翻譯成位元組碼文件。即.class文件。
運行時是java虛擬機解釋執行位元組碼文件。
㈥ java中是什麼時候分配內存編譯期還是運行期
這肯定是運行期
編譯的時候,跟內存都沒關系,完全是java代碼轉成位元組碼的過程,你寫的代碼沒有任何計算、運行,所以根本談不上內存的分配。
㈦ java程序編譯時
我把它保存為TwoListenInner.java 用javac編譯時沒問題啊。還能執行
㈧ java 程序如何得到編譯時間 像C 里的 __DATE__ 一樣 printf("%s", __DATE__);
寫個批處理,在輸入兩次當前時間的命令之間加一句javac
㈨ java中在編譯期就被確定是什麼意思
我的理解是:編譯器運行的東東是代碼是否否何規范,類似於你寫個void寫錯了寫成vod這時編譯器就會報錯提醒你;
而運行期運行的就是代碼的邏輯關系了,比如說你使用一個數組,未對他進行初始化分配空間,運行時就會出現空指針異常。
理解的較淺,不知能否幫到你。
㈩ java 中的編譯期常量是什麼使用它又什麼風險
編譯期常量就是所謂的 public final static 常量。
由於在編譯時就確定了值,在使用的場合會直接寫成值。而不是直接到原來的類中讀取。
這樣會有一個問題。 如果 類 A 提供了常量 類B使用了常量。並都進行了編譯。
然後,修改了類A的源碼,調用系統進行編譯。
系統發現類A是新的代碼,編譯了,類B是舊的代碼,就不進行編譯,使用舊的類。
由於類B中直接編譯進了舊的值,導致類A的修改無法反映到類B中。
這樣造成了風險。