java初始化三個原則(java初始化方法)

本文目錄一覽:

Java數組初始化,這三種方式有什麼區別

創建數組的三種方式:其實分為2類,一種是靜態的創建,如方式一。一種是動態的創建,只不過根據寫法的不同分為方式二和方式三:

[java] view plain copy

public static void main(String[] args) {

// 1.方式一 聲明 分配空間並賦值

int[] arr1 = {1,2,3};

// 2.方式二 顯示初始化

int[] arr2;

arr2 = new int[]{1,2,3};

// 3.方式三 顯示初始化()

int[] arr3;

arr3 = new int[3];

}

他們的區別,方式一:在聲明的時候直接就已經分配空間,並賦值,方式一是不能寫成如下這種形式的。

[java] view plain copy

int[] arr1;

arr1 = {1,2,3};//錯誤寫法 編譯不同過

方式二和方式三,聲明和內存分配是分開的,如上面的例子,

[java] view plain copy

int[] arr2; 和 int[] arr3;

這一步是在棧空間分配一個引用,存放的是一個引用,null

[java] view plain copy

arr2 = new int[]{1,2,3};span style=”font-family: Arial, Helvetica, sans-serif;”arr3 = new int[3];/span

到這一步的時候jvm才開始在內存堆區域分配空間,並賦值,方式二直接賦值 1,2,3 方式三 默認初始化,基本類型是 0 布爾類型是 false 引用類型為null,

註:內存一旦分配不能改變,所有說數組長度固定

如何初始化java數組

Java 數組初始化的兩種方法:  

1、靜態初始化: 程序員在初始化數組時為數組每個元素賦值;

2、動態初始化: 數組初始化時,程序員只指定數組的長度,由系統為每個元素賦初值。

代碼如下:

[java] view plain copy print?

public class ArrayInit {  

    public static void main(String[] args) {  

          

        //靜態初始化數組:方法一  

        String cats[] = new String[] {  

                “Tom”,”Sam”,”Mimi”  

        };  

          

        //靜態初始化數組:方法二  

        String dogs[] = {“Jimmy”,”Gougou”,”Doggy”};  

          

        //動態初始化數據  

        String books[] = new String[2];  

        books[0] = “Thinking in Java”;  

        books[1] = “Effective Java”;  

          

        System.out.println(cats.length);  

        System.out.println(dogs.length);  

        System.out.println(books.length);  

    }  

}

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

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

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

我覺得已經夠通俗的了

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 變量到底要如何初始化

不同的變量初始化方法不同。

變量包括:

類的屬性,或者叫值域

方法里的局部變量

方法的參數

對於第一種變量,Java虛擬機會自動進行初始化。如果給出了初始值,則初始化為該初始值。如果沒有給出,則把它初始化為該類型變量的默認初始值。

int類型變量默認初始值為0

float類型變量默認初始值為0.0f

double類型變量默認初始值為0.0

boolean類型變量默認初始值為false

char類型變量默認初始值為0(ASCII碼)

long類型變量默認初始值為0

所有對象引用類型變量默認初始值為null,即不指向任何對象。注意數組本身也是對象,所以沒有初始化的數組引用在自動初始化後其值也是null。

對於兩種不同的類屬性,static屬性與instance屬性,初始化的時機是不同的。instance屬性在創建實例的時候初始化,static屬性在類加載,也就是第一次用到這個類的時候初始化,對於後來的實例的創建,不再次進行初始化。這個問題會在以後的系列中進行詳細討論。

對於第二種變量,必須明確地進行初始化。如果再沒有初始化之前就試圖使用它,編譯器會抗議。如果初始化的語句在try塊中或if塊中,也必須要讓它在第一次使用前一定能夠得到賦值。也就是說,把初始化語句放在只有if塊的條件判斷語句中編譯器也會抗議,因為執行的時候可能不符合if後面的判斷條件,如此一來初始化語句就不會被執行了,這就違反了局部變量使用前必須初始化的規定。但如果在else塊中也有初始化語句,就可以通過編譯,因為無論如何,總有至少一條初始化語句會被執行,不會發生使用前未被初始化的事情。對於try-catch也是一樣,如果只有在try塊里才有初始化語句,編譯部通過。如果在catch或finally里也有,則可以通過編譯。總之,要保證局部變量在使用之前一定被初始化了。所以,一個好的做法是在聲明他們的時候就初始化他們,如果不知道要出事化成什麼值好,就用上面的默認值吧!其實第三種變量和第二種本質上是一樣的,都是方法中的局部變量。只不過作為參數,肯定是被初始化過的,傳入的值就是初始值,所以不需要初始化。

java 類型類怎麼初始化賦值

總結了java數組的初始化的兩種方法如下:

1、最簡單的方法是直接賦值,如:

一維數組:

int[] num = {21,34,2,-9,987,0,-89};//創建一個一維數組,並賦7個初始值

二維數組:

int[][] num2 = {{21,22},{34,35}};//創建一個二維數組,並賦2個初始值

2、先創建一個數組對象出來,再進行循環賦值,如:

一維數組:

int[] num3 = new int[5];//先創建一個5長度的數組對象

for(int i=0;inum3.length;i++){//之後進行循環遍歷對數組進行賦值

num3[i] = i;

}

二維數組:

int[][] num4 = new int[5][2];//先創建一個二維數組對象

for(int i=0;inum3.length;i++){//之後進行循環遍歷對數組進行賦值

for(int j=0;jnum4[i].length;j++){

num4[i][j] = j;

}

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/293111.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-25 18:39
下一篇 2024-12-25 18:39

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • ArcGIS更改標註位置為中心的方法

    本篇文章將從多個方面詳細闡述如何在ArcGIS中更改標註位置為中心。讓我們一步步來看。 一、禁止標註智能調整 在ArcMap中設置標註智能調整可以自動將標註位置調整到最佳顯示位置。…

    編程 2025-04-29
  • 解決.net 6.0運行閃退的方法

    如果你正在使用.net 6.0開發應用程序,可能會遇到程序閃退的情況。這篇文章將從多個方面為你解決這個問題。 一、代碼問題 代碼問題是導致.net 6.0程序閃退的主要原因之一。首…

    編程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一個類的構造函數,在創建對象時被調用。在本篇文章中,我們將從多個方面詳細討論init方法的作用,使用方法以及注意點。 一、定義init方法 在Pyth…

    編程 2025-04-29
  • Python創建分配內存的方法

    在python中,我們常常需要創建並分配內存來存儲數據。不同的類型和數據結構可能需要不同的方法來分配內存。本文將從多個方面介紹Python創建分配內存的方法,包括列表、元組、字典、…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29

發表回復

登錄後才能評論