《 Java 編程思想》CH02 一切都是對象

用引用操縱對象

盡管Java中一切都看作為對象畜晰,但是操縱的標(biāo)識符實際上對象的一個“引用”构韵。

String s; // 這里只是創(chuàng)建了一個引用,而不是一個對象

String s = new String("abcd"); // 使用`new`操作符來創(chuàng)建一個對象愿险,并將其與一個引用相關(guān)聯(lián)

String s = "abcd"; // 字符串可以直接用帶引號的文本初始化

必須由你創(chuàng)建所有對象

使用new操作符創(chuàng)建一個對象

存儲到什么位置

由五個地方可以存儲數(shù)據(jù):

1.寄存器:由于寄存器數(shù)量有限旺拉,所有無法直接控制

2.堆棧(棧):RAM中,存儲在棧中的數(shù)據(jù)必須明確知道其生命周期撑蒜,通常局部存放對象引用和局部基本類型的變量歹啼。

3.堆:存放所有的對象

4.常量存儲:通常直接存放在代碼內(nèi)部,其永遠(yuǎn)不會改變

5.非RAM存儲:數(shù)據(jù)存放在程序之外座菠,不受程序的控制狸眼,如流對象(System.out)和持久化對象(存放在磁盤的文件)。

特例:基本類型

一些比較小的浴滴,簡單的類型拓萌,如果放在堆中往往效率不高,所以這些類型不需要使用new來創(chuàng)建升略,而是創(chuàng)建一個“自動”變量來直接存儲“值”微王,并置于棧中。

Java 中所有基本類型所占據(jù)存儲空間的大小都是明確的.

所有數(shù)值類型都有正負(fù)號

boolean類型所占存儲空間的大小沒有明確品嚣,僅定義為能夠去字面值true或false

基本類型和其對應(yīng)的包裝類之間可以自動裝包炕倘、自動解包

Java 提供了兩個用于高精度計算的類:BigInteger和BigDecimal

Java 中的數(shù)組

Java 確保數(shù)組會被初始化,且會進行范圍檢查

當(dāng)創(chuàng)建一個數(shù)組對象時實際就是創(chuàng)建一個引用數(shù)組翰撑,并且每個引用都會被自動初始化為一個特定值null

也可以創(chuàng)建用來存放基本數(shù)據(jù)類型的數(shù)組罩旋,此時的初始化則是置零

永遠(yuǎn)不需要銷毀對象

作用域

作用域決定了在其內(nèi)定義的變量的可見性和生命周期

在作用域里定義的變量只可用于作用域結(jié)束前

Java 中不允許“覆蓋”變量的可見性

{

? ? int x = 12;

? ? // x available

? ? {

? ? ? ? int q = 96;

? ? ? ? // Both x & q available

? ? ? ? int x = 96 // Illegal

? ? }

? ? // only x available

}

對象的作用域

Java 對象不具備和基本類型一樣的生命周期,由new創(chuàng)建的對象眶诈,只要你需要涨醋,其會一直保留下去。

Java 使用垃圾回收器來監(jiān)視new創(chuàng)建的對象逝撬,辨別并釋放那些不會再被引用的對象

創(chuàng)建新的數(shù)據(jù)類型:類

使用class來創(chuàng)建一個新的類型:

class ATypeName { }

字段和方法

一旦定義了一個類东帅,就可以在類中設(shè)置兩種元素:字段(數(shù)據(jù)成員)和方法(成員函數(shù))。字段可以是任何類型的對象或基礎(chǔ)類型球拦。每個對象都有存儲其字段的空間靠闭,即普通字段不在對象間共享帐我。

引用一個對象的成員的方式:objectReference.member

基本數(shù)據(jù)類型的變量只有是類的成員時,才確保其獲得一個默認(rèn)值愧膀,否則的話拦键,與C++一樣,該變量可能是任意值(其實就是在堆還是棧的問題嘛)檩淋,不過這種情況下Java會報編譯錯誤芬为。

方法、參數(shù)和返回值

方法的基本組成部分包括:名稱蟀悦、參數(shù)媚朦、返回值和方法體:

ReturnType methodName ( /* Argument list */) {

? ? /* Method body */

}

方法名和參數(shù)列表唯一地標(biāo)識某個方法(合起來稱為“方法簽名”)注意:方法簽名不包含返回值。

Java 中的方法只能作為類的一部分來創(chuàng)建日戈,方法通常只有通過對象才能調(diào)用询张,且這個對象必須有這個方法。

參數(shù)列表

方法的參數(shù)列表指定要傳遞給方法什么樣的信息,這里采用的都是對象的類型,即包含指定的類型和名字同辣,這里傳遞的實際上是引用,傳遞基礎(chǔ)類型則通過自動包裝來實現(xiàn)蜗帜。

構(gòu)建一個 Java 程序

名字可見性

為了防止不同類庫中使用了相同的類名,Java 將反過來的域名作為唯一標(biāo)識符(即包名)资厉,如我的域名為codeand.fun,則我的類庫則使用fun.codeand.utils的形式厅缺。

包名使用小寫

運用其他構(gòu)件

使用import導(dǎo)入想要的包:

import java.util.ArrayList;

import java.util.*; // 導(dǎo)入java.util下所有的類

java.lang默認(rèn)導(dǎo)入到每一個Java文件中。

static 關(guān)鍵字

當(dāng)聲明一個事物為static時宴偿,就意味著這個域或方法不會與包含它的類的任何對象實例關(guān)聯(lián)在一起湘捎,可以理解為類數(shù)據(jù)和類方法。

class StaticTest {

? ? static int i = 47;

? ? static void inc() { i++; }

}

int j = StaticTest.i; // 47

StaticTest st1 = new StaticTest();

StaticTest.inc();

StaticTest st2 = new StaticTest();

// st1.i == st2.i == 48 // 所有i都指向同一個存儲空間

你的第一個 Java 程序

// HelloDate.java

import java.util.*;

public class HelloDate {

? ? public static void main(String[] args) {

? ? ? ? System.out.println("Hello, it's");

? ? ? ? System.out.println(new Date());

? ? }

}

要創(chuàng)建一個獨立運行的程序酪我,那么該文件中必須存在某個類與該文件同名,且那個類必須又一個main方法且叁,其形式如public static void main(String[] args)都哭。

編譯和運行

$ javac HelloDate.java // 編譯,產(chǎn)生一個 HelloDate.class 文件

$ java HelloDate // 運行

注釋和嵌入式文檔

多行注釋:/* something */

單行注釋:// something

注釋文檔

Java 中可以將代碼與文檔放到一個文件中逞带,這樣有利于文檔的維護欺矫,為了實現(xiàn)這一目的,這里使用一種特殊的注釋語法來標(biāo)記文檔展氓,此外還有一個工具javadoc來提取注釋穆趴。javadoc的輸出是一個html

# wuxiaobai24 @ wuxiaobai24-pc in ~/code/Java/ch2 [17:56:05] C:1

$ javadoc HelloDate.java

正在加載源文件HelloDate.java...

正在構(gòu)造 Javadoc 信息...

標(biāo)準(zhǔn) Doclet 版本 1.8.0_242

正在構(gòu)建所有程序包和類的樹...

正在生成./HelloDate.html...

正在生成./package-frame.html...

正在生成./package-summary.html...

正在生成./package-tree.html...

正在生成./constant-values.html...

正在構(gòu)建所有程序包和類的索引...

正在生成./overview-tree.html...

正在生成./index-all.html...

正在生成./deprecated-list.html...

正在構(gòu)建所有類的索引...

正在生成./allclasses-frame.html...

正在生成./allclasses-noframe.html...

正在生成./index.html...

正在生成./help-doc.html...

# wuxiaobai24 @ wuxiaobai24-pc in ~/code/Java/ch2 [17:56:11]

$ ls

allclasses-frame.html? ? HelloDate.class? index-all.html? ? ? package-list? ? ? ? ? stylesheet.css

allclasses-noframe.html? HelloDate.html? index.html? ? ? ? ? package-summary.html

constant-values.html? ? HelloDate.java? overview-tree.html? package-tree.html

deprecated-list.html? ? help-doc.html? ? package-frame.html? script.js

注釋語法

所有 javadoc 命令都只能在由/**和*/組成的注釋中

javadoc 的注釋,只能為public和protected成員進行文檔注釋遇汞,而private和defaule成員的注釋會被忽視掉

javadoc 主要有兩種形式:

嵌入HTML

文檔標(biāo)簽: 獨立文檔標(biāo)簽是一些以@字符開頭的命令未妹,且置于注釋行的最前面(除了前導(dǎo)的 *) 行內(nèi)文檔標(biāo)簽則可以在 javadoc 注釋中的任何位置簿废,同樣以@開頭,但要在花括號內(nèi)络它。

常用的標(biāo)簽有:

@see:引用其他類族檬,會生成一個超鏈接條目(不會校驗該鏈接是否有效),超鏈接文本為“See Also”

? ? @see classname

? ? @see fully-qualified-classname

? ? @see fully-qualified-classname@method-name

{@link package.class#member label}:與@see類似化戳,不過是行內(nèi)標(biāo)簽单料,使用“l(fā)abel”來處理作為超鏈接文本

{@docRoot}:該標(biāo)簽產(chǎn)生到文檔根目錄的相對路徑

{@inheritDoc}:該標(biāo)簽從當(dāng)前這個類最直接的基類繼承相關(guān)文檔到當(dāng)前文檔注釋中

@version:版本信息

@author:作者信息

@since:指定JDK版本最低為多少

@param:表示參數(shù)含義,形式如@param parameter-name description

@return:描述返回值点楼,形式如@return description

@throws:異常描述扫尖,該方法可能拋出的每個異常都需要說明,形式如@throws fully-qualified-class-name description

@deprecated:指出一些舊特性已由改進的新特性所取代掠廓,不建議使用换怖。調(diào)用一個標(biāo)記為@deprecated的方法,編譯器會發(fā)出警告却盘。

// HelloDate.java

import java.util.*;

/** A class comment

* Test comment

* @author wuxiaobai24

* @version 0.1

*/

public class HelloDate {

? ? /** a field comment */

? ? public int i;

? ? /**

? ? * a <strong>protected</strong> filed comment

? ? * <ol>

? ? *? <li>one</li>

? ? *? <li>two</li>

? ? *? <li>three</li>

? ? * </ol>

? ? */

? ? protected int p;

? ? /** a private field comment */

? ? private int j;

? ? /** A method comment

? ? * @param args args comment

? ? */

? ? public static void main(String[] args) {

? ? ? ? System.out.println("Hello, it's");

? ? ? ? System.out.println(new Date());

? ? }

}

編碼風(fēng)格

駝峰式寫法

標(biāo)識符的第一個字符采用小寫狰域,其余用大寫

練習(xí)

練習(xí)1

// Ex1.java

public class Ex1 {

? ? public int i;

? ? public char c;

? ? public static void main(String[] args) {

? ? ? ? Ex1 e = new Ex1();

? ? ? ? System.out.println(e.i);

? ? ? ? System.out.println(e.c);

? ? }

}

練習(xí)2

// Ex2.java

public class Ex2 {

? ? public static void main(String[] args) {

? ? ? ? System.out.println("Hello, World");

? ? }

}

練習(xí)3 & 練習(xí)4 & 練習(xí)5

// Ex3.java

class DataOnly {

? ? int i;

? ? double d;

? ? boolean b;

}

class ATypeName {

}

public class Ex3 {

? ? public static void main(String[] args) {

? ? ? ? ATypeName a = new ATypeName();

? ? ? ? DataOnly d = new DataOnly();

? ? ? ? d.i = 1;

? ? ? ? d.d = 2.0;

? ? ? ? d.b = false;

? ? ? ? System.out.println(d.i);

? ? ? ? System.out.println(d.d);

? ? ? ? System.out.println(d.b);

? ? }

}

練習(xí)6

// Ex4.java

public class Ex4 {

? ? int storage(String s) {

? ? ? ? return s.length() * 2;

? ? }

? ? public static void main(String[] args) {

? ? ? ? String s = new String("Hello");

? ? ? ? Ex4 e = new Ex4();

? ? ? ? int len = e.storage(s);

? ? ? ? System.out.println(len);

? ? }

}

練習(xí)7 & 練習(xí)8

// Ex7.java

class StaticTest {

? ? static int i = 47;

}

class Incrementable {

? ? static void increment() { StaticTest.i++; }

}

public class Ex7 {

? ? public static void main(String[] args) {

? ? ? ? StaticTest st1 = new StaticTest();

? ? ? ? Incrementable.increment();

? ? ? ? StaticTest st2 = new StaticTest();

? ? ? ? System.out.println(st1.i);

? ? ? ? System.out.println(st2.i);

? ? ? ? System.out.println(StaticTest.i);

? ? }

}

練習(xí)9

// Ex9.java

public class Ex9 {

? ? public static void main(String[] args) {

? ? ? ? int i = 24;

? ? ? ? Integer bi = i;

? ? ? ? System.out.println(i);

? ? ? ? System.out.println(bi);

? ? ? ? // ....

? ? }

}

練習(xí)10

// Ex10.java

public class Ex10 {

? ? public static void main(String[] args) {

? ? ? ? if (args.length == 3) {

? ? ? ? ? ? System.out.println(args[0]);

? ? ? ? ? ? System.out.println(args[1]);

? ? ? ? ? ? System.out.println(args[2]);

? ? ? ? }

? ? }

}

練習(xí)11

// Ex11.java

class AllTheColorsOfTheRainbow {

? ? int anIntegerRepresentingColors;

? ? void changeTheHueOfTheColor(int newHue) {

? ? ? ? anIntegerRepresentingColors = newHue;

? ? }

}

public class Ex11 {

? ? public static void main(String[] args) {

? ? ? ? AllTheColorsOfTheRainbow allTheColorsOfTheRainbow = new AllTheColorsOfTheRainbow();

? ? ? ? allTheColorsOfTheRainbow.changeTheHueOfTheColor(1);

? ? ? ? System.out.println(allTheColorsOfTheRainbow.anIntegerRepresentingColors);

? ? }

}

前期我也和很多小伙伴一樣,到處收集了很多資料黄橘,后面發(fā)現(xiàn)很多重復(fù)的兆览!上面都是自己整理好的!現(xiàn)在BAT夢想成真塞关,我就把資料貢獻出來給有需要的人抬探!順便求一波關(guān)注,哈哈~各位小伙伴關(guān)注我后私信【Java】就可以免費領(lǐng)取噠

原文鏈接:https://juejin.im/post/5e3e60b7f265da5732551aaa

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末帆赢,一起剝皮案震驚了整個濱河市小压,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌椰于,老刑警劉巖怠益,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瘾婿,居然都是意外死亡蜻牢,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門偏陪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抢呆,“玉大人,你說我怎么就攤上這事笛谦”埃” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵饥脑,是天一觀的道長恳邀。 經(jīng)常有香客問我懦冰,道長,這世上最難降的妖魔是什么轩娶? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任儿奶,我火速辦了婚禮,結(jié)果婚禮上鳄抒,老公的妹妹穿的比我還像新娘闯捎。我一直安慰自己,他們只是感情好许溅,可當(dāng)我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布瓤鼻。 她就那樣靜靜地躺著,像睡著了一般贤重。 火紅的嫁衣襯著肌膚如雪茬祷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天并蝗,我揣著相機與錄音祭犯,去河邊找鬼。 笑死滚停,一個胖子當(dāng)著我的面吹牛沃粗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播键畴,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼最盅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了起惕?” 一聲冷哼從身側(cè)響起涡贱,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎惹想,沒想到半個月后问词,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡嘀粱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年激挪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片草穆。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡灌灾,死狀恐怖搓译,靈堂內(nèi)的尸體忽然破棺而出悲柱,到底是詐尸還是另有隱情,我是刑警寧澤些己,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布豌鸡,位于F島的核電站嘿般,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏涯冠。R本人自食惡果不足惜炉奴,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蛇更。 院中可真熱鬧瞻赶,春花似錦、人聲如沸派任。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掌逛。三九已至师逸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間豆混,已是汗流浹背篓像。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留皿伺,地道東北人员辩。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像心傀,于是被迫代替她去往敵國和親屈暗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容