java基礎第4天



1:函數
(1)函數就是定義在類中的具有特定功能的一段獨立小程序。函數也稱爲方法。
(2)函數的格式
修飾符 返回值類型 函數名(參數類型 形式參數1,參數類型 形式參數2,…)
{
執行語句;
return 返回值;
}


A:修飾符 後面會重點講。public static
B:返回值類型 這個特定的功能完成後,需要返回一個結果。這個返回結果的類型就是返回值類型。
C:函數名 爲了方便使用這個函數,給它起個名字。這個名字要符合標識符命名規則。
D:參數類型 形式參數的數據類型
**:形式參數 自定義的接收方
**:實際參數 發出方
E:執行語句 那麼這個語句是由多條語句組成。
F:return 這個功能執行完以後,需要有一個返回值,那麼這個值有關鍵字return帶回。return 將函數的計算後的結果返回去,誰調用,返給誰
   函數不能定義在另一函數裏邊,一旦運行到return 整個函數將結束
(3)函數的特點
A:函數只有被調用後,才執行。
B:void 表示沒有返回。在這個函數的結尾可以不寫return。
**其實jvm會自動的結尾處加上return;
(4)如果定義自己的函數 兩個明確
A:明確該功能的結果 其實就是該功能的返回類型。
B:明確該功能的參數 其實就是明確該功能中是否需要未知內容(形式參數)參與運算。‘
   明確未知內容的類型和個數。
(5)函數的重載
A:函數名相同,參數列表不同。
**參數類型不同。
**參數個數不同。
B:特點:與返回值類型無關,只看參數列表。
C:好處:便於閱讀,優化程序設計。


2:數組
(1)同一種類型數據的集合。其實數組就是一個容器。
A:只要是容器,就得重點掌握。
(2)數組的好處
A:可以自動給數組中的元素從0開始編號,方便操作這些元素。
(3)數組的定義格式
A:當不明確數組中的元素時
**舉例 int[] arr = new int[3];
B:當明確數組中的元素時
**舉例 int[] arr = new int[]{1,2,3,4,5};
(4)什麼時候使用數組?
A:當要操作的數據是多個的時候,你就得想着先把這些數據用數組進行存儲。
(5)內存圖
A:棧 
**存儲的是局部變量(在函數中定義的變量)。
**變量被使用完後,立即自動釋放。
B:堆 
**存儲的是實體(數組和對象)。
**實體:new出來的東西,可以存放很多數據的東西。
***class定義一個類。
**堆內存數據的特點
***每個實體都有內存地址
***堆內存中的變量都有默認初始化值
****int --> 0
****double --> 0.0
****boolean --> false
****char --> '\u0000' 空字符,unicode編碼。 
***當實體不在被使用的時候,會在jvm空閒的時候,
  通過java垃圾回收機制使其自動釋放。
C:方法區 後面講。
D:本地方法區 調用是Windows系統底層資源,我們也不用考慮。
E:寄存器 和CPU相關。我們不用考慮。
(6)操作數組最常見的問題
A:當你訪問到數組中的最後一個元素時,還想繼續訪問,這個時候,會發生角標越界異常。
**ArrayIndexOutOfBoundsException
**舉例 int[] arr = new int[3];
      System.out.println(arr[3]);
B:當數組不在指向某個實體時,你還繼續訪問,就會發生空指針異常。
**NullPointerException
**舉例 int[] arr = new int[3];
      arr = null;
      System.out.println(arr[1]);
(7)常見的數組的操作
記住:對數組的操作,一定要從角標下手。
A:遍歷操作 
**數組的屬性:length 數組的長度。
**格式:數組名.length  表示數組中可以存放數據的個數
public static void printArray(int[] arr)
{
System.out.print("[");
for(int i=0; i<arr.length; i++)
{
if(i!=arr.length-1)
{
System.out.print(arr[i]+",");
}
else
{
System.out.print(arr[i]);
}
}
System.out.print("]");
}
B:獲取最值
**獲取最大值
public static int getMax(int[] arr)
{
int max = arr[0];

//i從1開始,因爲第一個數不用跟自己比
for(int i=1; i<arr.length; i++)
{
if(arr[i]>max)
{
max = arr[i];
}
}


return max;
}


**獲取最小值
public static int getMin(int[] arr)
{
int min = arr[0];

//i從1開始,因爲第一個數不用跟自己比
for(int i=1; i<arr.length; i++)
{
if(arr[i]<min)
{
min = arr[i];
}
}


return min;
}
C:排序
**選擇排序
原理:如果拿0角標上的元素依次和後面的元素進行比較,
                     第一次內循環結束後,最小值出現在了0角標位置。

你就想想我們是如何打星星
****
***
**
*

public static void selectSort(int[] arr)
{
//i<arr.length-1 n個數兩兩比,n-1次就能獲得最值。
for(int i=0; i<arr.length-1; i++)
{
//0角標元素沒必要和自己比,所以j從1開始。
//發現j爲了不重複比較,總是要比i大1,所以j從i+1開始
for(int j=i+1; j<arr.length; j++)
{
if(arr[j]<arr[i])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}


**冒泡排序
原理:兩個相鄰元素進行比較,第一次比較完以後,最大值出現在了最大角標處。


public static void bubbleSort(int[] arr)
{
//i<arr.length-1 n個數兩兩比,n-1次就能獲得最值。
for(int i=0; i<arr.length-1; i++)
{
//爲了防止角標越界,j<arr.length-1
//爲了減少比較次數,j<arr.length-1-i
for(int j=0; j<arr.length-1-i; j++)
{
if(arr[j]>arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
D:傳遞參數
**調用的時候,傳遞是基本類型的值的時候,形參改變對實參沒有任何影響。
**調用的時候,傳遞是引用類型的地址值的時候,形參改變對實參沒有直接影響。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章