Java核心技術(shù)卷1讀書(shū)筆記

第3章 Java的基本程序設(shè)計(jì)結(jié)構(gòu)

  1. 文檔注釋以/*開(kāi)始以/結(jié)束

  2. 四種整型 int 32位 short 16位 long 64位 byte 8位。全是有符號(hào)整數(shù);和c/c++相比優(yōu)點(diǎn)是機(jī)器無(wú)關(guān),即在任何機(jī)器上其都是固定的位數(shù);int范圍-2147483648到2147483647;short范圍-215到215-1即-32768到32767;long范圍-263到263-1;byte范圍-128到127;short范圍是-32768到32767

  3. 數(shù)字字面量的類型:加后綴L的為long,如40L;加前綴0x的為十六進(jìn)制數(shù),如0xAA;加前綴0的為八進(jìn)制數(shù),如010表示十進(jìn)制數(shù)8;(Java7)加前綴0b的為二進(jìn)制數(shù),如0b1001表示十進(jìn)制數(shù)9。

  4. (Java7)為了方便讀出數(shù)字可以給數(shù)字字面量加上下劃線,如1_000_000

  5. 兩種浮點(diǎn)類型float和double。一般字面量默認(rèn)為double類型,除非加上F后綴。一般使用double處理數(shù)據(jù),float使用情況較少。

  6. boolean類型有true和false兩個(gè)值。整型和布爾值之間不能相互轉(zhuǎn)換。

  7. 變量名由應(yīng)為字母,數(shù)字,下劃線,和美元符號(hào)組成,且不能以數(shù)字打頭。

  8. StringBuilder可以用來(lái)構(gòu)建字符串。采用String加號(hào)連接字符串的方式過(guò)于低效。

StringBuilder bullder = new StringBuilder();builder.append('a');  //可以加一個(gè)字符
builder.append("ello"); //也可以加一個(gè)字符串
String str = builder.toString(); //hello,獲取String對(duì)象
  1. BigInteger類,大整數(shù),可以表示任意大的整數(shù),實(shí)現(xiàn)了任意精度的整數(shù)運(yùn)算;BigDecimal實(shí)現(xiàn)了任意精度的浮點(diǎn)數(shù)運(yùn)算
  2. 數(shù)組:使用int [] ints = new int[100]; String [] strs = new String[100];的形式創(chuàng)建數(shù)組。創(chuàng)建一個(gè)數(shù)字?jǐn)?shù)組時(shí),所有元素都初始化為0。boolean數(shù)組的元素初始化為false,對(duì)象數(shù)組的元素初始化為null
  • java中允許數(shù)組的長(zhǎng)度為0: int [] a = new int[0]; 數(shù)組a長(zhǎng)度為0和a為null是不同的概念。
  • String[] strs = {"hello","hi","good night","wow"};
  • new String[] {"hello","hi","good morning"}; 創(chuàng)建一個(gè)新的數(shù)組,可以賦給數(shù)組
  1. Arrays.toString(arr); 返回?cái)?shù)組的String形式。Arrays.sort(arr); 對(duì)數(shù)值型數(shù)組進(jìn)行排序。Arrays.binarySearch(arr,a);//二分查找
  2. 多維數(shù)組
double[][] b = new double[2][10];
int [][] a= {    {1,2},    {3,4}}

Java實(shí)際上沒(méi)有多維數(shù)組,只有一維數(shù)組。多維數(shù)組被解釋為“數(shù)組的數(shù)組”,即數(shù)組的元素還是數(shù)組。數(shù)組的每一行可以有不同的長(zhǎng)度:可以先指定數(shù)組的行,再分別指定其列如:

double[][] a = new double[5][]
for(int i = 0; i < a.length; i++) {
    a[i] = new double[i+1];
}

第4章 對(duì)象與類

  1. GregorianCalendar 日歷對(duì)象
  2. Date 時(shí)刻
  3. final。如果將字段(非靜態(tài))設(shè)置為final則必須保證每個(gè)構(gòu)造器執(zhí)行完后,這個(gè)字段的值都會(huì)被設(shè)置,并且在后面的操作中不會(huì)被修改。
  4. 常用的System.out.println()中的out就是System中的一個(gè)static final靜態(tài)常量。
  5. Math.PI是另一個(gè)static final常量。
  6. 什么時(shí)候使用靜態(tài)方法(加static),這個(gè)方法不需要對(duì)象的字段,所有參數(shù)都是外部傳入的;這個(gè)方法內(nèi)部只用到類的靜態(tài)域字段。
  7. 設(shè)計(jì)一個(gè)每個(gè)對(duì)象有唯一id字段的類:
class Employee {
    private static int nextId;
    private int id = assignId();
    private static int assignId() {
        int r = nextId;
        nextId++;
        return r;
    }
}
  1. 在一個(gè)構(gòu)造器中可以通過(guò)this(參數(shù)列表)調(diào)用類的另一個(gè)構(gòu)造器,但這個(gè)語(yǔ)句必須是第一個(gè)語(yǔ)句。
  2. 和靜態(tài)域類似,靜態(tài)塊也是在類加載時(shí)就被執(zhí)行。所以可以寫(xiě)一個(gè)不帶main函數(shù)餓hello world程序
public class HelloWorldWithoutMain {
    static {
        System.out.print("Hello,World!");
    }
}  //并沒(méi)有試驗(yàn)成功,衰
  1. 文檔注釋以/開(kāi)頭以/結(jié)尾。有類注釋域(字段)注釋、和方法注釋。標(biāo)記有@author表示作者,@parm 參數(shù);@return 返回值;@throws拋出異常描述。這些標(biāo)記多用于方法。類注釋和域注釋一般不寫(xiě)標(biāo)注(?),直接是/* */之間的內(nèi)容

第5章 繼承

  1. 繼承的一個(gè)原則是子類和父類具有is-a即是的關(guān)系。
  2. 子類自動(dòng)擁有父類的所有字段和方法;在子類方法中使用super.方法名()可以顯示地調(diào)用父類的方法,常用在覆寫(xiě)父類方法的時(shí)候。
  3. 抽象類不能被實(shí)例化,因?yàn)橛谐橄蠓椒ㄎ磳?shí)現(xiàn);抽象類一般設(shè)計(jì)來(lái)被繼承,子類來(lái)實(shí)現(xiàn)部分或全部抽象方法;如果只實(shí)現(xiàn)了部分抽象父類中的抽象方法,那么子類也必須聲明為抽象的,只有實(shí)現(xiàn)了抽象父類的全部抽象方法子類才能被聲明為非抽象的;
  4. 如果不對(duì)方法編寫(xiě)實(shí)現(xiàn)代碼,那么可以將方法聲明為abstract(抽象的)。含有抽象方法的類也必須是抽象的,應(yīng)該用abstract聲明。
  5. 除了含有不帶實(shí)現(xiàn)代碼的抽象方法,不能被實(shí)例化,抽象類和其他父類沒(méi)差別?字段、具體方法啥的也正常被繼承。
  6. 關(guān)鍵字extends表示繼承:class Manager extends Employee {} //Manager類繼承Employee類。
  7. 子類會(huì)繼承父類的域、方法。但不能訪問(wèn)其private內(nèi)容,但有。如Manager只能通過(guò)public的get方法來(lái)訪問(wèn)父類中的私有字段。
  8. 在子類方法中可以通過(guò)super.方法名()來(lái)調(diào)用父類方法。在構(gòu)造函數(shù)中可以通過(guò)super(參數(shù))來(lái)調(diào)用父類構(gòu)造函數(shù)(必須是第一條語(yǔ)句)。
  9. 如果不想一個(gè)類被繼承,可以用final修飾它。如果不想子類覆蓋特定的方法,可以使用final修飾該方法。
  10. 枚舉
  • 最簡(jiǎn)單的使用public enum Size{SMALL,MEDIUM,LARCE,EXTRA_LAREC};
  • 所有枚舉類型都是Enum類的子類
  • toString()返回枚舉常量名,如Size.SMALL.toString()返回字符串"SMALL"
  • 靜態(tài)方法valueOf(): Size s =Enum.valueOf(Size.class,"SMALL");
  • 靜態(tài)方法values(),返回包含全部么枚舉值的數(shù)組。如:Size[] values = Size.values();

第6章 接口與內(nèi)部類

  1. 接口中所有方法自動(dòng)默認(rèn)為public的,所有域自動(dòng)默認(rèn)為public static final的不用顯示地聲明。
  2. Double.compare(x,y)用來(lái)比較double數(shù)據(jù)x,y的大小,x > y 是返回1 x < y 是返回-1 x==y是返回0。
  3. Arrays.sort()可以給數(shù)組排序。入?yún)閿?shù)組。給數(shù)值型數(shù)組(int short long byte double float?)排序時(shí)按照數(shù)字從小大小的順序。也可以給對(duì)象排序Arrays.sort(Object[]) 這是傳入的對(duì)象數(shù)組應(yīng)該實(shí)現(xiàn)Comparable<T>接口,這個(gè)接口只有一個(gè)方法聲明public int compareTo(T o) 按照類似Double.compare()的方式編寫(xiě)。另外,如果是給集合類排序可以使用Collections.sort()方法,如下:
    Collections.sort(stuYears,new Comparator<String>() {
            @Override
            public int compare(String o1,String o2) {
                Integer x1 = Integer.valueOf(o1);
                Integer x2 = Integer.valueOf(o2);
                return x1 > x2 ? 1 : -1;
            }
        });
  1. 接口不能被實(shí)例化。但可以聲明一個(gè)接口變量,可以具體引用實(shí)現(xiàn)了這個(gè)接口的類。
  2. instance of是一個(gè)二元操作符。用來(lái)判斷檢查一個(gè)對(duì)象是否是某個(gè)類的實(shí)例,或者是否實(shí)現(xiàn)了某個(gè)接口。
  3. 一個(gè)類只能extend(繼承)一個(gè)父類,但能implement多個(gè)接口。
  4. 抽象類與接口的區(qū)別:抽象類是一種特殊的類,不能被實(shí)例化,含有抽象方法,抽象方法只有聲明沒(méi)有實(shí)現(xiàn),一個(gè)類只能最多繼承一個(gè)抽象類。接口不是類,一般只有一些方法的聲明,類可以實(shí)現(xiàn)implment多個(gè)接口,也可以有字段,接口中的

第11章 異常、斷言、日志和調(diào)試

  1. 在java中,異常對(duì)象都是派生于Throwable類的一個(gè)實(shí)例。從Throwable派生出Error類和Exception類。其中Error類描述了java運(yùn)行時(shí)內(nèi)部錯(cuò)誤和資源耗盡錯(cuò)誤。應(yīng)用程序不應(yīng)該拋出這種類型的對(duì)象。
  2. Exception又可以分為兩部分,一部分是RuntimeException,它是由程序錯(cuò)誤導(dǎo)致的異常,如越界訪問(wèn)數(shù)組、訪問(wèn)空指針等。其余的異常是為另一類。應(yīng)盡力避免RuntimeException異常的出現(xiàn)(通過(guò)檢查空指針,確保數(shù)組不越界等)。
  3. 派生于Error或RuntimeException類的所有異常成為未檢查(unchecked)異常。其它異常都為已檢查(checked)
  4. 可以在方法后用throws關(guān)鍵字表明這個(gè)方法可能拋出的異常,特別是在方法調(diào)用了一個(gè)拋出已檢查異常的方法或程序中用throw語(yǔ)句拋出一個(gè)已檢查異常。throws后可跟多個(gè)異常,用逗號(hào)隔開(kāi)。
  5. 一個(gè)方法必須聲明所有可能拋出的已檢查異常,而未檢查異常要么不可控制(Error),要么就應(yīng)該避免發(fā)生(RuntimeException)
  6. 通常,應(yīng)該捕獲(try catch)那些知道如何處理的異常,而將那些不知道怎樣處理的異常繼續(xù)進(jìn)行傳遞(throws)。

第12章 泛型程序設(shè)計(jì)

  1. 泛型對(duì)于集合類尤其有用
  2. 泛型程序設(shè)計(jì)意味著編寫(xiě)的代碼可以被很多不同類型的對(duì)象所重用。
  3. 在java7之后,構(gòu)造函數(shù)中可以省略泛型類型:ArrayList<String> strs = new ArrayList<>();
  4. 給集合指定類型確保了,一個(gè)集合中只能添加一種類型的數(shù)據(jù)
  5. 使用Java提供的集合類是容易的,但自己設(shè)計(jì)一個(gè)泛型類是困難的。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容