1. 程式人生 > >錯題整理10.18

錯題整理10.18

String類重寫了equlas方法,型別不同返回false,附上原始碼(jdk1.7)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

    public boolean equals(Object anObject) {

        if (this == anObject) {

            return

true;

        }

        if (anObject instanceof String) {

            String anotherString = (String) anObject;

            int n = value.length;

            

if (n == anotherString.value.length) {

                char v1[] = value;

                char v2[] = anotherString.value;

                int i = 

0;

                while (n-- != 0) {

                    if (v1[i] != v2[i])

                            return false;

                    i++;

                }

                return true;

            }

        }

        return false;

    }

 

 

private

default

protected

public

同一個類中

同一個包中

 

子類中

 

 

全域性範圍內

 

 

 

( 1 )對於外部類而言,它也可以使用訪問控制符修飾,但外部類只能有兩種訪問控制級別: public 和預設。因為外部類沒有處於任何類的內部,也就沒有其所在類的內部、所在類的子類兩個範圍,因此 private 和 protected 訪問控制符對外部類沒有意義。

( 2 )內部類的上一級程式單元是外部類,它具有 4 個作用域:同一個類( private )、同一個包( protected )和任何位置( public)。

( 3 ) 因為區域性成員的作用域是所在方法,其他程式單元永遠不可能訪問另一個方法中的區域性變數,所以所有的區域性成員都不能使用訪問控制修飾符修飾。

 

 

在GoF設計模式中,結構型模式有:

1.介面卡模式 Adapter

  介面卡模式是將一個類的介面轉換成客戶希望的另外一個介面。介面卡模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。

  兩個成熟的類需要通訊,但是介面不同,由於開閉原則,我們不能去修改這兩個類的介面,所以就需要一個介面卡來完成銜接過程。

2.橋接模式 Bridge

  橋接模式將抽象部分與它的實現部分分離,是它們都可以獨立地變化。它很好的支援了開閉原則和組合鋸和複用原則。實現系統可能有多角度分類,每一種分類都有可能變化,那麼就把這些多角度分離出來讓他們獨立變化,減少他們之間的耦合。

3.組合模式 Composite

  組合模式將物件組合成樹形結構以表示部分-整體的層次結構,組合模式使得使用者對單個物件和組合物件的使用具有一致性。

4.裝飾模式 Decorator

裝飾模式動態地給一個物件新增一些額外的職責,就增加功能來說,它比生成子類更靈活。也可以這樣說,裝飾模式把複雜類中的核心職責和裝飾功能區分開了,這樣既簡化了複雜類,有去除了相關類中重複的裝飾邏輯。 裝飾模式沒有通過繼承原有類來擴充套件功能,但卻達到了一樣的目的,而且比繼承更加靈活,所以可以說裝飾模式是繼承關係的一種替代方案。

5.外觀模式 Facade

 外觀模式為子系統中的一組介面提供了同意的介面,外觀模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。

外觀模式中,客戶對各個具體的子系統是不瞭解的,所以對這些子系統進行了封裝,對外只提供了使用者所明白的單一而簡單的介面,使用者直接使用這個介面就可以完成操作,而不用去理睬具體的過程,而且子系統的變化不會影響到使用者,這樣就做到了資訊隱蔽。

6.享元模式 Flyweight

 享元模式為運用共享技術有效的支援大量細粒度的物件。因為它可以通過共享大幅度地減少單個例項的數目,避免了大量非常相似類的開銷。.

      享元模式是一個類別的多個物件共享這個類別的一個物件,而不是各自再例項化各自的物件。這樣就達到了節省記憶體的目的。

7.代理模式 Proxy   

為其他物件提供一種代理,並由代理物件控制對原物件的引用,以間接控制對原物件的訪問。

 

     main()函式即主函式,是一個前臺執行緒,前臺程序是程式中必須執行完成的,而後臺執行緒則是java中所有前臺結束後結束,不管有沒有完成,後臺執行緒主要用與記憶體分配等方面。                                                                                           
 前臺執行緒和後臺執行緒的區別和聯絡:

1、後臺執行緒不會阻止程序的終止。屬於某個程序的所有前臺執行緒都終止後,該程序就會被終止。所有剩餘的後臺執行緒都會停止且不會完成。
2、可以在任何時候將前臺執行緒修改為後臺執行緒,方式是設定Thread.IsBackground 屬性。
3、不管是前臺執行緒還是後臺執行緒,如果執行緒內出現了異常,都會導致程序的終止。

4、託管執行緒池中的執行緒都是後臺執行緒,使用new Thread方式建立的執行緒預設都是前臺執行緒。
說明:   

        應用程式的主執行緒以及使用Thread構造的執行緒都預設為前臺執行緒                       
    使用Thread建立的執行緒預設情況下是前臺執行緒,在程序中,只要有一個前臺執行緒未退出,程序就不會終止。主執行緒就是一個前臺執行緒。而後臺執行緒不管執行緒是否結束,只要所有的前臺執行緒都退出(包括正常退出和異常退出)後,程序就會自動終止。一般後臺執行緒用於處理時間較短的任務,如在一個Web伺服器中可以利用後臺執行緒來處理客戶端發過來的請求資訊。而前臺執行緒一般用於處理需要長時間等待的任務,如在Web伺服器中的監聽客戶端請求的程式,或是定時對某些系統資源進行掃描的程式

 

A:形式引數可被視為local variable。形參和區域性變數一樣都不能離開方法。都只有在方法內才會發生作用,也只有在方法中使用,不會在方法外可見。

B: 對於形式引數只能用final修飾符,其它任何修飾符都會引起編譯器錯誤。但是用這個修飾符也有一定的限制,就是在方法中不能對引數做任何修改。 不過一般情況下,一個方法的形參不用final修飾。只有在特殊情況下,那就是:方法內部類。  一個方法內的內部類如果使用了這個方法的引數或者區域性變數的話,這個引數或區域性變數應該是final。 

C:形參的值在呼叫時根據呼叫者更改,實參則用自身的值更改形參的值(指標、引用皆在此列),也就是說真正被傳遞的是實參。

D:方法的引數列表指定要傳遞給方法什麼樣的資訊,採用的都是物件的形式。因此,在引數列表中必須指定每個所傳遞物件的型別及名字。想JAVA中任何傳遞物件的場合一樣,這裡傳遞的實際上也是引用,並且引用的型別必須正確。--《Thinking in JAVA》

 

intValue()是把Integer物件型別變成int的基礎資料型別; 
parseInt()是把String 變成int的基礎資料型別; 
Valueof()是把String 轉化成Integer物件型別;(現在JDK版本支援自動裝箱拆箱了。)

 

1、throws出現在方法頭,throw出現在方法體 2、throws表示出現異常的一種可能性,並不一定會發生異常;throw則是丟擲了異常,執行throw則一定丟擲了某種異常。 3、兩者都是消極的異常處理方式,只是丟擲或者可能丟擲異常,是不會由函式處理,真正的處理異常由它的上層呼叫處理。