導航:首頁 > 源碼編譯 > java類編譯載入

java類編譯載入

發布時間:2022-04-13 21:08:30

java中類的載入是在什麼時候做的

樓上的負責一點好么,類載入是在編譯的時候?載入一個類需要用到載入器,
你程序都沒運行,jvm都沒啟動,哪來的載入器,你拿什麼去載入一個類?
類載入的時候是運行程序時 它就載入了,至於編譯,你用IDE,是你一保存,它就給編譯好了。

② java重新載入class文件

Java類的載入是動態的,它並不會一次性將所有類全部載入後再運行,而是保證程序運行的基礎類(像是基類)完全載入到jvm中,至於其他類,則在需要的時候才載入。這當然就是為了節省內存開銷。
Java的類載入器有三個,對應Java的三種類:
Bootstrap Loader // 負責載入系統類 (指的是內置類,像是String,對應於C#中的System類和C/C++標准庫中的類)
|
- - ExtClassLoader // 負責載入擴展類(就是繼承類和實現類)
|
- - AppClassLoader // 負責載入應用類(程序員自定義的類)
三個載入器各自完成自己的工作,但它們是如何協調工作呢?哪一個類該由哪個類載入器完成呢?為了解決這個問題,Java採用了委託模型機制。
委託模型機制的工作原理很簡單:當類載入器需要載入類的時候,先請示其Parent(即上一層載入器)在其搜索路徑載入,如果找不到,才在自己的搜索路徑搜索該類。這樣的順序其實就是載入器層次上自頂而下的搜索,因為載入器必須保證基礎類的載入。之所以是這種機制,還有一個安全上的考慮:如果某人將一個惡意的基礎類載入到jvm,委託模型機制會搜索其父類載入器,顯然是不可能找到的,自然就不會將該類載入進來。
我們可以通過這樣的代碼來獲取類載入器:
ClassLoader loader = ClassName.class.getClassLoader();
ClassLoader ParentLoader = loader.getParent();

注意一個很重要的問題,就是Java在邏輯上並不存在BootstrapKLoader的實體!因為它是用C++編寫的,所以列印其內容將會得到null。
前面是對類載入器的簡單介紹,它的原理機制非常簡單,就是下面幾個步驟:
1.裝載:查找和導入class文件;
2.連接:
(1)檢查:檢查載入的class文件數據的正確性;
(2)准備:為類的靜態變數分配存儲空間;
(3)解析:將符號引用轉換成直接引用(這一步是可選的)
3.初始化:初始化靜態變數,靜態代碼塊。
這樣的過程在程序調用類的靜態成員的時候開始執行,所以靜態方法main()才會成為一般程序的入口方法。類的構造器也會引發該動作。

③ Java中類載入出現在哪個階段,編譯期和運行期 類載入和類裝載是一樣的嗎

使用的類,編譯/運行時都會被載入。

載入/裝載沒有區別,翻譯的詞彙選擇因人而異了

運行 javac /java 時 加上 -verbose 選項就可以看到了。

④ Java類的編譯載入

好用啊 沒有錯誤 建議用eclipse或者myeclipse

⑤ 只要正常編譯類文件類就會載入嗎java類到底是什麼時候載入的

除了先把保證程序運行的基礎類一次性載入到jvm別的都是用到了才會載入.好像是這樣,前幾天看的,也沒專心記

⑥ JAVA新手,我的JAVA文件編譯成CLASS文件後用JDK運行顯示找不到或無法載入主類

沒有找到主類,並不是這個名能不能用或者能用的關系。

Java在window的dos下執行java的一些命令

java 表示執行某一個位元組碼文件

javac 表示編譯某一個java文件

首先確定,你要使用java執行的Saloton是已經編譯過,並且在當前目錄下(或者帶上文件路徑);

其次你需要確定在Saloton中是否存在主程序的入口方法,也就是我們平時所說的

publicstaticvoidmain(String[]args){}

不然他是找不到程序入口

⑦ java 類載入先後順序

1.父類靜態代碼塊;
2.子類靜態代碼塊;
3.父類非靜態代碼塊;
4.父類構造函數;
5.子類非靜態代碼塊;
6.子類構造函數;

舉例:
public class ExA {
static {
System.out.println("父類靜態代碼塊。");
}
public ExA() {
System.out.println("父類構造函數。");
}
{
System.out.println("父類非靜態代碼塊。");
}

public static void main(String[] args) {
new ExB();
}
}
class ExB extends ExA {
static {
System.out.println("子類靜態代碼塊。");
}
{
System.out.println("子類非靜態代碼塊。");
}
public ExB() {
System.out.println("子類構造函數。");
}
}
執行結果:父類靜態代碼塊。子類靜態代碼塊。父類非靜態代碼塊。父類構造函數。子類非靜態代碼塊。子類構造函數。

⑧ java文件編譯完成運行時找不到主類或無法載入Test.java

找不到主類是因為你的類裡面沒有這個方法:public static void mian(){String[]args}{
}
無法載入可能是因為你的類名和你的文件名不一致導致的
你還有什麼不懂得,追問我

⑨ 怎麼理解java中的靜態載入類和動態載入類

一.什麼是動態載入類 什麼是靜態載入類

Class.forName 不僅表示類的類類型,還代表了動態載入類。編譯時載入是靜態載入類,

運行時載入是動態載入類。

二.為何要使用動態載入類

我們寫了一個程序 並沒有寫A類和B類以及start方法?

⑩ java程序什麼是類載入

你可以了解一下 深入理解java虛擬機,
java類載入 是因為在運行時當它需要引用某個類的時候,會先去載入這個類,就是去讀這個class文件到內存裡面來,現在還沒有創建這個類的實例,
你可以理解為 你寫的java代碼在編譯成class文件後,並沒有去執行,或者去引用他,只有程序運行時它將要使用這個類的時候才會去讀取這個class文件,這時候叫做類載入,當緩存了這個類文件之後,後面的創建類的時候都會去引用它,因為類載入是運行是載入,所以java代碼在運行時是有辦法修改的,同樣java類載入也允許載入一個遠程的class文件,也代表它是支持程序不停止時更新程序代碼的。

閱讀全文

與java類編譯載入相關的資料

熱點內容
如何用塔式伺服器搭建nas 瀏覽:697
海島奇兵伺服器中斷55什麼意思 瀏覽:524
androidsdk22下載地址 瀏覽:294
intelrst驅動文件夾 瀏覽:922
幾台電腦共享一個加密狗 瀏覽:360
java獲取前一天的日期 瀏覽:188
五以內手指演算法視頻 瀏覽:580
伺服器與桌面如何切換窗口 瀏覽:94
微信介面配置信息php 瀏覽:49
php數組echo 瀏覽:98
文件夾有藍色東西 瀏覽:961
u盤顯示加密提示要格式化怎麼辦 瀏覽:543
centos命令行解析度 瀏覽:820
我的世界110命令 瀏覽:738
c語言編譯器IDEC語言編程 瀏覽:948
幫粉絲解壓的視頻 瀏覽:116
androidsdk路徑查看 瀏覽:483
什麼平板看pdf好 瀏覽:436
java定義成員變數 瀏覽:509
學完51單片機 瀏覽:519