1. 程式人生 > >0717 第十二次作業

0717 第十二次作業

判斷 vat 機制 連接 oid 成員 垃圾回收機制 ket setname

一、選擇題
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 第十二次作業