摘要:當(dāng)使用構(gòu)造器時(shí),無法改變所構(gòu)造的對(duì)象類型,而方法將返回一個(gè)類對(duì)象,這是的子類。關(guān)鍵字的兩種用法一是引用本類成員變量,二是調(diào)用本類其他構(gòu)造函數(shù)。不過兩者調(diào)用構(gòu)造函數(shù)時(shí),調(diào)用語句必須放在構(gòu)造函數(shù)第一行。
閱讀原文:【讀】Java核心技術(shù)卷1
看到這本書時(shí),我的內(nèi)心是崩潰的,卷1就700多頁,但是這本書是很多前輩所推薦的,想必其中必有精華所在,硬著頭皮上吧。
如何閱讀本書拿到書的第一眼肯定去看目錄,大概了解一下,各個(gè)章節(jié)所講內(nèi)容。
為表對(duì)作者的尊重,快讀掃讀了,譯者序、前言和致謝。
通過目錄了解到,第1,2章所講概述和環(huán)境搭建,對(duì)于我來說沒有價(jià)值,選擇忽略。
第10,11,12,13章所講Java圖形界面相關(guān),當(dāng)今這方面幾乎很少使用,選擇忽略。
由于并不是Java新手,所以我將選擇對(duì)我有益的知識(shí)點(diǎn)進(jìn)行記錄。
第三章 Java的基本程序設(shè)計(jì)結(jié)構(gòu) 長(zhǎng)整型long a = 3.14L 這里注意要用大寫的L作為后綴,因?yàn)樾?l 有時(shí)很像數(shù)字 1浮點(diǎn)型
單精度類型表示:float a = 3.14F 或 3.14f
雙精度類型的表示:double b = 3.14D 或 3.14d
注意:當(dāng)浮點(diǎn)型數(shù)字沒有后綴時(shí)(如:3.14),默認(rèn)為double類型。另外浮點(diǎn)數(shù)值不適用于無法接受舍入誤差的金融計(jì)算中,如 2.0 - 1.1 結(jié)果是 0.89999999999999,為更精確的計(jì)算,可以使用BigDecimal類。
正無窮大
負(fù)無窮大
NaN (不是一個(gè)數(shù)字)
正整數(shù)除以0的結(jié)果正無窮大(如:3/0.0 結(jié)果為Infinity),Infinity表示無窮大的概念,0.0并不是真正意義上的0,它只是非常接近0而已。
,0/0或者負(fù)數(shù)的平方根結(jié)果為NaN.(如:0.0/0.0 ,Math.sqrt(-3)結(jié)果為 NaN ),對(duì)于所有沒有良好的數(shù)字定義的浮點(diǎn)計(jì)算,例如0.0/0.0,或者對(duì)負(fù)數(shù)求平方根其值都是它.
x = x + 4
簡(jiǎn)寫: x += 4
注意: 如果運(yùn)算符得到一個(gè)值,其類型與左側(cè)操作數(shù)類型不同,,就會(huì)發(fā)生強(qiáng)制類型轉(zhuǎn)換,如 int x = 2 ; x += 3.14 ; 這相當(dāng)于 x = (int)(x + 3.14)自增自減運(yùn)算符
java中借鑒了C和C++的做法,提供了自增自減運(yùn)算符:n + + 將當(dāng)前值加1
這種運(yùn)算符有兩種形式:運(yùn)算符作為前綴和運(yùn)算符作為后綴。例:
int m = 7 ; int n = 7 ; int a = 2 * ++m; //a=16,m=8 int b = 2 * n++; //b=14,n=8
前綴形式先完成加1,后綴形式會(huì)使用原來的值,再加1。
不建議在表達(dá)式中使用++,因?yàn)檫@樣的代碼很容易讓人困惑,而且會(huì)帶來煩人的bug。&&和& 與 ||和|
&&表示邏輯“與”,||表示邏輯“或”。
這兩個(gè)運(yùn)算符是按照“短路”方式來求值的:如果第一個(gè)操作數(shù)已經(jīng)能夠確定表達(dá)式的值,第二個(gè)操作數(shù)就不會(huì)計(jì)算了。如:
exp1 && exp2 ,當(dāng)exp1為flase時(shí),那么exp2就不會(huì)執(zhí)行了。 exp1 || exp2 ,當(dāng)exp1為true時(shí),那么exp2就不會(huì)執(zhí)行了。
&和| 運(yùn)算符不采用“短路”方式求值,所以不論第一個(gè)操作數(shù)是否確定整個(gè)表達(dá)式的值,兩個(gè)操作數(shù)都會(huì)被計(jì)算。
字符串檢測(cè)是否相等
一定要用equals()函數(shù),它是判斷兩個(gè)字符串內(nèi)容是否相等,而 == 是判斷兩個(gè)字符串是否在同一個(gè)位置上。如果 == 相等,那么equals一定相等,反之不然。
空串和Null
""是一個(gè)Java對(duì)象,有自己的串長(zhǎng)度(0)和內(nèi)容(空),當(dāng)為Null時(shí),表示目前沒有任何對(duì)象與該變量關(guān)聯(lián)。
檢查一個(gè)字符串既不是null也不是空串:
if(str != null && str.length() != 0)
要先檢查不為null,因?yàn)闉閚ull時(shí)無法調(diào)用length()函數(shù)。
多重選擇:switchswitch(x){ case x1 : *** break; case x2 : *** break; }
其中x可以為char,byte,short,int類型,到Java SE 7開始,可以是String類型的。
一般不建議使用switch語句,因?yàn)閎reak語句的忘記容易導(dǎo)致問題。命令行參數(shù)
學(xué)習(xí)Java你一定知道下面代碼:
public class Massage{ public static void main(String[] args){ System.out.println(args[0]); System.out.println(args[1]); } }
當(dāng)你在命令行變異運(yùn)行這個(gè)類時(shí):java Massage -hello world
打印結(jié)果:
hello world第四章 對(duì)象與類 類之間的關(guān)系
依賴(uses-a) A類方法操縱B類對(duì)象,叫做一個(gè)類依賴另一個(gè)類。
聚合(has-a) A類的對(duì)象包含B類的對(duì)象。
繼承(is-a) A類繼承B類。
我們應(yīng)該盡量減少相互依賴的類存在,如果A類不知道B類,就不會(huì)關(guān)系B類的變化,這樣B類無論怎么變化都不會(huì)導(dǎo)致A的bug,軟件工程上叫做:讓類之間的耦合度最小。Java 8中新增LocalDate類
Date是一個(gè)用來表示時(shí)間點(diǎn)的Date類,LocalDate用來表示大家熟悉的日歷表示法。
Date類所提供的日期處理并沒有太大的用途。1.Date和SimpleDateFormatter都不是線程安全的。
2.Date對(duì)日期的計(jì)算方式繁瑣,月份從0開始。
創(chuàng)建一個(gè)對(duì)象可以通過以下幾個(gè)方式:
LocalDate local1 = LocalDate.now(); LocalDate local2 = LocalDate.of(2017,10,30);
LocalDate并不包含時(shí)間,你可以通過下面獲取年月日:
int year = local2.getYear(); int month = local2.getMonthValue(); int day = local2.getDayOfMonth();
當(dāng)然LocalDate也提供了日期的增減:
local2.pulsDays(100); local2.minusDays(100);
更多方法查看API,這里不做詳細(xì)表述。
final實(shí)例域將實(shí)例域定義為final,構(gòu)建對(duì)象時(shí)必須初始化這個(gè)實(shí)例域,后面的操作中不能夠再對(duì)它進(jìn)行修改。如:
public class Employee{ private final String name; …… }
這個(gè)name屬性沒有setName方法。final修飾符大都應(yīng)用于基本數(shù)據(jù)類型或不可變的類或?qū)ο蟆H绻愔忻總€(gè)方法都不會(huì)改變其對(duì)象,那么這個(gè)類就是不可變類,如String類。
對(duì)于可變的類使用final修飾,會(huì)對(duì)別人造成混亂。如:
private final StringBuilder sb;
在Employee構(gòu)造方法中進(jìn)行初始化
public Employee(){ sb = new StringBuilder(); }
final關(guān)鍵詞只是表示存儲(chǔ)在sb變量中的對(duì)象應(yīng)用不會(huì)再指向其他StringBuilder對(duì)象,不過這個(gè)對(duì)象可以更改:
public void giveGoldStar(){ sb.append( LocalDate.now() + ": Gold star!"); }靜態(tài)域 static
public class Employee{ private static int sid = 1001; private int id ; …… }
static 修飾的常量,是面向類的,即無論存在多少Employee對(duì)象,sid只存在一個(gè),所有對(duì)象將共享一個(gè)sid,但id卻和對(duì)象同存在,多少個(gè)對(duì)象就有多少個(gè)id。(static 修飾后,它屬于類,而不屬于任何對(duì)象)
靜態(tài)工廠方法類似LocalDate.now和LocalDate.of都是使用靜態(tài)工廠方法來構(gòu)造對(duì)象。
NumberFormat currenyFormatter = NumberFormat.getCurrencyInstance(); NumberFormat percentFormatter = NumberFormat.getPercentInstance(); double x = 0.1; System.out.println(currenyFormatter.format(x)); //輸出 $0.10 System.out.println(percentFormatter.format(x)); //輸出 10%
為什么不利用構(gòu)造方法來完成這些操作呢?原因:
無法命名構(gòu)造器,這里希望得到的貨幣實(shí)例和百分比實(shí)例采用不同的名字。
當(dāng)使用構(gòu)造器時(shí),無法改變所構(gòu)造的對(duì)象類型,而Factory方法將返回一個(gè)DecimalFormat類對(duì)象,這是NumberFormat的子類。
方法參數(shù)方法參數(shù)共有兩種類型:
基本數(shù)據(jù)類型
對(duì)象類型
一個(gè)方法不可能修改一個(gè)基本數(shù)據(jù)類型的參數(shù),如:
double x = 10; harry.raiseSalary(x);
中不論加薪方法具體怎么實(shí)現(xiàn),但x值始終不變。
對(duì)象作為參數(shù)其實(shí)是對(duì)象引用的拷貝,他們指向同一個(gè)對(duì)象。
public void swap(Employee x,Employee y){ Employee temp = x; x = y; y = temp; } Employee a = new Employee("zhang"); Employee b = new Employee("wang"); swap(a,b); //現(xiàn)在x指向wang,y指向zhang System.out.println(a.toString()+"--"+b.toString());
最后你會(huì)發(fā)現(xiàn)a依然是zhang,b依然是wang,因?yàn)樾螀,y在執(zhí)行完后被丟棄了,原來的a,b依然指向之前的的對(duì)象。
總結(jié):
java對(duì)對(duì)象采用的不是引用調(diào)用,實(shí)際上,對(duì)象引用是按值傳遞的。
一個(gè)方法不能修改一個(gè)基本數(shù)據(jù)類型(數(shù)值型和布爾型)
一個(gè)方法可以改變一個(gè)對(duì)象的狀態(tài)(屬性……)
一個(gè)方法不能讓一個(gè)對(duì)象參數(shù)引用新的對(duì)象
無參構(gòu)造函數(shù)當(dāng)一個(gè)類沒有提供構(gòu)造函數(shù)時(shí),系統(tǒng)會(huì)為這個(gè)類提供一個(gè)默認(rèn)的無參構(gòu)造函數(shù),但當(dāng)你提供了有參的構(gòu)造函數(shù)時(shí),系統(tǒng)是不會(huì)提供無參構(gòu)造函數(shù)的,所以當(dāng)你要調(diào)用無參構(gòu)造函數(shù)時(shí),主動(dòng)提供無參構(gòu)造函數(shù)或不提供任何構(gòu)造函數(shù)。
類設(shè)計(jì)技巧一定保證數(shù)據(jù)的私有性
一定對(duì)數(shù)據(jù)初始化
不要在類中使用過多的基本類型
將職責(zé)過多的類進(jìn)行分解
類名和方法名要能體現(xiàn)他們的職責(zé)
優(yōu)先使用不可變類
類不可變,就可以安全地在多個(gè)線程間共享其對(duì)象。第五章 繼承 父類和子類
將通用方法放在父類中,而將具有特殊用途的方法放在子類中。
關(guān)鍵字this的兩種用法:一是引用本類成員變量,二是調(diào)用本類其他構(gòu)造函數(shù)。
關(guān)鍵字super兩種用法:一是應(yīng)用父類成員變量,二是調(diào)用父類構(gòu)造函數(shù)。不過兩者調(diào)用構(gòu)造函數(shù)時(shí),調(diào)用語句必須放在構(gòu)造函數(shù)第一行。
歡迎留言交流。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73656.html
摘要:相關(guān)推薦,豆瓣評(píng)分,人評(píng)價(jià)本書介紹了在編程中條極具實(shí)用價(jià)值的經(jīng)驗(yàn)規(guī)則,這些經(jīng)驗(yàn)規(guī)則涵蓋了大多數(shù)開發(fā)人員每天所面臨的問題的解決方案。實(shí)戰(zhàn)高并發(fā)程序設(shè)計(jì)推薦豆瓣評(píng)分,書的質(zhì)量沒的說,推薦大家好好看一下。 該文已加入開源文檔:JavaGuide(一份涵蓋大部分Java程序員所需要掌握的核心知識(shí))。地址:https://github.com/Snailclimb... 【強(qiáng)烈推薦!非廣告!】...
摘要:實(shí)戰(zhàn)高并發(fā)程序設(shè)計(jì)推薦豆瓣評(píng)分書的質(zhì)量沒的說,推薦大家好好看一下。推薦,豆瓣評(píng)分,人評(píng)價(jià)本書介紹了在編程中條極具實(shí)用價(jià)值的經(jīng)驗(yàn)規(guī)則,這些經(jīng)驗(yàn)規(guī)則涵蓋了大多數(shù)開發(fā)人員每天所面臨的問題的解決方案。 很早就想把JavaGuide的書單更新一下了,昨晚加今天早上花了幾個(gè)時(shí)間對(duì)之前的書單進(jìn)行了分類和補(bǔ)充完善。雖是終極版,但一定還有很多不錯(cuò)的 Java 書籍我沒有添加進(jìn)去,會(huì)繼續(xù)完善下去。希望這篇...
摘要:因?yàn)槟承┰?,不方便在這里直接發(fā)送百度鏈接,關(guān)注我的微信公眾號(hào)面試通關(guān)手冊(cè)回復(fù)資源分享第一波即可領(lǐng)取。然后大家還有什么問題的話,可以在我的微信公眾號(hào)后臺(tái)面試通關(guān)手冊(cè)給我說或者加我微信,我會(huì)根據(jù)自己的學(xué)習(xí)經(jīng)驗(yàn)給了說一下自己的看法。 這是一篇針對(duì)Java初學(xué)者,或者說在Java學(xué)習(xí)路線上出了一些問題(不知道該學(xué)什么、不知道整體的學(xué)習(xí)路線是什么樣的) 第一步:Java基礎(chǔ)(一個(gè)月左右) 推薦...
摘要:編程思想第版這本書要常讀,初學(xué)者可以快速概覽,中等程序員可以深入看看,老鳥還可以用之回顧的體系。以下視頻整理自慕課網(wǎng)工程師路徑相關(guān)免費(fèi)課程。 我自己總結(jié)的Java學(xué)習(xí)的系統(tǒng)知識(shí)點(diǎn)以及面試問題,目前已經(jīng)開源,會(huì)一直完善下去,歡迎建議和指導(dǎo)歡迎Star: https://github.com/Snailclimb/Java-Guide 筆者建議初學(xué)者學(xué)習(xí)Java的方式:看書+視頻+實(shí)踐(初...
摘要:耐得住寂寞,才能等得到花開慢慢積累自己的知識(shí),不斷疊加,全面優(yōu)化,無論在哪個(gè)領(lǐng)域都可以有你的一席之地,即為有志者事竟成,破釜沉舟,百二秦關(guān)終屬楚也祝我們能向未來發(fā)展的開發(fā)者們苦心人天不負(fù),臥薪嘗膽,三千越甲可吞吳。 我們今天來了聊一聊一個(gè)話題——全棧開發(fā) 作為一個(gè)程序員,不管是Java還是C...
閱讀 2421·2023-04-25 19:27
閱讀 3531·2021-11-24 09:39
閱讀 3941·2021-10-08 10:17
閱讀 3425·2019-08-30 13:48
閱讀 1964·2019-08-29 12:26
閱讀 3147·2019-08-28 17:52
閱讀 3563·2019-08-26 14:01
閱讀 3559·2019-08-26 12:19