導航:首頁 > 編程語言 > java靜態類初始化

java靜態類初始化

發布時間:2022-10-09 23:31:03

java 中靜態內部類欄位什麼時候初始化是在外部類載入的時候就初始化嗎

首先分析下名字:靜態內部類
靜態是static。靜態的方法或者參數是隨著類的載入而產生的(感覺應該是JVM啟動時static屬性就載入了。)。這就是為什麼不用實例化類,就可以調用它的原因。
內部類:用內部類是因為內部類與所在外部類有一定的關系,往往只有該外部類調用此內部類。其他類不會調用。所以沒必要另寫一個類。外部類可以調用內部類。而內部類不能調用外部類的方法。
所以我覺得
靜態內部類中的屬性,方法,是在外部類載入的時候初始化的。
希望對您有幫助。如果有問題請自行
谷歌
度娘.

② java 中靜態內部類欄位什麼時候初始化

不是的,只有在載入內部類的時候才初始化 //有問題可以繼續交流
樓主只要看懂一下的代碼
那麼對於類的載入
基本上就沒問題了
最後類的載入過程的解釋
public class Test6 {
public static void main(String[] args){
new B();
new A.C();
}
}

class A{
private P p1 = new P("A--p1");
static P p3 = new P("A--p3");
public A(){
System.out.println("A()");
}
private P p2 =new P("A--p2");
static{
new P("A--static");
}
{new P("A{...}");}

public static class C {
private P p1 = new P("C--p1");
static P p3 = new P("C--p3");
public C(){
System.out.println("C()");
}
private P p2 =new P("C--p2");
static{
new P("C--static");
}
{new P("C{...}");}
}
}

class B extends A {
private P p1 = new P("B --p1");
static P p3 = new P("B -- p3");
public B() {
System.out.println("B()");
}
public P p2 = new P("B -- p2");
static {
new P("B -- static");
}

{new P("B{...}");}
}

class P {
public P(String s) {
System.out.println(s);
}
}
/*

有父類的情況
1. 載入父類
1.1 為靜態屬性分配存儲空間並賦初始值
1.2 執行靜態初始化塊和靜態初始化語句(從上至下)
2. 載入子類
2.1 為靜態屬性分配存儲空間
2.2 執行靜態初始化塊和靜態初始化語句(從上至下)
3. 載入父類構造器
3.1 為實例屬性分配存數空間並賦初始值
3.2 執行實例初始化塊和實例初始化語句
3.3 執行構造器內容
4. 載入子類構造器
4.1 為實例屬性分配存數空間並賦初始值
4.2 執行實例初始化塊和實例初始化語句
4.3 執行構造器內容
5 回到main()
內部類的載入過程也一樣
*/

③ java類中的靜態常量是什麼時候初始化的

我們知道一個類(class)要被使用必須經過裝載,連接,初始化這樣的過程。下面先對這三階段做一個簡單的描述,之後會結合一個簡單的例子來說明java中類的初始化過程。

在裝載階段,類裝載器(Bootstrap ClassLoader 或者用戶自定義的ClassLoader) 把編譯形成的class文件載入內存,創建類相關的Class對象,這個Class對象封裝了我們要使用的類的類型信息。

連接階段又可以分為三個子步驟:驗證、准備和解析。
驗證就是要確保java類型數據格式 的正確性,並適於JVM使用。
准備階段,JVM為靜態變數分配內存空間,並設置默認值,注意,這里是設置默認值,比如說int型的變數會被賦予默認值0 。在這個階段,JVM可能還會為一些數據結構分配內存,目的 是提高運行程序的性能,比如說方法表。
解析過程就是在類型的常量池中尋找類、介面、欄位和方法的符號引用,把這些符號引用替換成直接引用。這個階段可以被推遲到初始化之後,當程序運行的過程中真正使用某個符號引用的時候 再去解析它。

類會在首次被「主動使用」時執行初始化,為類(靜態)變數賦予正確的初始值。在Java代碼中,一個正確的初始值是通過類變數初始化語句或者靜態初始化塊給出的。而我們這里所說的主動使用 包括:
1. 創建類的實例
2. 調用類的靜態方法
3. 使用類的非常量靜態欄位
4. 調用Java API中的某些反射方法
5. 初始化某個類的子類
6. 含有main()方法的類啟動時

初始化一個類包括兩個步驟:
1、 如果類存在直接父類的話,且直接父類還沒有被初始化,則先初始化其直接父類
2、 如果類存在一個初始化方法,就執行此方法

④ 高級Java開發中什麼是靜態初始化器

靜態初始化器是由關鍵字static引導的一對大括弧括起的語句組。它的作用與類的構造函數有些相似,都用來完成初始化的工作,但是靜態初始化器與構造函數有三點根本的不同:
(1)構造函數是對每個新創建的對象初始化,而靜態初始化器是對每個類進行初始化;
(2)構造函數是在用new運算符產生新對象時由系統自動執行,而靜態初始化器則是在它所屬的類載入入內存時由系統調用運行的;
(3)不同於構造函數,靜態初始化器不是方法,沒有方法名、返回值和參數列表。
package com.text.java;
/**
* <p class="detail">
* 功能:靜態初始化器
* static{ 和 }之間的代碼被稱為靜態初始化器。它只有在第一次載入類時運行。
* 只有靜態變數才可以在靜態初始化器中進行訪問。
* 雖然創建了多個實例,但靜態初始化器只運行一次。
* </p>
* @ClassName: StaticUtil
* @version V1.0
* @date 2016-8-10
* @author dmw
*/
public class StaticUtil {
static int count;
static{
System.out.println("類初始化靜態載入++++");
System.out.println("載入次數"+count);
count++;
}

public static void main(String[] args) {
StaticUtil temp1=new StaticUtil();
StaticUtil temp2=new StaticUtil();
StaticUtil temp3=new StaticUtil();
// 輸出: 類初始化靜態載入++++
// 載入次數0
}
}

⑤ java類中的靜態變數是什麼時候初始化的

靜態方法是你手動調用的時候執行。
靜態變數與類一起載入,最優先的。
然後是,靜態初始化器(只初始化靜態成員變數)。
然後是,屬性初始化(只初始化非靜態成員變數)。
最後是,構造函數(常用的,你懂的)...
記住:先是靜態,然後是非靜態。

⑥ Java靜態初始化塊的問題

1、首先打開電腦上的eclipse軟體,配置好jdk的,如下圖所示。

⑦ Java的靜態塊和初始化塊分別何時執行有什麼區別

靜態初始化塊:當類第一次載入時執行。

非靜態初始化塊:非靜態初始化塊會在構造函數執行時,且在構造函數主體代碼執行之前被執行。

區別如下:

1、執行次數不同

靜態塊只執行一次,初始化塊可以執行多次。

2、作用不同

靜態初始化塊僅能初始化類變數,即static修飾的數據成員。

非靜態初始化塊可以初始化類的實例變數。

(7)java靜態類初始化擴展閱讀:

使用Java靜態代碼塊注意事項:

1、它是隨著類的載入而執行,只執行一次,並優先於主函數。具體說,靜態代碼塊是由類調用的。類調用時,先執行靜態代碼塊,然後才執行主函數的。

2、靜態代碼塊其實就是給類初始化的,而構造代碼塊是給對象初始化的。

3、靜態代碼塊中的變數是局部變數,與普通函數中的局部變數性質沒有區別。

4、一個類中可以有多個靜態代碼塊。

5、對於靜態變數、靜態初始化塊、變數、初始化塊、構造器,它們的初始化順序依次是(靜態變數、靜態初始化塊)>(變數、初始化塊)>構造器。

⑧ java 靜態數據初始化

從主類public class StaticInitialization 中的開始main函數開始。
在初始化對象時,開始 靜態數據的初始化
譬如:
執行完
public class StaticInitialization {
public static void main(String[] args) {
System.out.println(
"Creating new Cupboard() in main");
後,然後
執行new Cupboard();這段代碼
這時,程序就會跳到Cupboard這個類中,當實例化Cupboard這個類的對象的時候,Cupboard這個類的裡面靜態數據也同時被處理。

剩下的代碼都一樣。

⑨ java中靜態初始化和動態初始化

靜態初始化就是static,動態初始化就是new

所謂的靜態和動態是相對於程序運行是而言的,靜態是在程序編譯時就初始化好了的,動態初始化是在程序運行是才動態分配內存空間,

我覺得已經夠通俗的了

閱讀全文

與java靜態類初始化相關的資料

熱點內容
android天氣apijson 瀏覽:982
為什麼創建id會出現伺服器錯誤 瀏覽:835
代碼中有不必編譯的單詞嗎 瀏覽:563
鉤子與資料庫編程 瀏覽:563
安卓光遇錄歌怎麼設置 瀏覽:485
虛擬機怎麼和雲伺服器搭建集群 瀏覽:896
python倒計時代碼turtle 瀏覽:491
cad命令mv 瀏覽:928
nexus7一代androidl 瀏覽:306
linux使用靜態庫編譯過程 瀏覽:103
android平滑滾動效果 瀏覽:841
什麼是編譯器指令 瀏覽:219
微控制器邏輯命令使用什麼匯流排 瀏覽:887
程序員在學校里是學什麼的 瀏覽:605
oraclejava數據類型 瀏覽:890
程序員考注冊會計師 瀏覽:957
怎麼使用access的命令按鈕 瀏覽:899
有點錢app在哪裡下載 瀏覽:832
博途v15解壓後無法安裝 瀏覽:205
什麼是根伺服器主機 瀏覽:438