JAVA基礎再回首(三)——方法、重載、數組(靜态和動态初始化)、堆棧記憶體配置設定、數組周遊、擷取最值、二維數組
繼續開始學習我們的java基礎,這篇主要學習兩個知識點——方法、數組。
一、方法
方法:就是完成特定功能的代碼塊
注意:在很多語言裡面有函數的定義,而在Java中函數被稱為方法。
方法格式:
修飾符 傳回值類型 方法名(參數類型 參數名,參數類型 參數名..) {
方法體語句;
return 傳回值;
}
我們來詳細解釋一下方法的格式:
修飾符:目前就用 public static,後面我們再詳細的講解其他的修飾符。
傳回值類型:就是功能結果的資料類型。
方法名:符合命名規則即可。友善我們的調用。
參數:
- 實際參數:就是實際參與運算的。
- 形式參數;就是方法定義上的,用于接收實際參數的。
參數類型:就是參數的資料類型
參數名:就是變量名
方法體語句:就是完成功能的代碼。
return:結束方法的。
傳回值:就是功能的結果,由return帶給調用者。
要想寫好一個方法,就必須明确兩個東西:
- 傳回值類型——結果的資料類型
- 參數清單——要傳遞幾個參數,以及每個參數的資料類型
我們一起來寫一個Demo吧。
public class FunctionDemo {
public static void main(String[] args) {
int x = ;
int y = ;
//指派調用
int result = sum(x,y);
System.out.println(result);
}
/*
* 明确:傳回值類型:int
* 參數清單:2個,都是int類型
*/
public static int sum(int a,int b){
return a + b;
}
}
輸出結果:30
方法注意事項:
1.方法不調用不執行
2.方法與方法是平級關系,不能嵌套定義
3.方法定義的時候參數之間用逗号隔開
4.方法調用的時候不用在傳遞資料類型
5.如果方法有明确的傳回值,一定要有return帶回一個值
二、重載
- 方法重載概述
- 在同一個類中,允許存在一個以上的同名方法,隻要它們的參數個數或者參數類型不同即可。
- 方法重載特點
- 與傳回值類型無關,隻看方法名和參數清單
- 在調用時,虛拟機通過參數清單的不同來區分同名方法
我們來寫一個Demo吧!
public class FunctionTest {
public static void main(String[] args) {
System.out.println(sum(, ));
System.out.println(sum(, , ));
System.out.println(sum(, , , ));
}
// 需求1:求兩個數的和
public static int sum(int a, int b) {
return a + b;
}
// 需求2:求三數的和
public static int sum(int a, int b, int c) {
return a + b + c;
}
// 需求3:求四個數的和
public static int sum(int a, int b, int c, int d) {
return a + b + c + d;
}
}
三、數組
- 數組概念
- 數組是存儲同一種資料類型多個元素的集合。也可以看成是一個容器。
- 數組既可以存儲基本資料類型,也可以存儲引用資料類型。
- 數組格式
- 格式1:資料類型[] 數組名;
- 格式2:資料類型 數組名[];
- 注意:這兩種格式中,數組中是沒有元素值的。我們要對數組的元素進行初始化。
- 數組初始化的概述:
- Java中的數組必須先初始化,然後才能使用。
- 為數組中的數組元素配置設定記憶體空間,并為每個數組元素指派。
- 數組初始化的方式:
- 動态初始化:初始化時隻指定數組長度,由系統為數組配置設定初始值。
- 靜态初始化:初始化時指定每個數組元素的初始值,由系統決定數組長度。
我們先來學習動态初始化。
格式:資料類型[] 數組名 = new 資料類型[數組長度];
數組長度其實就是數組中元素的個數。
int[] arr = new int[];
//解釋:定義了一個int類型的數組,這個數組中可以存放3個int類型的值。
靜态初始化
格式:資料類型[] 數組名 = new 資料類型[]{元素1,元素2,…};
int[] arr = new int[]{,,};
//解釋:定義了一個int類型的數組,這個數組中可以存放3個int類型的值,并且值分别是1,2,3。
//現在我們經常用下面這簡化寫法
int[] arr = {,,};
Java中數組的記憶體配置設定
Java 程式在運作時,需要在記憶體中的配置設定空間。為了提高運算效率,就對空間進行了不同區域的劃分,因為每一片區域都有特定的處理資料方式和記憶體管理方式。
- 棧記憶體——存儲局部變量
- 堆記憶體——存儲new出來的東西
- 方法區
- 本地方法區 (和系統相關)
- 寄存器 (給CPU使用)
上面提到了局部變量,我們來解釋一下
局部變量:方法定義中或者方法聲明上的所有變量,使用完畢,立即消失。
數組周遊
數組的周遊就是依次輸出數組中的每一個元素。
數組提供了一個屬性length,用于擷取數組的長度。
格式:數組名.length
public class ArrayTest {
public static void main(String[] args) {
int arr [] = {,,,,};
for (int i = ; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
輸出結果
我們把方法和數組結合使用寫個Demo
public class ArrayTest {
public static void main(String[] args) {
int arr [] = {,,,,};
printArray(arr);
}
public static void printArray(int []arr){
for (int i = ; i < arr.length; i++) {
System.out.print(arr[i]+",");
}
}
}
輸出結果:
我們來對上面的程式進行優化,去掉55後面的逗号。并加上括号。
public class ArrayTest {
public static void main(String[] args) {
int arr [] = {,,,,};
printArray(arr);
}
public static void printArray(int []arr){
System.out.print("[");
for (int i = ; i < arr.length; i++) {
if(i==arr.length-){ //這是最後一個元素
System.out.print(arr[i]+"]");
}else{
System.out.print(arr[i]+",");
}
}
}
}
輸出結果 這個輸出結果是不是比上面的那個好看多了。
擷取最值
擷取數組中的最大值最小值
public class ArrayTest2 {
public static void main(String[] args) {
//定義一個數組
int[] arr = {,,,,};
//調用方法
int max = getMax(arr);
System.out.println("max:"+max);
//請擷取數組中的最小值
int min = getMin(arr);
System.out.println("min:"+min);
}
/*
需求:擷取數組中的最大值
兩個明确:
傳回值類型:int
參數清單:int[] arr
*/
public static int getMax(int[] arr) {
//從數組中任意的找一個元素作為參照物
int max = arr[];
//然後周遊其他的元素
for(int x=; x<arr.length; x++) {
//依次擷取和參照物進行比較,如果大就留下來,如果小,就離開。
if(arr[x] > max) {
max = arr[x];
}
}
//最後參照物裡面儲存的就是最大值。
return max;
}
public static int getMin(int[] arr) {
//從數組中任意的找一個元素作為參照物
int min = arr[];
//然後周遊其他的元素
for(int x=; x<arr.length; x++) {
//依次擷取和參照物進行比較,如果小就留下來,如果大,就離開。
if(arr[x] < min) {
min = arr[x];
}
}
//最後參照物裡面儲存的就是最小值。
return min;
}
}
輸出結果
二維數組
概述:一個元素為一維數組的數組。
- 格式
- 資料類型[][] 變量名 = new 資料類型[m][n];
- m表示這個二維數組有多少個一維數組
- n表示每一個一維數組的元素個數
- 舉例:
- int[][] arr = new int[3][2];
- 定義了一個二維數組arr
- 這個二維數組有3個一維數組,名稱是arr[0],arr[1],arr[2]
- 每個一維數組有2個元素,可以通過arr[m][n]來擷取
- 表示擷取第m+1個一維數組的第n+1個元素
二維數組還有兩種格式:
格式2:資料類型[][] 變量名 = new 資料類型[m][];
格式3:資料類型[][] 變量名 = {{元素…},{元素…},{元素…}};
我們一起來做個練習吧!
/*
//需求:列印楊輝三角形
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
分析:看這種圖像的規律
A:任何一行的第一列和最後一列都是1
B:從第三行開始,每一個資料是它上一行的前一列和它上一行的本列之和。
步驟:
A:首先定義一個二維數組。行數如果是n,我們把列數也先定義為n。這個n的資料來自于鍵盤錄入。
B:給這個二維數組任何一行的第一列和最後一列指派為1
C:按照規律給其他元素指派從第三行開始,每一個資料是它上一行的前一列和它上一行的本列之和。
D:周遊這個二維數組。
*/
public class Array2Test {
public static void main(String[] args) {
//建立鍵盤錄入對象
Scanner sc = new Scanner(System.in);
//這個n的資料來自于鍵盤錄入。
System.out.println("請輸入一個資料:");
int n = sc.nextInt();
//定義二維數組
int[][] arr = new int[n][n];
//給這個二維數組任何一行的第一列和最後一列指派為1
for(int x=; x<arr.length; x++) {
arr[x][] = ; //任何一行第1列
arr[x][x] = ; //任何一行的最後1列
}
//按照規律給其他元素指派
//從第三行開始,每一個資料是它上一行的前一列和它上一行的本列之和。
for(int x=; x<arr.length; x++) {
//這裡如果y<=x是有個小問題的,就是最後一列的問題
//是以這裡要減去1
//并且y也應該從1開始,因為第一列也是有值了
for(int y=; y<=x-; y++) {
//每一個資料是它上一行的前一列和它上一行的本列之和。
arr[x][y] = arr[x-][y-] + arr[x-][y];
}
}
//周遊這個二維數組。
/*
for(int x=0; x<arr.length; x++) {
for(int y=0; y<arr[x].length; y++) {
System.out.print(arr[x][y]+"\t");
}
System.out.println();
}
*/
//這個時候,要注意了,内循環的變化必須和曾經講過的九九乘法表類似
for(int x=; x<arr.length; x++) {
for(int y=; y<=x; y++) {
System.out.print(arr[x][y]+"\t");
}
System.out.println();
}
}
}
輸出結果 關于二維數組我們平時用的地方不是很多,但是數組我們還是會經常用到,是以我們要熟練掌握。
這章java基礎再回首三,我們就學到這裡,下次我們來一起學習面向對象的思想,它是java的重點,我們要好好學習。