Java 方法與數組


方法

什么是方法?

方法定義:方法(Method),函數(function),其實就指一個特定的功能操作,程序中完成獨立功能,可重復使用的一段代碼的集合。

方法的定義

方法定義格式:

[修飾符]  返回值的類型  方法名稱 ( [形式參數,....] ) {
		 方法體
		 [ return 值 ];
}

注意點

(1)方法必須聲明在類(class)當中。
(2)創建的方法要定義在其它方法之外(跟其他的方法是兄弟關系)
(3)定義方法不分先后順序。
(4)如果有一個方法前面有static,那么在該方法中調用其它的方法前面也應該有static。
(5)void 返回值為空,什么都不返回;如果有返回值,必須要有return。
(6)兩個方法的名稱不能相同。
(7)方法必須要先定義,再執行。

方法術語

修飾符

public,static等,static修飾的方法屬於類,直接使用類名調用即可。

返回值類型

方法其實是在完成一個功能,該功能操作完畢之后,是否需要給調用者返回一個結果。

如果不需要給調用者返回結果,此時使用關鍵字void來聲明,無返回的意思。

方法名稱

遵循標識符的規范,使用動詞表示,首字母小寫,若是多個單詞組成,使用駝峰表示法,以后的每一個單詞首字母都大寫,myName

形式參數

方法圓括號中的變量,僅僅只是占位而已,參數的名稱其實無所謂,形式參數可以有多個。

參數列表

參數列表 == 參數的類型 + 參數的個數 + 參數的順序。

方法簽名

方法簽名 = 方法名稱 + 方法參數列表;

在同一個類中,方法簽名是唯一的,否則編譯報錯。

方法體

方法的 { } 中的代碼,表示具體完成該功能的代碼。

返回值:

在方法內部,使用return關鍵字;
功能1:給調用者返回一個結果值,此時該方法不能使用void修飾.
功能2:結束當前方法.

實際參數

調用者在調用某一個具體方法的時候,實際傳遞的參數值。

方法重載

什么是方法重載?

重載方法的定義是在同一個類中,某方法允許存在一個以上的同名方法,只要它們的參數列表不同即可。

方法重載作用

解決了 同一功能的方法,由於參數不同所造成方法名稱不同。

判斷的原則

方法重載判斷原則: “兩同一不同”

  • 兩同:同類中,方法名相同;
  • 一不同:方法參數列表不同(參數類型、參數個數、參數順序);

只要參數類型,參數個數,參數順序有一個不同,參數列表就不同.

注意:方法重載和方法的返回值類型無關,只是一般要求返回值類型一致。
參數列表和參數的名稱沒關系,方法的重載和形參沒關系。

數組

什么是數組?

所謂數組,是在程序設計中,為了處理方便,把具有相同類型的若干變量按有序的形式組織起來的一種數據形式。

這些按一定順序排列的同類型數據的集合稱為數組。

而數組中的每一個數據稱之為數組元素,數組中的元素以索引來表示其存放的位置,索引從0開始,步長是1,有點像Excel表格的行號,逐行遞增。

數組的定義

變量的定義: 數據類型 變量名; 如: int age;

數組的定義:
方式1:: 數組元素的類型[] 數組名; 如: int[] ages;
方式2: 數組元素的類型 數組名[]; 如: int ages[];

推薦方式1: 可以吧 int[] 看成是一種數據類型,int類型的數組類型。

數組必須先初始化,才能使用。因為初始化表示在內存中分配空間。

數組的初始化

Java中數組必先初始化后才能使用,所謂初始化就是給數組元素分配內存,並為每個元素賦初始值。

初始化數組的兩種方式:

  • 靜態初始化;
  • 動態初始化;

無論以哪種方式初始化數組,一旦初始化完成,數組的長度就固定了,不能改變,除非重新初始化。也就是說數組是定長的

靜態初始化

數組的靜態初始化操作:

特點:由我們自己來為每一個數組元素設置初始化值,而數組的長度由系統(JVM)決定。

語法:

數組元素類型[]  數組名 = new 數組元素類型[]{元素1,元素2,元素3,.......};

舉例:

int[] nums = new  int[]{1,3,5,7,9};
int[] nums = {1,3,5,7,9};

說明:

簡單寫法,必須聲明之后,立刻初始化,不能先聲明后初始化:以下寫法是錯誤

int[] nums;
nums = {1,3,5,7,9};

動態初始化

數組的動態初始化操作:

特點:由我們來設置數組的元素個數(數組長度),而每一個數組元素的初始值有系統決定。

語法:

數組元素類型[]  數組名 = new  數組元素類型[ length ];

舉例:

int[] ages = new int[100];

說明:

不能同時使用靜態初始化和動態初始化:以下寫法是錯誤

int[] nums = new int[5]{1,3,5,7,9};

數組的基本操作

基本操作 操作說明
獲取元素 元素類型 變量 = 數組名[index];
設置元素 數組名[index] = 值;
遍歷數組元素 建議使用for循環,事先知道循環的次數。
數組長度 int len = 數組名.length; length是屬性,不是方法。
索引范圍 從0開始,逐一遞增. [0,數組名.length-1]

多維數組

什么是多維數組

一維數組:就是數組,數組中的每一個元素都是一個值。
二維數組:數組中的數組,數組中的每一個元素都是一個數組。(可以表示二維空間(行/豎))
三維數組:數組中的每一個元素都是一個二維數組。

舉例:

int[][] a = new int[][] { 
	{ 1, 2, 3 }, 
	{ 4, 5 }, 
	{ 6 } 
};

feach 循環

普通循環

定義數組,給數組元素賦值。當取出數組中的元素值的時候,咱們會使用循環(while,do while,for)來操作,該操作,稱之為循環遍歷,但是循環變量是數組的索引。

增加for循環

從Java5開始,提供了增強for循環(for-each),就可以直接地取出數組中的每一個元素。

for(元素類型 變量 : 數組名)
{
    變量就表示每一個元素值
}

舉例:

public static void main(String[] args) {
	String[] strs = { "爸爸", "媽媽", "爺爺", "奶奶", "外公", "外婆" };
	for (String str : strs) {
		System.out.println(str);
	}
}

增加for循環本質

增強for循環,其實是一個語法糖(編譯器級別的新特性),但是在字節碼中底層依然是for循環

代碼反編譯后:

public static void main(String args[])
{
	String strs[] = {
		"爸爸", "媽媽", "爺爺", "奶奶", "外公", "外婆"
	};
	String args1[];
	int j = (args1 = strs).length;
	for (int i = 0; i < j; i++)
	{
		String str = args1[i];
		System.out.println(str);
	}
}

那到底,咱們是使用for循環還是使用增強for循環?

  • 若需要取出數組元素,則使用for-each更簡單。
  • 但是若需要操作數組索引,就只能使用普通的循環。

方法的可變參數

得出結論:可變參數就是,方法的數組參數。

注意::為了避免歧義,語法規定,可變參數必須作為方法的最后一個參數。

static void sum(int[] args) {	// 把數組當作參數進行傳遞
	int res = 0;
	for (int i = 0; i < args.length; i++) {
		res += args[i];
	}
	System.out.println(res);
}

public static void main(String[] args) {
	int[] params = { 1, 2, 3 };
	sum(params);
}

可變參數:

// 可變參數(他是數組參數的一種簡寫,會自動把...轉成數組)
static void sum(int... args) { 
	int res = 0;
	for (int i = 0; i < args.length; i++) {
		res += args[i];
	}
	System.out.println(res);
}

public static void main(String[] args) {
	int[] params = { 1, 2, 3, 4 };
	sum(params);
	sum(1, 2, 3, 4);
}

可變參數的本質:

可變參數是語法糖的一種,代碼反編譯后:

static transient void sum(int args[])
{
	int res = 0;
	for (int i = 0; i < args.length; i++)
		res += args[i];

	System.out.println(res);
}

public static void main(String args[])
{
	int params[] = {
		1, 2, 3, 4
	};
	sum(params);
	sum(new int[] {
		1, 2, 3, 4
	});
}

語法糖

什么是語法糖

語法糖(Syntactic Sugar),也稱糖衣語法,是由英國計算機學家 Peter.J.Landin 發明的一個術語,指在計算機語言中添加的某種語法。

這種語法對語言的功能並沒有影響,但是更方便程序員使用。簡而言之,語法糖讓程序更加簡潔,有更高的可讀性。

解語法糖

語法糖的存在主要是方便開發人員使用。但其實,Java 虛擬機並不支持這些語法糖,這些語法糖在編譯階段就會被還原成簡單的基礎語法結構,這個過程就是解語法糖。

說到編譯,大家肯定都知道,Java 語言中,javac命令可以將后綴名為.java的源文件編譯為后綴名為.class的可以運行於 Java 虛擬機的字節碼。

如果你去看com.sun.tools.javac.main.JavaCompiler的源碼,你會發現在compile()中有一個步驟就是調用desugar(),這個方法就是負責解語法糖的實現的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM