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