esp8266接收到的数据如何存放到数组中_愉快地学Java语言:第七章 数组
導讀
本文適合Java入門,不太適合Java中高級軟件工程師。本文以《Java程序設計基礎篇》第10版為藍本,采用不斷提出問題,然后解答問題的方式來講述。本篇文章只是這個系列中的一篇,如果你喜歡這種講解方式,或者覺得從中能學到知識,可以關注我,以便查閱本系列其他文章。
讓我們開始愉快地學習Java語言吧!
1基本概念
聲明數組變量
elementType[] arrayRefVar;elementType:數組元素類型
arrayRefVar:數組引用變量
還可以使用elementType arrayRefVar[] 這種形式聲明數組變量。這種做法不推薦。
創建數組
new elementType[arrayS1ze];arraySize:整數,表示數組的大小。
一般創建和賦值合為一條語句:
arrayRefVar = new elementType[arraySize];數組一旦創建,大小就固定不變,也就是容納元素的個數不能變化。
數組元素的類型必須相同。
上面提到了數組和數組變量,他們有什么區別嗎?
數組變量是數組的引用。我們的數據存放在數組里,而數組引用指向存放數組的地方。
數組被創建后,元素有默認值,數值型的默認值是0,字符型的是’ ’,布爾型的是false。
如何訪問數組元素呢?
使用下標變量訪問數組,語法為arrayRefVar[index],其中index就是下標變量。
注意數組下標是從0開始的,那么最后一個數組下標為arraySize-1
變量有初始化,那么數組變量如何初始化呢?
elementType[] arrayRefVar = {value0, valuel,...,valuek};初始化語法等效于,對創建數組后,對每個元素分別賦值。
elementType[] arrayRefVar = new e1ementType[arraySize];arrayRefVar[0]=value0;arrayRefVar[1]=value1;...arrayRefVar[k]=valuek;這種方法看起來像是給素組賦值。
還可使用for、while循環遍歷數組。
上面提到了for、while循環,那么還有沒有其他形式的循環呢?
還有一種被稱為foreach的循環,寫法很for循環很像。
語法形式為:
for (elementType element: arrayRefVar) {//處理每一個元素}element代表每個數組元素,elementType和arrayRefVar的和上面的一樣。
使用foreach循環可以按照數組小標從小到大的順序遍歷數組。
看下面的例子:
本意是在foreach中對每個元素重新賦值,但不起作用,這是為什么呢?
其實foreach的實現和下面這段for循環等價
for (type var : arr) { ......}for (int i = 0; i < arr.length; i++) { type var = arr[i];......}var也僅相當于局部變量,并且是數組元素的引用,改變一個引用是不會真的改變引用所指向的元素值的!
2數組復制
復制數組有三種方法:
1)使用循環語句逐個地復制數組的元素。
2)使用System類中的靜態方法arraycopy。
3)使用clone方法復制數組
要這么麻煩嗎?把一個基本數據類型賦值給另一個就能達到復制的效果,這招對數組不起作用嗎?
是的,把一個數組變量賦給令一個數組變量其實是把一個數組的引用復制給另一個數組變量,這樣,這兩個變量都指向同一個地址。我們想要的效果是“復制”,就是在內存區域開辟一塊新的空間用來存儲復制的數據。
讓我們來看看arraycopy方法
void java.lang.System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)src:源數組
srcPos:源數組起始位置
dest:目標數組
destPos:目標數組起始位置
length:要拷貝的元素個數
來看一個例子:
為什么最后兩個是0.0呢?
因為我們設置了拷貝的個數為fs.length-2,fs有五個元素,那么fs.length-2=3,所以是前三個元素被拷貝到了dest中。后兩個0.0打印的是數組的默認值。
3將數組傳遞給方法
傳遞基本數據類型給方法,是按值傳遞,也就是將值傳遞給方法。那么數組呢?
數組是引用類型(后面談到類時會講這個概念),所以傳遞的是數組的引用。就是數組在內存中的地址傳遞給了方法。
那么按值傳遞和按引用傳遞有啥不同呢?
基本數據類型存放在棧中,對象存儲在堆中。其實這么說不嚴密,因為對象的成員變量有可能是基本數據類型。如果基本數據類型的變量在方法體內的局部變量,那么它一定在棧中(這里涉及面向對象的幾個概念,以后會學到)。
按值傳遞,若在方法中對這個變量重新賦值,那么方法外的變量值不會變。若按引用傳遞,由于方法外的變量和方法內的變量指向同一塊內存,這樣無論改變哪一個,內存中的值都會改變。
看下面的例子:
把fs第一個元素值改為10,由此可見真的可以。
可以向方法傳遞數組(數組的引用),那么也可以返回數組(數組的引用)。
有了數組,方法的參數列表又有了新的變化,是什么呢?
原來,我們定義方法時,一旦完成定義,參數列表是不能改變的,數據類型、參數個數,還有參數順序都不能改變。有了數組就可以定義參數個數可變的方法了。
語法:
typeName ...parameterNametypeName:是類型名
parameterName :是參數名
注意,typeName和parameterName 之間的“...”不能省略。
Java將可變長參數當做數組對待。
看下面這個例子。
給function傳遞數組fs是可以的。
再看下面這個很有意思的例子。
所有傳遞給function的參數它都接收到了,但貌似function中對數組fs的更改不起作用,為什么呢?因為fs根本就沒傳遞給function,雖然function的參數名和數組變量名一樣!
4java.util.Arrays
java.util.Arrays提供了許多操作數組的方法。譬如,sort方法對數組排序;fill為每個元素賦值;binarySearch二分查找,適用于在已排序的數組中查找,方法返回元素的下標。
5二維數組
聲明二維數組變量:
數據類型[][]數組名;
或
數據類型數組名[][];
例,float[][] fss;
創建二維數組:
例,float[][] fss=new float[3][3];
創建二維數組必須指定第一個下標,要不然兩個下標都指定。
例,float[][] fss=new float[3][];也是合法的。
怎么理解二維數組呢?
二維數組的每一個元素都是一個一維數組??梢园阉胂蟪梢粋€表格,例如上面創建的二維數組
初始化二維數組:
例,初始化上面的fs。
fs = {{1,2,3},{4,5,6},{7,8,9}};
獲得二維數組的長度:
調用length方法獲得二維數組長度。
二維數組的每一個元素是一維數組,那么它們的長度一定相等嗎?
可以不相等,看下面的例子。
遍歷二維數組一般使用嵌套循環,例:
可以像傳遞一維數組一樣將二維數組傳遞給方法。
6三維數組
聲明一個三維數組變量:
數據類型[][][] 數組名;
可以認為三維數組的每一個元素都是二維數組。
看下面的例子:
float[][][] fsss = {{{1,2},{3,4}},{{1,2},{3,4}},{{1,2},{3,4}}};
大家發現了嗎,三維數組的特性和二維數組是很像的,就連初始化語句都一樣。
看下面的例子:例子中使用三層嵌套循環遍歷數組。
7多維數組
多維數組的每一個元素都是一個數組,讓我們類推一下,二維數組的元素是一維數組,三維數組的元素是二維數組,四位數組的元素是三維數組,...,依次類推。
每天30分鐘,堅持一個月就能為Java開發打下堅實的基礎!努力學習吧!
總結
以上是生活随笔為你收集整理的esp8266接收到的数据如何存放到数组中_愉快地学Java语言:第七章 数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos7修改主机名_25个步骤完成
- 下一篇: html在分页功能中如何实现当前页面的页