0717 第十二次作業
一、選擇題
1. C
2. B
3. C
4. AC
5. AB
6. BD
7. AC
8. BC
二、判斷題
1. T
2. F
3. T
4. T
5. T
6. F
7. T
8. T
9. F
10. T
11. F
三、簡答題
1. final和abstract關鍵字的作用
final:
final修飾的變量會變成常量,只能被賦值一次;
final修飾的方法不能被重寫;
final修飾的類不能被繼承。
abstract:
abstract修飾的方法是抽象方法,抽象方法沒有方法體,且一定在抽象類或接口中;
abstract修飾的類是抽象類,抽象類不一定有抽象方法,抽象類不能被實例化,抽象類的子類要麽是抽象類,要麽必須重寫抽象類中的所有抽象方法。
2. 接口和抽象類的聯系與區別
抽象類和普通類想必只是多了可以定義抽象方法而已;
抽象類的成員變量可以是變量也可以是常量;接口的成員變量只能是常量;
抽象類有構造方法;接口沒有構造方法;
抽象類的成員方法可以是抽象方法也可以不是,接口的成員方法只能是抽象方法。
3. 內部類的類型及其特點
內部類是定義在類中的類,主要包括成員內部類、靜態內部類、局部內部類和匿名內部類。
成員內部類:
成員內部類是最一般的內部類,其訪問特點有:
a. 內部類可以直接訪問外部類的成員,包括私有的。
b. 外部類要訪問內部類的成員必須創建對象,格式為 外部類名.內部類名 對象名 = 外部類對象.內部類對象;
靜態內部類:
靜態內部類用static修飾,其訪問方式是:
外部類名.內部類名 對象名 = 外部類名.內部類對象;(習慣把new放在=的右邊)
若外部類也是靜態的則可直接用 外部類名.內部類名.內部類方法 對內部類方法進行訪問。
局部內部類:
局部內部類定義在方法中,不能通過其他方法直接進行訪問。
要訪問局部內部類,需要在該類所在的方法內部創建對象。
匿名內部類:
當某個局部內部類在使用過程中只需創建一個對象時,就可以使用匿名內部類,因為沒有類名,也就不能有構造器,匿名內部類必須且只能繼承一個父類或一個接口,其格式為:
new 父類構造器名(參數列表){
匿名內部類類體;
}
或:
new 實現接口(){
匿名內部類類體;
}
4. 介紹Java垃圾回收機制
在Java中不需要程序員直接控制內存回收,而是由JRE在後頭自動回收不再使用的內存,這就是垃圾回收機制。
垃圾回收機制可以提高編程效率,保護程序完整性,其特點有:
*垃圾回收機制只負責回收JVM堆內存中的對象空間,不負責棧內存中的數據;
*對於物理連接,如數據庫連接、輸入流輸出流、Socket鏈接無能為力,只能手動關閉;
*垃圾回收的發生不可預知,程序無法精確的控制垃圾回收機制執行;
*可將對象的引用變量設置為null,暗示垃圾回收機制可以回收該對象;
*JVM有多種垃圾回收實現算法,表現各異;
*垃圾回收機制回收對象前,會先調用它的finalize方法;
*程序員可以通過System.gc()通知系統進行回收,但不一定會回收;
*不要主動調用對象的finalize方法,應交給垃圾回收機制。
五、編碼題
1.
1 abstract class Animal { 2 private String name; 3 private String color; 4 private String type; 5 6 public Animal(){} 7 public Animal(String name,String color,String type){ 8 this.name = name; 9 this.color = color; 10 this.type = type; 11 } 12 13 public void setName(String name){ 14 this.name = name; 15 } 16 public String getName(){ 17 return this.name; 18 } 19 public void setColor(String color){ 20 this.color = color; 21 } 22 public String getColor(){ 23 return this.color; 24 } 25 public void setType(String type){ 26 this.type = type; 27 } 28 public String getType(){ 29 return this.type; 30 } 31 32 public abstract String shout(); 33 public abstract String eat(); 34 } 35 36 interface Swim { 37 public abstract String swim(); 38 } 39 40 class Rabbit extends Animal { 41 public Rabbit () {} 42 public Rabbit (String name,String color,String type){ 43 super(name,color,"哺乳類"); 44 } 45 46 public String eat(){ 47 return "愛吃胡蘿蔔"; 48 } 49 public String shout(){ 50 return "嘰嘰地叫"; 51 } 52 } 53 54 class Frog extends Animal implements Swim { 55 public Frog () {} 56 public Frog (String name,String color,String type){ 57 super(name,color,"非哺乳類"); 58 } 59 60 public String eat(){ 61 return "愛吃蟲子"; 62 } 63 public String shout(){ 64 return "呱呱地叫"; 65 } 66 public String swim(){ 67 return "遊蛙泳"; 68 } 69 } 70 71 public class Demo_Animal { 72 public static void main(String[] args){ 73 Animal r1 = new Rabbit("美人","黑"," "); 74 System.out.println("那只" + r1.getColor() + "色的,叫" + r1.getName() + "的兔子正在" + r1.shout()); 75 System.out.println("兔子是" + r1.getType() + "," + r1.eat()); 76 System.out.println("============================"); 77 Animal f2 = new Frog(); 78 Frog f1 = (Frog)f2; 79 f1.setName("大兵"); 80 f1.setColor("綠"); 81 f1.setType("非哺乳類"); 82 System.out.println("那只" + f1.getColor() + "色的,叫" + f1.getName() + "的青蛙正在" + f1.shout()); 83 System.out.println("青蛙是" + f1.getType() + "," + f1.eat()); 84 System.out.println("青蛙" + f1.swim()); 85 } 86 }
2.
1 interface MovieActor { 2 public abstract void movieAct(); 3 } 4 5 interface DramaActor { 6 public abstract void dramaAct(); 7 } 8 9 interface Singer { 10 public abstract void sing(); 11 } 12 13 class Entertainer implements MovieActor,DramaActor,Singer{ 14 private String name; 15 16 public Entertainer(){} 17 public Entertainer(String name){ 18 this.name = name; 19 } 20 21 public void setName(String name){ 22 this.name = name; 23 } 24 public String getName(){ 25 return name; 26 } 27 28 public void movieAct(){ 29 System.out.println("我能演電影"); 30 } 31 public void dramaAct(){ 32 System.out.println("我能演電視劇"); 33 } 34 public void sing(){ 35 System.out.println("我會唱歌"); 36 } 37 } 38 39 public class Demo_SuperStar { 40 public static void main(String[] args) { 41 Entertainer ma = new Entertainer("馬素素"); 42 System.out.println("大家好,我是" + ma.getName()); 43 ma.movieAct(); 44 ma.dramaAct(); 45 ma.sing(); 46 } 47 }
六、可選題
1.
2.
0717 第十二次作業