方法是一段可以重複調用的代碼塊,這個代碼塊實現了某個功能,當我們的程序中需要這一個功能的時候,調用這個方法即可,不再需要重複書寫這個功能的代碼。
方法的定義格式
public static ( ,... ){ 方法體; [return 表達值] 注意:返回值類型為void的時候,方法沒有返回值,return可以省略 }
格式說明:
public 表示公共的,修飾的方法可以在任意類中使用。
static 表示靜態的,修飾的方法可以通過類名直接調用,如若在同一個類中,類名可以省略,直接通過方法名調用。
返回值類型 表示通過調用方法可以得到的結果的數據類型,它可以是Java數據類型中的任意數據類型。
void是個特殊的返回值類型,它表示這個方法完成功能,但是不返回,所以當返回值類型為void的時候,return可以省略。
如果返回值是某個具體的數據類型,則表示這個方法完成後會返回一個具體值,那麼在方法體的最後需要用一個return語句返回這個值。
方法名稱 表示方法的名字,應該符合標識符規範
參數列表 表示這個方法要完成功能需要參照的數據。
定義方法時稱作形參,調用方法時需要給出具體的參數值稱作實參。實參與形參一一對應。
一個方法可以有多個參數,用逗號隔開。如:
參數類型1 參數名字1,參數類型2 參數名字2……
方法體 放在{}中,是實現方法功能的代碼塊。
如果方法不包含參數,且沒有返回值,我們稱為無參無返回值的方法。
方法的使用分為兩步:
第一步,定義方法
例如:下面代碼定義了一個方法名為 show ,沒有參數,且沒有返回值的方法,執行的操作為輸出 “ welcome to Java. ”
注意:
方法體放在一對大括號中,實現特定的操作
方法名主要在調用這個方法時使用,需要注意命名的規範,一般採用第一個單詞首字母小寫,其它單詞首字母大寫的形式
第二步,調用方法
當需要調用方法執行某個操作時,可以先創建類的對象,然後通過 對象名.方法名(); 來實現
例如:在下面的代碼中,我們創建了一個名為 hello 的對象,然後通過調用該對象的 show( ) 方法輸出信息
public class HelloWorld { public static void main(String[] args) { // 創建對象,對象名為hello HelloWorld hello = new HelloWorld(); // 調用方法 hello.show(); } //定義方法 public void show() { System.out.println("Welcome to Java."); } }
運行結果為:Welcome to Java.
如果方法不包含參數,但有返回值,我們稱為無參帶返回值的方法。
例如:下面的代碼,定義了一個方法名為 calSum ,無參數,但返回值為 int 類型的方法,執行的操作為計算兩數之和,並返回結果
public int calcSum{ int a=5; int b=12; int sum=a+b; return sum; }
在 calSum( ) 方法中,返回值類型為 int 類型,因此在方法體中必須使用 return 返回一個整數值。
調用帶返回值的方法時需要注意,由於方法執行後會返回一個結果,因此在調用帶返回值方法時一般都會接收其返回值並進行處理。如:
public class HelloWorld { public static void main(String[] args) { // 創建名為hello的對象 HelloWorld hello = new HelloWorld(); // 調用方法並接收方法的返回值,保存在變量sum中 int sum = hello.calcSum(); System.out.println("和為:" + sum); } // 定義無參帶返回值的方法 public int calcSum() { int a= 5; int b =12; int sum =a + b; // 使用return返回值 return sum; } }
運行結果為:和為:17
不容忽視的“小陷阱”:
1、 如果方法的返回類型為 void ,則方法中不能使用 return 返回值!
public void showInfo(){ return "Java"; }
2、 方法的返回值最多隻能有一個,不能返回多個值
public int getInfo(){ int score1=94; int score2=87; return score1,score2; }
3、 方法返回值的類型必須兼容,例如,如果返回值類型為 int ,則不能返回 String 型值
public int getInfo(){ String name="java"; return name; }
有時方法的執行需要依賴於某些條件,換句話說,要想通過方法完成特定的功能,需要為其提供額外的信息才行。例如,現實生活中電飯鍋可以實現“煮飯”的功能,但前提是我們必須提供食材,如果我們什麼都不提供,那就真是的“巧婦難為無米之炊”了。我們可以通過在方法中加入參數列表接收外部傳入的數據信息,參數可以是任意的基本類型數據或引用類型數據。
我們先來看一個帶參數,但沒有返回值的方法:
public void show(String name){ System.out.println("歡迎您,"+name); }
上面的代碼定義了一個 show 方法,帶有一個參數 name ,實現輸出歡迎消息。
調用帶參方法與調用無參方法的語法類似,但在調用時必須傳入實際的參數值
對象名.方法名(實參1,實參2,......,實參n)
很多時候,我們把定義方法時的參數稱為形參,目的是用來定義方法需要傳入的參數的個數和類型;把調用方法時的參數稱為實參,是傳遞給方法真正被處理的值。
一定不可忽視的問題:
1、 調用帶參方法時,必須保證實參的數量、類型、順序與形參一一對應
2、 調用方法時,實參不需要指定數據類型
3、 方法的參數可以是基本數據類型,如 int、double 等,也可以是引用數據類型,如 String、數組等
4、 當方法參數有多個時,多個參數間以逗號分隔
如果方法既包含參數,又帶有返回值,我們稱為帶參帶返回值的方法。
例如:下面的代碼,定義了一個 show 方法,帶有一個參數 name ,方法執行後返回一個 String 類型的結果
public String show(String name){ return "歡迎你,"+name; }
調用帶參帶返回值的方法:
HelloWorld hello =new HelloWorld(); String welcome =hello.show("java"); System.out.println(welcome);
結果為:歡迎你,java
字符串
在程序開發中字符串無處不在,如用戶登陸時輸入的用戶名、密碼等使用的就是字符串。其實,在前面的章節中我們就已經使用了字符串,例如我們在控制檯中輸出的 "Hello World"
在 Java 中,字符串被作為 String 類型的對象處理。 String 類位於 java.lang 包中。默認情況下,該包被自動導入所有的程序。
創建 String 對象的方法:
String s1="java"; String s2=new String(); String s3=new String("java");
String 對象創建後則不能被修改,是不可變的,所謂的修改其實是創建了新的對象,所指向的內存空間不同。
String 類提供了許多用來處理字符串的方法,例如,獲取字符串長度、對字符串進行截取、將字符串轉換為大寫或小寫、字符串分割等,下面我們就來領略它的強大之處吧。
String 類的常用方法:
結合代碼來熟悉一下方法的使用:
運行結果:
友情提示:
1. 字符串中字符的索引從0開始,範圍為 0 到 字符串長度-1
2. 使用 indexOf 進行字符或字符串查找時,如果匹配返回位置索引;如果沒有匹配結果,返回 -1
3. 使用 substring(beginIndex , endIndex) 進行字符串截取時,包括 beginIndex 位置的字符,不包括 endIndex 位置的字符
那麼,“==” 和 equals() 有什麼區別呢?
==: 判斷兩個字符串在內存中首地址是否相同,即判斷是否是同一個字符串對象
equals(): 比較存儲在兩個字符串對象中的內容是否一致
PS:字節是計算機存儲信息的基本單位,1 個字節等於 8 位, gbk 編碼中 1 個漢字字符存儲需要 2 個字節,1 個英文字符存儲需要 1 個字節。所以我們看到上面的程序運行結果中,每個漢字對應兩個字節值,如“學”對應 “-47 -89” ,而英文字母 “J” 對應 “74” 。同時,我們還發現漢字對應的字節值為負數,原因在於每個字節是 8 位,最大值不能超過 127,而
漢字轉換為字節後超過 127,如果超過就會溢出,以負數的形式顯示。在Java中,除了可以使用 String 類來存儲字符串,還可以使用 StringBuilder 類或 StringBuffer 類存儲字符串,那麼它們之間有什麼區別呢?
String 類具有是不可變性。
程序運行時會額外創建一個對象,保存數據,當頻繁操作字符串時,就會額外產生很多臨時變量。使用 StringBuilder 或 StringBuffer 就可以避免這個問題。至於 StringBuilder 和StringBuffer ,它們基本相似,不同之處,StringBuffer 是線程安全的,而 StringBuilder 則沒有實現線程安全功能,所以性能略高。因此一般情況下,如果需要創建一個內容可變的字符串對象,應優先考慮使用 StringBuilder 類。
那麼如何定義 StringBuilder 類的對象呢? 我們來看下面的代碼:
// 創建一個StringBuilder對象,用來存儲字符串 StringBuilder hobby=new StringBuilder("java"); StringBuilder 類提供了很多方法來操作字符串:
例如:在下面的示例代碼中,創建了 StringBuilder 對象,用來存儲字符串,並對其做了追加和插入操作。這些操作修改了 str 對象的值,而沒有創建新的對象,這就是 StringBuilder 和 String 最大的區別。
運行結果:
關鍵字: 功能 HelloWorld 返回值類型