(javaSE)Java數組進階:數組初始化 數組訪問 數組中的jvm 空指針異常

數組的基礎

什么是數組呢?
數組指的是一種容器,可以用來存儲同種數據類型的多個值

數組的初始化
初始化:就是在內存中,為數組容器開辟空間,并將數據存入容器中的過程。
數組初始化的兩種方式:靜態初始化,動態初始化
數組的靜態初始化
初始化:
就是在內存中,為數組容器開辟空間,并將數據存入容器中的過程
完整格式:數據類型[數組名=hew數據類型]{元素1,元素2,元素3..: );
范例:int[]array=newint[]{11,22,33};
編輯
范例:double[]arrav2=new double[]{11.1.22.2.33.3}:

格式:

直接輸出:

輸出的就是地址值:

其中,[表示這個是個數組,D表示是double的類型的數組,后面的就是相當于是地址值


訪問數組:

修改對應的數組值:
//2.把數據存儲到數組當中
//格式:數組名[索引]=具體數據/變量;
//細節:一旦覆蓋之后,原來的數據就不存在了。
arr[0] = 100;
System.out.println(arr[0]);//100

獲取對應的元素值:

結果:

數組的長度獲取:

//在Java當中,關于數組的一個長度屬性,length
//調用方式:數組名.length

定義一個數組,存儲1,2,3,4,5,遍歷數組得到每一個元素,求數組里面所有的數據和

定義了一個sum,把值取出來存儲在sum里面就可以了

把數組中的值取出來,模3,滿足條件--count++

//i表示數組里面的每一個索引
//arr[i]表示數組里面的每一個元素
//3.判斷當前的元素是否為3的倍數,如果是那么統計變量最就需要自增一次

變化數據:定義一個數組:存儲1,2,3,4,5,6,7,8,9,10,遍歷數組得到每一個元素
要求:
1,如果是奇數,則將當前數字擴大兩倍
2,如果是偶數,則將當前數字變成二分之一

字符串類型的:


//數組默認初始化值的規律
//整數類型:默認初始化值0
//小數類型:默認初始化值0.0
//字符類型:默認初始化值'/u0000'空格
//布爾類型:默認初始化值false
//引用數據類型:默認初始化值null

//格式:
//數據類型[]數組名=new數據類型[數組的長度];
//在創建的時候,由我們自己指定數組的長度,由虛擬機給出默認的初始化值

當訪問了數組中不存在的索引,就會引發索引越界異常。

分析:

每次的max都會被記錄,讓后面的值與之相比:

//1.定義數組用來存儲5個值
int[] arr = {33,5,22,44,55};


//2.定義一個變量max用來存儲最大值
//臨時認為0索引的數據是最大的
int max=arr[0];


//3.循環獲取數組中的每一個元素
//拿著每一個元素跟max進行比較
for(inti=0;i<arr.length;i++){
//i 索引 arr[i] 元素
if(arr[i] > max){
max =arr[i];


//4.當循環結束之后,max記錄的就是數組中的最大值
System.out.println(max);//55

進階

?1.數組是一段連續的內存空間,因此支持隨機訪問,即通過下標訪問快速訪問數組中任意位置的元素
2.下標從0開始,介于[0,N)之間不包含N,N為元素個數又,不能越界,否則會報出下標越界異常。

int[] array = {1, 2, 3};
System.out.println(array[3]);//數組中只有3個元素,下標一次為為:012,array[3]下標越界
//執行結果
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100
at Test.main(Test.java:4)

遍歷數組的方式:

for-each 是 for 循環的另外一種使用方式. 能夠更方便的完成對數組的遍歷. 可以避免循環條件和更新語句寫錯

內存是一段連續的存儲空間,主要用來存儲程序運行時數據的的。比如:
1.程序運行時代碼需要加載到內存
2.程序運行產生的中間數據要存放在內存
3.程序中的常量也要保存
4.有些數據可能需要長時間存儲,而有些數據當方法運行結束后就要被銷毀

如果對內存中存儲的數據不加區分的隨意存儲,那對內存管理起來將會非常麻煩。比如

因此JVM也對所使用的內存按照功能的不同進行了劃分:

基本數據類型創建的變量,稱為基本變量,該變量空間中直接存放的是其所對應的值;
而引用數據類型創建的變量,一般稱為對象的引用,其空間中存儲的是對象所在空間的地址。

在上述代碼中,abarr,都是函數內部的變量,因此其空間都在main方法對應的棧幀中分配。
ab是內置類型的變量,因此其空間中保存的就是給該變量初始化的值。
array是數組類型的引用變量,其內部保存的內容可以簡單理解成是數組在堆空間中的首地址。
引用變量并不直接存儲對象本身,可以簡單理解成存儲的是對象在堆中空間的起始地址。通過該 地址,引用變量便可以去操作對象 有點類似 C語言中的指針,但是Java中引用要比指針的操作更簡單。
所有的局部變量存儲在棧當中的? 局部變量存儲在棧當中!!
array這個引用指向了一個數組對象
array[0]=9;通過array這個引用 訪問當前的這個對象的0下標
array.length通過array這個引用 訪問當前的這個對象的長度

分析

jvm的回收:

如果這個對象一直沒有人引用他此時就會被JVM自動回收?

int[] array2=null;
array2這個引用不指向任何對象

null在Java中表示"空引用",也就是一個不指向對象的引用.
int[]arr=null;
System.out.println(arr[0]);
//執行結果
Exception in thread "main"java.lang.NullPointerExceptionat Test.main(Test.java:6)
null的作用類似于C語言中的NULL(空指針),都是表示一個無效的內存位置.因此不能對
作.一旦嘗試讀寫,就會拋出NullPointerException.
注意:Java中并沒有約定null和0號地址的內存有任何關聯

看一下這兩個代碼的區別:是不是傳引用 就能夠 修改實參的值?

這里指向新的對象:

結論:一個引用不可能同時指向多個對象

總結:
1.int[array=null;代表這個引用不指向任何對象
2.array1=array2;代表array1這個引用指向了array2這個引用指向的對象
3.一個引用不可能同時指向2個對象

如何輸出二維數組中的結果

二維數組也可以是不規則的:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907872.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907872.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907872.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

支持向量機(SVM)例題

對于圖中所示的線性可分的20個樣本數據&#xff0c;利用支持向量機進行預測分類&#xff0c;有三個支持向量 A ( 0 , 2 ) A\left(0, 2\right) A(0,2)、 B ( 2 , 0 ) B\left(2, 0\right) B(2,0) 和 C ( ? 1 , ? 1 ) C\left(-1, -1\right) C(?1,?1)。 求支持向量機分類器的線…

UE特效Niagara性能分析

開啟Niagara調試器 開啟顯示概覽 界面顯示 &#x1f7e9; 上方綠色面板&#xff1a;Niagara DebugHud 這是 HUD&#xff08;調試視圖&#xff09; 模式下的性能統計顯示&#xff0c;內容如下&#xff1a; 項目含義SystemFilter: ShockWave_01當前選中的 Niagara 粒子系統名稱…

碳中和新路徑:鐵電液晶屏如何破解高性能與節能矛盾?

一、顯示技術困局&#xff1a;當 “高刷” 遭遇 “高耗” 在元宇宙、電競產業蓬勃發展的當下&#xff0c;顯示設備的刷新率與能耗成為行業痛點。傳統液晶受 “邊緣場效應” 制約&#xff0c;刷新率長期停滯在 300Hz 以下&#xff0c;動態畫面拖影問題顯著&#xff1b;同時&…

Vue3+SpringBoot全棧開發:從零實現增刪改查與分頁功能

前言 在現代化Web應用開發中&#xff0c;前后端分離架構已成為主流。本文將詳細介紹如何使用Vue3作為前端框架&#xff0c;SpringBoot作為后端框架&#xff0c;實現一套完整的增刪改查(CRUD)功能&#xff0c;包含分頁查詢、條件篩選等企業級特性。 技術棧介紹 前端&#xff1…

IBM 與嘉士伯(Carlsberg)攜手推進 SAP S/4HANA 數字化轉型,打造啤酒行業新范式

在啤酒釀造擁有悠久傳統的同時&#xff0c;嘉士伯也在積極擁抱前沿技術&#xff0c;邁出數字化轉型的堅實步伐。2025年&#xff0c;嘉士伯宣布與 IBM 建立多年的合作伙伴關系&#xff0c;在其西歐業務中全面部署 SAP S/4HANA&#xff0c;旨在提升企業的運營效率、敏捷性和創新能…

深度解析 Nginx 配置:從性能優化到 HTTPS 安全實踐

引言 Nginx 作為高性能的 Web 服務器和反向代理&#xff0c;其配置靈活性和強大功能備受開發者青睞。本文基于一份生產環境的 Nginx 配置文件&#xff0c;詳細拆解其核心配置邏輯&#xff0c;涵蓋性能優化、HTTPS 安全配置、反向代理及靜態資源處理等關鍵環節&#xff0c;幫助…

傳送文件利器wormhole的使用方法

傳送文件利器wormhole的使用方法 wormhole文件傳送工具是基于python的一個快捷的傳送工具&#xff0c;在安裝此工具之前首先要部署好python環境。 安裝的過程如下&#xff1a; 1.部署好python 環境 LINUX系統自帶PYTHON環境&#xff0c;直接安裝即可。 WINDOWS系統需要安裝py…

LangChain輸出格式化實踐:提升測試工程師LLM開發效率的完整指南

引言 在基于LangChain的LLM測試開發中&#xff0c;輸出格式化是連接大模型推理能力與自動化測試系統的關鍵環節。通過結構化輸出&#xff08;如JSON&#xff09;&#xff0c;測試工程師可快速將LLM生成的測試用例、缺陷報告等結果對接至CI/CD流水線。本文系統解析LangChain內置…

Go 語言 + Word 文檔模板:WordZero 引擎如何讓企業文檔處理效率提升 300%?

前言 在企業級應用開發中&#xff0c;自動化生成Word文檔一直是個令人頭疼的需求。傳統的方案要么依賴于復雜的Office COM組件&#xff0c;要么使用功能有限的第三方庫。今天為大家介紹一個純Go語言實現的Word操作庫——WordZero&#xff0c;特別是其強大的模板引擎功能&#…

Eclipse 修改字符集

Eclipse 修改字符集 在軟件開發過程中,字符集的設置對于代碼的正確顯示和運行至關重要。Eclipse 作為一款流行的集成開發環境(IDE),提供了方便的字符集修改功能。本文將詳細講解如何在 Eclipse 中修改字符集,以確保項目文件的正確處理。 1. 引言 在 Java 開發中,常見的…

C++ 游戲開發詳細流程

&#x1f9e0; 第一階段&#xff1a;項目規劃與架構設計 關鍵詞&#xff1a;系統性、模塊化、可擴展性 1.1 目標明確 游戲類型&#xff1a;2D / 2.5D / 3D / VR平臺選擇&#xff1a;PC、主機、移動設備多人/單人&#xff1a;是否含網絡模塊&#xff08;決定是否使用 socket、U…

使用Docker-NVIDIA-GPU開發配置:解決 Docker NVIDIA 運行時錯誤方法

問題描述 運行 Docker 命令時,系統提示 docker: Error response from daemon: unknown or invalid runtime name: nvidia,表明 Docker 無法識別 NVIDIA 運行時。這一錯誤通常出現在使用 --runtime=nvidia 和 --gpus 參數時,意味著 NVIDIA 容器運行時未正確安裝或配置。NVID…

3516cv610在sample_aiisp上多創一路編碼流,方法

3516cv610在sample_aiisp上多創一路編碼流&#xff0c;方法 首先確保 vpss grp0有視頻流 最好保證 已經有一路視頻流能推出來 多創一路編碼流思路為 將 vpss grp0又綁定給 vpss_chn1 vpss_chn1有綁定給 venc_chn1 這樣我們就多創了一路視頻流。 這里思路完全正確 可以實現…

【燒腦算法】不定長滑動窗口:從動態調整到精準匹配以靈活特性實現高效破題

目錄 求最長/最大 2730. 找到最長的半重復子字符串 2779. 數組的最大美麗值 1838. 最高頻元素的頻數 2516. 每種字符至少取 K 個 2831. 找出最長等值子數組 求最短/最小 1234. 替換子串得到平衡字符串 2875. 無限數組的最短子數組 76. 最小覆蓋子串 632. 最小區間 …

第七十篇 從餐廳后廚到電影院選座:生活場景拆解Java并發編程核心

目錄 一、并發基礎&#xff1a;餐廳后廚的協作藝術1.1 廚師與線程&#xff08;Thread&#xff09;1.2 共享資源競爭&#xff1a;唯一的炒鍋1.3 線程狀態轉換&#xff1a;廚師工作流 二、線程同步&#xff1a;電影院選座中的鎖機制2.1 同步鎖&#xff08;synchronized&#xff0…

嵌入式學習--江協stm32day1

失蹤人口回歸了&#xff0c;stm32的學習比起51要慢一些&#xff0c;因為涉及插線&#xff0c;可能存在漏插&#xff0c;不牢固等問題。 相對于51直接對寄存器的設置&#xff0c;stm32因為是32位修改起來比較麻煩&#xff0c;江協課程是基于標準庫的&#xff0c;是對封裝函數進…

vue+elementUi+axios實現分頁(MyBatis、Servlet)

vueelementUiaxios實現分頁 文章目錄 vueelementUiaxios實現分頁1.代碼實現【HTML】**【Servlet層】****【Service層】****【Dao層】** 2.總結步驟3.實現要點4.注意事項4.注意事項 注&#xff1a;此項目 前端為 html、 后端采用 mybatis、servlet實現 1.代碼實現 【HTML】…

vue-10( 動態路由匹配和路由參數)

動態路由匹配和路由參數 動態路由匹配是 Vue Router 的一個強大功能&#xff0c;它允許你創建靈活且可重用的路由。您可以使用參數來捕獲 URL 的動態段&#xff0c;而不是為每個可能的值定義特定路由。這在處理具有唯一標識符的資源&#xff08;如用戶配置文件、產品詳細信息或…

劫持進程注入

劫持進程注入和遠程線程注入的區別就是 遠程線程注入是向一個正在運行中的進程注入 而劫持進程注入則是自己打開一個進程(以掛起的方式) 然后再進行注入的操作 這樣做的原因是當進程在掛起的狀態時他的所有線程都是處于未啟用的階段 這樣就可以避免目標進程的反注入線程的…

uni-app學習筆記二十--pages.json頁面路由pages設置

uni-app 通過 pages 節點配置應用由哪些頁面組成&#xff0c;pages 節點接收一個數組&#xff0c;數組每個項都是一個對象&#xff0c;其屬性值如下&#xff1a; 屬性類型默認值描述pathString配置頁面路徑styleObject配置頁面窗口表現&#xff0c;配置項參考下方 pageStylene…