Java編程基礎-1(In Neusoft)

  Java中基本數據類型精度由低到高依次爲 byte、short、int、long、float、double。short和char同級,相互轉換時需要顯式轉換。   低精度賦值給高精度不需要顯式指明,這是默認轉換。

        java中boolean數據類型就只有true或者false,沒有別的,沒有0假,非0真的說法。&&、||有短路機制,&、|沒有短路機制。
        位運算在底層都是基於二進制的。
        賦值運算表達式(assign expr)的值爲等號右邊的值,表達式的類型取決於表達式中數據類型級別最高的操作數。(注意類型轉換)
        switch(expression)中表達式必須爲整型,而且必須爲:byte、short、int、char的任何一種,不包括long。char在本質上還是int。

20:53 2011/08/11 
--------------------------------------------------------------------------------------------------------------------
        聲明數組int[] myArray;、構造數組myArray = new int[2]、初始化數組myArray[0]=1;myArray[1]=2;。{}大括號爲數組賦值。
        for循環判斷條件時,當第一次就不滿足條件時,就退出整個for循環執行後面代碼。
       類中的方法代碼存儲在方法區(method area)中,所有對象共享方法,各個對象不會單獨存儲一份方法。
12:04 2011/08/15
       switch(expression)中表達式必須爲整型,而且必須爲:byte、short、int、char的任何一種,不包括long。char在本質上還是int。
       case ...:case後面必須是常量或者常量表達式。//此處要特別注意,不能在case中使用變量。
11:46 2011/08/16
-------------------------------------------------------------------------------------------------------------------
        static{}靜態代碼塊,優先執行,而且只執行一次。static變量存儲在靜態存儲區,區別堆內存。static屬性在第一次被加載到JVM中後,分配靜態存儲區,在JVM終止前不再分配空間。
        默認下,eclipse對於靜態屬性、方法會以斜體顯式。
        靜態方法中不能使用this關鍵字,this表示當前對象引用,靜態方法直接通過類名訪問時可以沒有對象。
        靜態方法中可以訪問靜態變量,不可以直接訪問非靜態變量,同樣是:靜態方法直接通過類名訪問時可以沒有對象,那麼就還沒有非靜態變量。但是可以通過實例化類,對象.變量來訪問非靜態變量。
        實例變量賦值:所有數據類型都會被加載到JVM中賦予默認初值。
        類的成員有屬性、方法、程序塊(block)。非靜態塊格式直接一個大括號{},非靜態程序塊執行多次,實例化一個對象執行一次非靜態塊。
        繼承也稱作子類化。
        子類實例化是在子類構造器第一行代碼轉到父類構造器,當父類構造器執行完畢後才執行子類構造器後面的代碼。//所以所謂的在實例化子類時,先調用父類的構造器,其實,本質上還是先執行子類構造器,只是在子類構造器的第一行代碼前,編譯器默認去調用其父類默認構造器。
        重載發生在一個類中,重寫發生在繼承中,當然也就是發生在多個類的情況下。
        super(),調用父類構造器。this(),調用本類構造器。這兩個構造器只能寫在第一行。括號中傳幾個參數就去找帶幾個參數的的構造器。
        super.,表示對父類的引用,this.,表示對當前對象的引用。
        子類在繼承時隱藏父類的屬性、方法,可以通過super.來調用父類的屬性、方法。
        final修飾變量表示Java中常量,賦值是在:1、聲明時賦值或者,2、在構造器中賦值,3、在非靜態代碼塊中賦值。final修飾方法時,在繼承過程中子類不能重寫該方法。final修飾類時,該類不能被繼承,也就是所謂的最終類。
         abstract修飾方法時,只能放在抽象類中,抽象方法沒有方法體,只能聲明。
         抽象類中可以有抽象方法和具體方法(可以全部是抽象方法,也可以全部是具體方法),也可以有屬性。//注意區別接口,接口中只能有抽象方法,或者常量,不能有具體方法。
         在接口中public static final修飾屬性是默認的,public abstract修飾方法是默認的。
18:01 2011/08/16
----------------------------------------------------------------------------------------------------------------------
        方法重載不能以返回值作爲重載區別,因爲假設可以的話,eg:public void test(),public int test(),當調用方法時:對象.test(),不知道調用哪個方法。
         引用數據類型轉換,上轉型(upcasting)、下轉型(downcasting)。
        Object是Java語言中唯一一個沒有父類的類。
10:01 2011/08/17
        public int hashCode();public String toString();public boolean equals(Object obj)(比較兩個對象引用值是否相等,即地址是否相同)。
         System.out.println(p),當p是引用數據類型時,p會自動調用toString()方法。沒有重寫父類toString()方法時自動調用Object繼承來的toString方法,當重寫了toString方法後調用重寫後的toString方法。
        導入包中所有類,導入包中單個類。包管理的是類文件,不是源文件。
        classpath表示類路徑,當有導入包時,編譯包含外部包的源文件需要正確配置類路徑,在classpath中添加包全名第一級目錄的父目錄。
        把包名當做一個一個整體,添加整個包所在操作系統的路徑。例如包名:com.lzh.chapter,整個包在D:\根目錄下面,即D:\com\lzh\chapter,在類路徑中配置D:;當整個包在D:\com目錄下,即D:\com\com\lzh\chapter,則類路徑配置爲D:\com;。
        在DOS窗口下執行帶包的類文件時,必須java+類文件全名(即帶上包名的類文件),即使類文件就在當前DOS所在目錄。
12:00 2011/08/17
        public String substring(int beginIndex,int endIndex),關於字符串求子串函數,將字符串看成字符數組來看待,最小索引爲0,結束索引不包括在子串在內,比如,str.substring(0,5),求的是從0到4位置的子串,不是0到5位置的子串。
17:30 2011/08/17
        單例模式思想:首先要對類中構造方法聲明爲private,使得在其它類中創建對象時不能使用new運算符,然後通過提供創建對象的方法來創建對象。
        創建對象的方法要聲明爲static,使得可以通過類名調用方法來創建對象。在類中定義一個該類對象的靜態引用,並調用構造方法生成一個對象。
        創建對象的方法返回靜態引用即可。
20:55 2011/08/17
--------------------------------------------------------------------------------------------------------------------------
         String轉成包裝類,大部分包裝類都提供了類似Integer(String s)這樣接受字符串參數的構造器。Character和Boolean特殊,Character沒有提供字符串參數構造器。
         注意:包裝類的equals方法和toString方法都重寫了,equals比較的是值是否相等,toString是返回的是以值爲內容的字符串。
        注意在接受各種類型的字符串,要轉成相應包裝類時,對字符串是有要求的,比如字符串轉整型時,字符串只能是數字,且長度不能超過整型所表示的32位。
        包裝類轉基本數據類型:通過包裝類方法:typeValue(),如:a.intValue(),b.longValue()將引用a、b轉換爲基本數據。
       注意:對於包裝類,可以直接將基本數據賦值給引用數據,只有在這裏是特例,例如:Integer i = 10。其實這裏是裝箱,在底層用了裝箱機制,首先將10轉換成對象,再將對象的引用傳給i。
       屬性、方法、程序塊、內部類,--->類的組成部分(類的成員)。
       局部內部類:定義在方法中的類,只能在當前方法中使用該類。
       1、當內部類定義了和外部類相同的變量、方法時,會覆蓋外部類變量、方法,在內部類中要想訪問外部類同名變量和方法只能通過這種方式:外部類名.this.同名變量(同名方法)。2、內部類可以直接使用外部類的變量和方法,不需要實例化。3、外部類不能直接使用內部類的變量和方法,必須通過實例化內部類,通過對象才能調用內部類的變量和方法。外部類的方法同樣如此,只能通過實例化內部類對象才能使用內部類的變量和方法。
19:14 2011/08/18

        可以把內部類當做類的普通成員變量或者成員函數來看待,static可以修飾類的變量和方法,那麼也可以修飾內部類,當修飾內部類時,可以類比靜態方法,靜態方法中是不可以直接使用外部類的非靜態變量,靜態方法中可以直接使用外部類中靜態變量。
        從其它類訪問內部類:對於非靜態內部類,先new一個外部類對象,Outer o = new Outer(),然後再通過這種格式:Outer.Inner oi = o.new Inner()來實例化一個內部類,可以將Outer.Inner整體看成一個類型,o.new看成new操作符。對於靜態內部類又例外:Outer.Inner oi = new Outer.Inner()。
        String類型轉包裝類:1、通過包裝類構造器。2、通過包裝類靜態方法,比如:str = “123”,Integer.valueOf(str)。
       String類型轉基本數據類型:通過包裝類的靜態方法,int i = Integer.parseInt(“123”)。
       注意:類的訪問權限只能是public或者default(friendly、package),一定不能是private或者protected。屬性或者方法可以是四種訪問修飾符,訪問權限由高到低:public、protected、default、private。
       抽象類中定義的抽象方法在子類繼承時必須將其實現,總結:抽象方法在子類中必須實現,否則只能將子類定義成抽象類。
       抽象類中可以有構造器,接口中沒有構造器。//接口中所有方法都爲抽象方法,所以不能有構造方法。
20:54 2011/08/18
------------------------------------------------------------------------------------------------------------
        Java利用面向對象的方法來處理異常,異常同樣是對象,異常對象是由JVM創建。
        NullPointerException,空指針異常,在C#中叫做NullReferenceException(空引用異常),在Java中也叫空引用異常更好。
        一個try後面可以跟多個catch,但是多個catch只能捕獲一個,捕獲到一個catch後,後面的catch不再捕獲。
catch塊不能在沒有try塊而單獨存在。在沒有finally塊時,不能只有try,而沒有catch。在有finally塊時,可以只有try,沒有catch,構成try...finally...。
        finally塊無論是否發生異常都會執行,catch塊只會在發生異常時才執行。catch塊中有return結束時,當catch塊執行後,finally塊同樣會執行,所以return對於finally塊不起作用,但是對於finally塊後面的代碼是起作用的,也就是說finally塊後面的代碼是不執行的。
        try是catch和finally存在的前提,沒有try就一定不能有catch或者finally,try可以和catch或者finally中一個或者兩個存在。
        System.exit(0),表示終止JVM,當遇到該語句時,其後面的代碼塊一定不會再執行。JVM是執行Java代碼的基礎。
        Throwable 類是 Java 語言中所有錯誤或異常的超類,Throwable是一個類不是接口,它下面的兩個直接子類:Error、Exception。
11:54 2011/08/19
-----------------------------------------------------------------------------------------------------------------------------------
        關於String的public String substring(int beginIndex,int endIndex)方法需要特別注意,返回beginIndex到endIndex-1的子串,正常情況下,endIndex應該<length(),不可能等於字符串長度,但是對於該方法例外,endIndex可以取到length(),表示從beginIndex到最後一個字符,等同於substring(int beginIndex),對於endIndex超過字符串長度時會拋出字符串下標越界異常。在charAt(str.length())就會拋出下標越界,但是substring(int beginIndex,str.length())就例外,記住這個例外。
2011/8/25

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章