Java入墳day08 原地昇天の方法(過載,構造,返回值)
Java入墳day08 原地昇天の方法(過載,構造,返回值)
最後做題8
方法的理解和語法格式:
1.解決某一件事的功能實現。方法,是一段程式碼塊的封裝,方法中的程式碼應圍繞某一功能的實現來寫,目標明確,邏輯清晰。方法的語法格式
2.格式:在Java中,宣告一個方法的具體語法格式如下:
修飾符 返回值型別 方法名(引數型別 引數名1,引數型別 引數名2,......){
執行語句
1.方法的呼叫
2.變數的操作:宣告 賦值 修改
3.程式結構:選擇結構 迴圈結構………
return 返回值;
}
對於上面的語法格式中具體說明如下:
修飾符:方法的修飾符比較多,有對訪問許可權進行限定的,有靜態修飾符static,還有最終修飾符final等,這些修飾符在後面的學習過程中會逐步介紹
有返回值:基本資料型別 類和介面 沒有返回值:void
引數型別:用於限定呼叫方法時傳入引數的資料型別
引數名:是一個變數,用於接收呼叫方法時傳入的資料
return關鍵字:用於結束方法以及返回方法指定型別的值
返回值:被return語句返回的值,該值會返回給呼叫者
需要特別注意的是,方法中的“引數型別 引數名1,引數型別 引數名2”被稱作引數列表,它用於描述方法在被呼叫時需要接收的引數,如果方法不需要接收任何引數,則引數列表為空,即()內不寫任何內容。方法的返回值必須為方法宣告的返回值型別,如果方法中沒有返回值,返回值型別要宣告為void,此時,方法中return語句可以省略。
2.為什麼有的方法有引數,有的沒有?
1.榨汁機榨蘋果汁需要蘋果。吃飯需要食物。
以上描述的都是一個動作,都可以用程式的方法表示,實現這個動作所需消耗的物資,就對應方法的引數。一般情況下,引數都會在方法體中被使用和改變。
當然,不是所有的方法都需要引數,例如:跑步,說話,睡覺,玩手機,看書。
3.引數分形參和實參(引數的分類)
形參:形式引數,在宣告一個方法時,方法名後面的小括號中,就是形參,
格式:(引數資料型別 引數名)
實參:實際引數,在呼叫一個方法時,方法名後面的小括號中,就是實參。
格式:(引數值或一個同類型的變數)
補充:方法的狀態:方法編寫完成後,沒有呼叫的狀態叫作方法的宣告,被其它方法呼叫時,叫呼叫狀態。
榨蘋果汁,吃飯,跑步,說話(背詩歌),睡覺,玩手機,看書。
4.方法的返回值
1.返回值指的是:根據實際的業務需求,對某一功能用程式實現後,需要有一定的產出。
比如:榨一杯蘋果汁,最後會產出一杯蘋果汁。這個時候就有人會問:引數和返回值之間好像有著某種聯絡?
其實,這兩者之間沒有任何必然的聯絡。也就是說,一個方法,可以有引數,也可以沒有引數,可以有引數,沒有返回值,也可以有引數,也有返回值…
打個比方:蓋房子需要木頭,水泥,磚塊。這些都是“蓋房子”這個方法的引數,但是產出只有一個——房子。再打個比方,“種水稻”這個方法需要的引數有:種子,化肥,除草劑,產出的是大米。可天有不測風雲,萬一鬧災荒,可能顆粒無收,這個時候,沒有產出。當然,我們希望的是每年風調雨順,國泰民安。再比如,“學習”這個方法,需要的引數是:時間,精力,和思考。可最終是否學業有成,還得看個人在這個過程中是否用心了,有可能學業有成,知識高產出,也有可能中途放棄,或誤入歪門邪道,最終沒有產出。我們還是祝願所有的學員能夠學員有成!
2.返回值型別定義在方法名的前面,分兩種:
有返回值:基本資料型別,和引用資料型別(也就是類和介面)
無返回值:void
3.返回值用關鍵字return 表示。
案例:
種水稻,學習。
1.定義一個方法,模擬水稻種植施肥的過程:引數是肥料的袋數,如果小於5袋, 返回的是“營養不夠,捨不得花錢,產量低下,可不要怪我”,如果大 於5袋,輸出:“營養充足,可以畝產三千斤!”。
5.方法的呼叫和傳參
1.呼叫:方法分靜態和非靜態,同一個類中,靜態方法直接呼叫靜態方法,
靜態方法呼叫非靜態,要先建立物件,然後再呼叫。因為靜態方法是屬於類的,非靜態屬於物件的。
不同的類中:呼叫靜態方法,直接是類名.方法名();呼叫非靜態:建立物件,再呼叫。同一個類中:
主調方\被調方 靜態方法 例項方法
靜態 直接寫方法名調 建立物件,再調
例項 直接寫方法名調 直接寫方法名調(省略this)
不同的類中:
主調方\被調方 靜態方法 例項方法
靜態 直接寫類名.方法名()來調 建立物件,再調
例項 直接寫類名.方法名()來調 建立物件,再調
2.傳參,呼叫有多個引數的方法時,傳參的順序一致,資料型別保持一致。
6.構造方法
1.構造方法的作用:開闢記憶體空間,生成物件,俗稱類建立物件的過程叫例項化
特點:方法名和類名相同,沒有返回值一說,連void也沒有。
2.構造方法分為有參構造和無參構造
無參構造:jvm虛擬機器在載入類時會自動建立,每個類都預設有一個無參構造
有參構造:需要開發人員自己去編寫,它的作用是:例項化物件的同時,為物件的成員
屬性賦值。有參構造=無參構造+set方法
注意:如果開發人員編寫了有參構造,那麼虛擬機器就不會預設生成無參構造。如果仍要使用無參構造,需要手動編寫。
案例:以girlfriend類為例,從無參構造演化到有參構造。
7.方法的過載
1.一個類中,同名不同引數的兩個或以上的方法叫做方法的過載。
有參構造和無參構造就是典型的方法過載
2.如果類中只有有參構造,忘記了寫無參構造 ,類中的有參構造會覆蓋無參構造
3.如果類中有參構造和無參構造都忘記了寫 虛擬機器在載入該類的時候會預設幫你生成一個無參構造
有參構造會覆蓋預設的無參構造。
3.有參構造中的this指的是,呼叫該構造方法得到的那個物件。
Public User(String name){
This.name=name;
}
Public User(String name1){
This.name=name1;
}
New User(“張三”);
3.判斷是否是過載只看兩個因素:1.方法名相同,2.引數不同。
其它的返回值 修飾符什麼的都不用看。
例如:println()
8.成員變數和區域性變數
成員變數:類的成員,也叫全域性變數。全域性和區域性,哪個作用域大呢?
作用域又是什麼呢?變數的有效使用範圍
Java裡面的作用域的範圍是什麼呢?程式碼塊{} 類程式碼塊,方法程式碼塊,迴圈程式碼塊,無名程式碼塊, try-catch程式碼塊
思考:成員變數和屬性又是什麼關係呢?同一個東西的不同稱呼。從作用域的範圍看,叫成員變數,從類的剖析角度來看,叫屬性。
方法的引數屬於的區域性變數,形參相當於變數的宣告,實參相當於初始化(賦值)。
現有電視商品價格競猜活動,活動的規則:隨機出現一個商品名,使用者猜測它的價值,如果在規定次數內猜對,便可獲得此商品。模擬競猜活動,執行結果如下所示: (選作)
分析:1、準備一批用來競猜的商品
2、隨機獲取一件商品
Java程式:
1、定義物件所歸屬的類:商品類--Goods(屬性: 商品的名稱String name 商品對應的實際單價 int price)
2、模擬購入一批商品
多個Goods物件
3、
請猜測“公主電動車”的價格:1000
再大點!
再猜一次吧:5000
再小點!
再猜一次吧:2500
在小點!
再猜一次吧:2200
4次內沒有猜對,下次努力吧!
package SuperHomeWork;
public class Goods {
String name;
int price;
public void goods(){
System.out.printf("%s\n售價為%d",name,price);
}
}
package SuperHomeWork;
import java.util.Scanner;
public class QuessMachine {
public static void initial(Goods[] Goods){
Goods arr = Goods[(int) (Math.random()*3)];
System.out.printf("請猜測%s的價格\n",arr.name);
Scanner sc = new Scanner(System.in);
int i = 0;
do{
int in = sc.nextInt();
if (in == arr.price){
System.out.println("猜中啦!");
return;
} else if (in<arr.price) {
System.out.println("猜小啦!");
}
else if (in>arr.price){
System.out.println("猜大啦!");
}
i++;
if (i == 4){
System.out.println("4次內沒有對,下次加油吧!");
return;
}
}while (i<5);
}
}
package SuperHomeWork;
public class testGoods {
public static void main(String[] args) {
Goods good1 = new Goods();
good1.name = "騎上我心愛的小耗子(電動車)";
good1.price = 2600;
Goods good2 = new Goods();
good2.name = "神光棒";
good2.price = 600;
Goods good3 = new Goods();
good3.name = "電腦";
good3.price = 7000;
Goods[] arr = {good1,good2,good3};
QuessMachine.initial(arr);
}
}
感謝!點個贊8!