當前位置:首頁 » 編程語言 » java初始化靜態

java初始化靜態

發布時間: 2023-01-23 22:15:26

java 中什麼叫做靜態和非靜態。 還有什麼叫做靜態初始化和動態初始化。

靜態就是屬於類的,非靜態就是不屬於類的,屬於對象的
靜態初始化和動態初始化是創建數組的概念。
靜態初始化:創建數組時,程序員顯式地為數組中的元素賦初值,你不指定數組長度
動態初始化:創建數組時,由系統默認地為數組中的元素賦初值,你指定數組長度
比如:靜態初始化就是
int[]
a;
a
=
{1,2,3};
動態初始化:
int[]
a;
a
=
new
int[3];

❷ java 靜態初始化順序問題,求高手解答...本人菜鳥》。。

你好,很高興收到你的求助。呵呵,也在看Thinking in java啊,在此支持一下。類的初始化順序我的總結如下:希望你參照對比著寫下,上面那些都不是問題:
對象的初始化順序:
(1)載入父類(以下序號相同,表明初始化是按代碼從上到下的順序來的)
1.為父類的靜態屬性分配空間並賦於初值
1.執行父類靜態初始化塊;
(2)載入子類
2.為子類的靜態屬性分配空間並賦於初值
2.執行子類的靜態的內容;
(3)載入父類構造器
3.初始化父類的非靜態屬性並賦於初值
3.執行父類的非靜態代碼塊;
4.執行父類的構造方法;
(4)載入子類構造器
5.初始化子類的非靜態屬性並賦於初值
5.執行子類的非靜態代碼塊;
6.執行子類的構造方法.
總之一句話,靜態代碼塊內容先執行(父先後子),接著執行父類非靜態代碼塊和構造方法,然後執行子類非靜態代碼塊和構造方法。

❸ java 靜態變數初始化為什麼要用靜態初始化

在java中用final修飾符修飾的變數表示不可以被二次賦值,且系統不會給其賦默認值。 如果單純只是final變數,可以在定義的時候就賦默認值,也可以在構造方法中賦默認值。 但是如果同時用final static 修飾變數,因為static變數屬於類而不屬於對象,且在調用構造方法之前static 變數就已經被系統給賦默認值。而相應的final static 變數就只能在定義的時候就初始化,否則既無法在構造方法中初始化,系統又不會賦默認值,相當於這個變數被定義出來是毫無用處的。 因此java中final static變數必須初始化

❹ Java靜態初始化塊的問題

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

❺ Java靜態變數初始化問題

代碼沒貼全吧?static init B對應的代碼沒有,main方法也沒有貼

僅針對「請問為什麼a已經是11了,到了構造函數中卻又變成了10?」,答復如下:
在原有代碼基礎上增加main方法,代碼、執行輸出、及說明如下:
package testjdbc.;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.;

import testjdbc.domain.Stock;

class A
{
public static int a=10;
public static A A1=new A(a);
public int b=20;
public int c;
static
{
System.out.println("static init in A");

}

A()
{
System.out.println("init A no parament");
show();

}
A(int aa)
{
System.out.println("構造函數 A1:aa="+aa+",A1:b="+b+",A1:c="+c+",A1:d="+d+",a="+a);//關鍵在這里,原來的代碼裡面的a其實是輸入參數aa的值。關鍵點:(1)基本類型傳遞的是值,也即是說,調用static A A1=new A(a)時,將a當時的值傳遞給了臨時變數aa;(2)作用域,當此構造函數入參命名為a時,方法裡面的a實際上是引用的「作用域更小」的入參變數a,而不是類靜態變數a
c=d+aa+b;

System.out.println("init A with parament int");
}

{
a++;
System.out.println("static ... A1:a="+a+"A1:b="+b+"A1:c="+c+"A1:d="+d);
b+=a;
}
public static int d=30;
static
{
System.out.println("static init in A, a="+a+",d="+d);

}
public void show()
{
System.out.println("A:a="+a+"A:b="+b+"A:c="+c+"A:d="+d);
System.out.println("A1:a="+A1.a+"A1:b="+A1.b+"A1:c="+A1.c+"A1:d="+A1.d);

}

public static void main(String[] args) {
System.out.println("main init");
}

}

執行輸出:
static ... A1:a=11A1:b=20A1:c=0A1:d=0
構造函數 A1:aa=10,A1:b=31,A1:c=0,A1:d=0,a=11
init A with parament int
static init in A
static init in A, a=11,d=30
main init

❻ 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中的靜態初始化和動態初始化

靜態初始化就是static,動態初始化就是new
所謂的靜態和動態是相對於程序運行是而言的,靜態是在程序編譯時就初始化好了的,動態初始化是在程序運行是才動態分配內存空間,
我覺得已經夠通俗的了

❾ 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這個類的裡面靜態數據也同時被處理。

剩下的代碼都一樣。

熱點內容
數控機床編程步驟 發布:2025-07-20 10:14:22 瀏覽:94
存儲單位容量最小的是 發布:2025-07-20 10:14:11 瀏覽:766
愛情腳本短 發布:2025-07-20 09:56:44 瀏覽:681
存款機的安全密碼是什麼 發布:2025-07-20 09:53:03 瀏覽:32
手機如何清理空文件夾 發布:2025-07-20 09:40:35 瀏覽:72
什麼軟體可以編譯文件 發布:2025-07-20 09:35:17 瀏覽:962
可編程式控制制器的定義 發布:2025-07-20 09:28:10 瀏覽:391
陌陌會員訪問不留痕跡 發布:2025-07-20 09:28:08 瀏覽:308
x27熱點密碼是多少 發布:2025-07-20 09:03:19 瀏覽:577
c語言編碼生日快樂 發布:2025-07-20 08:56:56 瀏覽:390