第1關:什么是類,如何創建類
1、編程要求:
根據提示,在右側編輯器Begin-End處補充代碼:
-
聲明一個
Dog類,給Dog類添加三個String類型的屬性,分別是name,color,variety,定義兩個方法,分別是,eat,run。 -
在
main方法中創建一個名為wuhuarou的Dog對象,並設置name為五花肉,color為棕色,variety為阿拉斯加。 -
使得調用
wuhuarou對象的eat方法能輸出啃骨頭,調用run方法能輸出叼着骨頭跑。
2、測試效果:
測試輸入:無
預期輸出:使用中文冒號
名字:五花肉,毛色:棕色,品種:阿拉斯加
啃骨頭
叼着骨頭跑
3、程序設計思路:
(1)定義屬性和方法。
(2)在主類的main方法中創建對應對象,設置Dog類的屬性。
(3)采用對象調用兩個類中的方法。
4、程序實現:
package step1; public class Test { public static void main(String[] args) { /********** Begin **********/ Dog wuhuarou = new Dog(); //創建Dog對象 //設置Dog對象的屬性 wuhuarou.name = "五花肉"; wuhuarou.color = "棕色"; wuhuarou.variety="阿拉斯加"; //輸出小狗的屬性 System.out.println("名字:" +wuhuarou.name + ",毛色:" +wuhuarou.color + ",品種:" +wuhuarou.variety ); //調用方法 wuhuarou.eat(); wuhuarou.run(); } } /********** End **********/ //在這里定義Dog類 /********** Begin **********/ class Dog{ String name; String color; String variety; void eat(){ System.out.println("啃骨頭"); } void run(){ System.out.println("叼着骨頭跑"); } } /********** End **********/
第2關:構造方法
1、編程要求:
根據提示,在右側編輯器Begin-End處補充代碼:
-
創建一個
Person類,給Person類定義一個無參構造方法和一個有參構造方法,有參構造方法定義兩個String類型參數name和sex,在main方法中調用無參構造和有參構造方法; -
調用無參構造方法輸出:
一個人被創建了; -
調用有參構造方法應根據輸入的數據輸出對應的結果,如輸入:
張三,男,則輸出:姓名:張三,性別:男,被創建了。
2、測試效果:
測試輸入:張富貴,未知
預期輸出:
一個人被創建了
姓名:張富貴,性別:未知,被創建了
3、程序設計思路:
(1)注意無參構造法的創建格式。
(2)有參和無參構造方法本質上涉及到的是方法的重載。
4、程序實現:
package step2; import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String name = sc.next(); String sex = sc.next(); /********** Begin **********/ //分別使用兩種構造器來創建Person對象 Person p1 = new Person(); Person p2 = new Person(name, sex); /********** End **********/ } } //創建Person對象,並創建兩種構造方法 /********** Begin **********/ class Person{ public Person() { System.out.println("一個人被創建了"); } public Person(String name,String sex) { System.out.println("姓名:" + name + ",性別:" + sex + ",被創建了"); } } /********** End **********/
5、題目總結:
(1)對象在被創建的時候,也就是被new的時候,會自動調用構造方法。
(2)如果定義的類沒有聲明構造方法,對象在創建時默認使用空的構造方法。
(3)構造方法沒有返回值,沒有參數,名稱必須與類名相同。
第3關:選擇題
1、選擇題答案:C CD
2、題目總結:
(1)第二題尤為注意方法的重載,在同一類中,如果方法名稱相同,則涉及到方法的重載,這兩個方法的參數列表必須有所區別,可以是變量類型,可以是變量數量。
第4關:This關鍵字
1、編程要求:
右側編輯器中已經編寫好了代碼,但是輸出結果不能讓我們滿意,請根據所學知識修改代碼,使其能輸出如下結果:
name:baby
age:45
sex:女
2、測試效果:
測試輸入:
baby,45,女
預期輸出:
name:baby
age:45
sex:女
3、程序設計思路:
(1)運用this關鍵字使構造方法傳入的參數修改類中的成員變量。
4、程序實現:
package step3; import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String name = sc.next(); int age = sc.nextInt(); String sex = sc.next(); Person p = new Person(name,age,sex); p.display(); } } class Person{ String name = "張三"; int age = 18; String sex = "男"; /********** Begin **********/ public Person(String name,int age,String sex){ this(age); this.name = name; this.sex = sex; } public Person(int age){ this.age = age; } public void display(){ System.out.println("name:" + name); System.out.println("age:" + age); System.out.println("sex:" + sex); } /********** End **********/ }
5、題目總結:
(1)this()調用的是Person自己的無參構造方法。
(2)this.name訪問的是Person對象自身的name,而方法參數中的name則表示方法傳入的值。
第5關:類與對象練習
1、編程要求:
我已經幫你創建好了兩個文件一個是WuMingFen.java,另一個是Test.java,你需要切換文件在兩個文件中編寫代碼來完成本關任務。
為“無名的粉”寫一個類:class WuMingFen 要求:
-
有三個屬性:面碼:
String theMa粉的分量(兩):int quantity是否帶湯:boolean likeSoup; -
寫一個構造方法,以便於簡化初始化過程,如:
WuMingFen f1 = new WuMingFen("牛肉",3,true);; -
重載構造方法,使得初始化過程可以多樣化:
WuMingFen f2 = new WuMingFen("牛肉",2);; -
如何使得下列語句構造出來的粉對象是酸辣面碼、2兩、帶湯的?
WuMingFen f3 = new WuMingFen();; -
寫一個普通方法:
check(),用於查看粉是否符合要求。即:將對象的三個屬性打印在控制台上。
2、測試效果:
我會對你編寫的代碼進行測試:
測試輸入:
牛肉,3,true
預期輸出:
面碼:牛肉,粉的份量:3兩,是否帶湯:true
面碼:牛肉,粉的份量:3兩,是否帶湯:false
面碼:酸辣,粉的份量:2兩,是否帶湯:true
測試輸入:
三鮮,1,true
預期輸出:
面碼:三鮮,粉的份量:1兩,是否帶湯:true
面碼:三鮮,粉的份量:1兩,是否帶湯:false
面碼:酸辣,粉的份量:2兩,是否帶湯:true
3、程序設計思路:
(1)首先觀察輸出中的不同點,一和二只有是否帶湯不同,三前兩項和一二都不相同,而根據要求三的構造方法沒有參數,所以想到在設置屬性時先將面碼和粉的份量定下來。
(2)一和二和明顯是構造方法不同重載形式造成的,由於一利用參數可以修改是否帶湯屬性,所以二的是否帶湯屬性一定來自WuMingFen的成員變量。
4、程序實現:
(1)WuMingFen類:
/********** Begin **********/ //在這里添加包名 step4 package step4; //創建類 添加屬性和方法 public class WuMingFen{ String theMa = "酸辣"; int quantity = 2; boolean likeSoup = false; public WuMingFen() { likeSoup = true; } public WuMingFen(String theMa, int quantity, boolean likeSoup) { this.theMa = theMa; this.quantity = quantity; this.likeSoup = likeSoup; } public WuMingFen(String theMa, int quantity) { this.theMa = theMa; this.quantity = quantity; } public void check(){ System.out.println("面碼:"+ theMa +",粉的份量:" + quantity + "兩,是否帶湯:" + likeSoup ); } } /********** End **********/
(2)Test類:
package step4; import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String theMa = sc.next(); int quantity = sc.nextInt(); boolean likeSoup = sc.nextBoolean(); /********** Begin **********/ //使用三個參數的構造方法創建WuMingFen對象 取名 f1 WuMingFen f1 = new WuMingFen(theMa, quantity, likeSoup); //使用兩個參數的構造方法創建WuMingFen對象 取名 f2 WuMingFen f2 = new WuMingFen(theMa, quantity); //使用無參構造方法創建WuMingFen對象 取名 f3 WuMingFen f3 = new WuMingFen(); //分別調用三個類的 check方法 f1.check(); f2.check(); f3.check(); /********** End **********/ } }
第6關:static關鍵字
1、編程要求:
現在編輯器中代碼有異常,請利用本關所學知識修改右側代碼使其能輸出如下結果:
hello educoder
我叫楚留香
我喜歡在educoder上學習java
2、程序設計思路:
(1)修改代碼即可,知道static修飾的規則。
3、程序實現:
package step5; public class Test { /********** Begin **********/ static String name = "楚留香"; static{ System.out.println("hello educoder"); } public static void main(String[] args) { System.out.println("我叫" + name); study(); } public static void study(){ System.out.println("我喜歡在educoder上學習java"); } /********** End **********/ }
4、題目總結:
(1)如果一個類的成員變量被static修飾了,那么所有該類的對象都共享這個變量,對於方法也一樣。(類名.變量名/方法名)
(2)靜態方法不能使用非靜態變量。
(3)靜態代碼塊是不需要依賴main方法就可以獨立運行的,其中只能直接調用靜態的屬性和方法,在類被加載的時候運行且只運行一次(必定運行一次)。
(4)在Java中是不能用static關鍵字修飾局部變量的。(人為規定)
其實這些變量都之所以叫局部變量,其作用域也只限於聲明它的方法體內。在方法被調用時,這些局部變量獲得內存空間,到方法執行結束時,他們所占據的內存空間就被釋放。
而static,public是用來聲明全局變量或是被其他對象引用的變量。
第7關:選擇題
1、選擇題答案:D EG B
