java(基礎(chǔ)二)

1.System.exit(int status):main方法正常退出時(shí),程序的退出代碼為0(通常都不寫這句,默認(rèn)的),表示成功運(yùn)行了程序,若要返回其他退出代碼,使用System.exit方法。System.exit方法的作用是中斷虛擬機(jī)運(yùn)行,使程序結(jié)束運(yùn)行。return的作用是退出本方法,返回上一層(調(diào)用者)

2.三種注釋。注釋不會(huì)出現(xiàn)在可執(zhí)行程序中,只是在源碼中,是給人看的

? ? ? ? ? ? a). //?

? ? ? ? ? ? b). /*? ?*/

? ? ? ? ? ? c). /**? ? */可以用來自動(dòng)生成注釋文檔

3.強(qiáng)類型:一個(gè)變量在確定了其數(shù)據(jù)類型后,其數(shù)據(jù)類型就固定了不會(huì)變,除非進(jìn)行強(qiáng)制類型轉(zhuǎn)換操作

? ?弱類型:數(shù)據(jù)類型區(qū)分沒強(qiáng)類型那么嚴(yán)格,如String a=1,在運(yùn)算操作時(shí),a可以是字符串1,也可以是數(shù)字1,而不需要強(qiáng)制類型轉(zhuǎn)換就可以直接參與運(yùn)算。

4.動(dòng)態(tài)語言:數(shù)據(jù)類型是在運(yùn)行時(shí)確定的。

? ?靜態(tài)語言:數(shù)據(jù)類型是在編譯時(shí)確定的。詳細(xì)解釋

5.數(shù)據(jù)類型:8種基本數(shù)據(jù)類型,byte(1),short(2),int(4,整形默認(rèn)),long(8);float(4),double(8,浮點(diǎn)型默認(rèn),浮點(diǎn)數(shù)是不準(zhǔn)確的,精度問題需要特別注意,2.0-1.1并不等于理想中的0.9);char(2或4);boolean(1或4)

boolean(1或4)的理由來源是《Java虛擬機(jī)規(guī)范》一書中的描述:“雖然定義了boolean這種數(shù)據(jù)類型,但是只對(duì)它提供了非常有限的支持。在Java虛擬機(jī)中沒有任何供boolean值專用的字節(jié)碼指令,Java語言表達(dá)式所操作的boolean值,在編譯之后都使用Java虛擬機(jī)中的int數(shù)據(jù)類型來代替,而boolean數(shù)組將會(huì)被編碼成Java虛擬機(jī)的byte數(shù)組,每個(gè)元素boolean元素占8位”。這樣我們可以得出boolean類型占了單獨(dú)使用是4個(gè)字節(jié),在數(shù)組中又是1個(gè)字節(jié)。那虛擬機(jī)為什么要用int來代替boolean呢?為什么不用byte或short,這樣不是更節(jié)省內(nèi)存空間嗎。大多數(shù)人都會(huì)很自然的這樣去想,我同樣也有這個(gè)疑問,經(jīng)過查閱資料發(fā)現(xiàn),使用int的原因是,對(duì)于當(dāng)下32位的處理器(CPU)來說,一次處理數(shù)據(jù)是32位(這里不是指的是32/64位系統(tǒng),而是指CPU硬件層面),具有高效存取的特點(diǎn)。

6.特殊值:正無窮大,負(fù)無窮大,NaN(判斷x是否為NaN,Double.isNaN(x))

int.class == Integer.TYPE//true

int.class == Integer.class//false

基本類型的包裝類都有三個(gè)靜態(tài)變量BYTES、SIZE、TYPE用來表示對(duì)應(yīng)的基本類型存儲(chǔ)所用的字節(jié)數(shù),位數(shù)和class對(duì)象(Boolean只有TYPE,沒有BYTES和SIZE,因?yàn)閖ava規(guī)范沒具體指明boolean需要占據(jù)幾個(gè)字節(jié),單獨(dú)使用時(shí)占據(jù)4個(gè),boolean數(shù)組則每個(gè)boolean元素占據(jù)1個(gè))

Character類的charCount方法用來判斷一個(gè)給定的代碼點(diǎn)對(duì)應(yīng)的字符是哪種類型的,如果大于等于0x10000則返回2,小于則返回1。對(duì)于傳進(jìn)來的代碼點(diǎn)參數(shù)是否有效,該方法不進(jìn)行驗(yàn)證,需要調(diào)用者自己調(diào)用isValidCodePoint方法自行驗(yàn)證

bitCount方法統(tǒng)計(jì)數(shù)值二進(jìn)制形式中1的個(gè)數(shù)

unicode是字符集的名稱,utf-8/16/32等是具體的實(shí)現(xiàn)方法

7.char字符集和編碼方式:utf-16,代碼點(diǎn)(代碼值,類似于編號(hào))和代碼單元(2個(gè)字節(jié)大小,詳見卷一P36-37),每個(gè)字符都有唯一的一個(gè)代碼點(diǎn)(編號(hào)),用16位來表示一個(gè)代碼單元,基本的字符只需一個(gè)代碼單元,有的字符需要兩個(gè)代碼單元來表示,基本的字符并沒有把65536(2的16次方)個(gè)編號(hào)都用完,還剩下2048個(gè)編號(hào),這2048個(gè)編號(hào)分成兩份A(a1~a1024)和B(b1~b1024),每份1024個(gè)編號(hào),用兩個(gè)編號(hào)如a1b1來表示基本字符之外的那些字符,這樣有1024x1024種組合(如果采取排列的方法,應(yīng)該可以有A(2048,2)即2048x2047種組合,可以表示更多字符),然后根據(jù)有關(guān)的算法,每種組合表示一個(gè)代碼點(diǎn)。string.length()求的是代碼單元數(shù),string.codePointCount()求的是代碼點(diǎn)數(shù)(實(shí)際的字符數(shù))

8.類常量:static final修飾

for(;;)是一個(gè)死循環(huán),相當(dāng)于while(true)

9.運(yùn)算符:&&和||為“短路”方式的邏輯與和邏輯或;三元運(yùn)算符?:

當(dāng)&的兩個(gè)操作數(shù)不是boolean型變量時(shí),則進(jìn)行按位與運(yùn)算,同理|也是

<<,>>(高位填充符號(hào)位),>>>(高位填充0)

原碼,反碼和補(bǔ)碼

數(shù)值在計(jì)算機(jī)中是以補(bǔ)碼的形式存儲(chǔ)的

一. 機(jī)器數(shù)和真值

在學(xué)習(xí)原碼, 反碼和補(bǔ)碼之前, 需要先了解機(jī)器數(shù)和真值的概念.

1、機(jī)器數(shù)

一個(gè)數(shù)在計(jì)算機(jī)中的二進(jìn)制表示形式,? 叫做這個(gè)數(shù)的機(jī)器數(shù)。機(jī)器數(shù)是帶符號(hào)的,在計(jì)算機(jī)用一個(gè)數(shù)的最高位存放符號(hào), 正數(shù)為0, 負(fù)數(shù)為1.

比如,十進(jìn)制中的數(shù) +3 ,計(jì)算機(jī)字長為8位,轉(zhuǎn)換成二進(jìn)制就是00000011。如果是 -3 ,就是 10000011 。

那么,這里的 00000011 和 10000011 就是機(jī)器數(shù)。

2、真值

因?yàn)榈谝晃皇欠?hào)位,所以機(jī)器數(shù)的形式值就不等于真正的數(shù)值。例如上面的有符號(hào)數(shù) 10000011,其最高位1代表負(fù),其真正數(shù)值是 -3 而不是形式值131(10000011轉(zhuǎn)換成十進(jìn)制等于131)。所以,為區(qū)別起見,將帶符號(hào)位的機(jī)器數(shù)對(duì)應(yīng)的真正數(shù)值稱為機(jī)器數(shù)的真值。

例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1


二. 原碼, 反碼, 補(bǔ)碼的基礎(chǔ)概念和計(jì)算方法.

在探求為何機(jī)器要使用補(bǔ)碼之前, 讓我們先了解原碼, 反碼和補(bǔ)碼的概念.對(duì)于一個(gè)數(shù), 計(jì)算機(jī)要使用一定的編碼方式進(jìn)行存儲(chǔ). 原碼, 反碼, 補(bǔ)碼是機(jī)器存儲(chǔ)一個(gè)具體數(shù)字的編碼方式.

1. 原碼

原碼就是符號(hào)位加上真值的絕對(duì)值, 即用第一位表示符號(hào), 其余位表示值. 比如如果是8位二進(jìn)制:

[+1]原?= 0000 0001

[-1]原?= 1000 0001

第一位是符號(hào)位. 因?yàn)榈谝晃皇欠?hào)位, 所以8位二進(jìn)制數(shù)的取值范圍就是:

[1111 1111 , 0111 1111]

[-127 , 127]

原碼是人腦最容易理解和計(jì)算的表示方式.

2. 反碼

反碼的表示方法是:

正數(shù)的反碼是其本身

負(fù)數(shù)的反碼是在其原碼的基礎(chǔ)上, 符號(hào)位不變,其余各個(gè)位取反.

[+1] = [00000001]原?= [00000001]反

[-1] = [10000001]原?= [11111110]反

可見如果一個(gè)反碼表示的是負(fù)數(shù), 人腦無法直觀的看出來它的數(shù)值. 通常要將其轉(zhuǎn)換成原碼再計(jì)算.

3. 補(bǔ)碼

補(bǔ)碼的表示方法是:

正數(shù)的補(bǔ)碼就是其本身

負(fù)數(shù)的補(bǔ)碼是在其原碼的基礎(chǔ)上, 符號(hào)位不變, 其余各位取反, 最后+1. (即在反碼的基礎(chǔ)上+1)

[+1] = [00000001]原?= [00000001]反?= [00000001]補(bǔ)

[-1] = [10000001]原?= [11111110]反?= [11111111]補(bǔ)

對(duì)于負(fù)數(shù), 補(bǔ)碼表示方式也是人腦無法直觀看出其數(shù)值的. 通常也需要轉(zhuǎn)換成原碼在計(jì)算其數(shù)值.

三. 為何要使用原碼, 反碼和補(bǔ)碼

在開始深入學(xué)習(xí)前, 我的學(xué)習(xí)建議是先"死記硬背"上面的原碼, 反碼和補(bǔ)碼的表示方式以及計(jì)算方法.

現(xiàn)在我們知道了計(jì)算機(jī)可以有三種編碼方式表示一個(gè)數(shù). 對(duì)于正數(shù)因?yàn)槿N編碼方式的結(jié)果都相同:

[+1] = [00000001]原?= [00000001]反?= [00000001]補(bǔ)

所以不需要過多解釋. 但是對(duì)于負(fù)數(shù):

[-1] = [10000001]原?= [11111110]反?= [11111111]補(bǔ)

可見原碼, 反碼和補(bǔ)碼是完全不同的. 既然原碼才是被人腦直接識(shí)別并用于計(jì)算表示方式, 為何還會(huì)有反碼和補(bǔ)碼呢?

首先, 因?yàn)槿四X可以知道第一位是符號(hào)位, 在計(jì)算的時(shí)候我們會(huì)根據(jù)符號(hào)位, 選擇對(duì)真值區(qū)域的加減. (真值的概念在本文最開頭). 但是對(duì)于計(jì)算機(jī), 加減乘數(shù)已經(jīng)是最基礎(chǔ)的運(yùn)算, 要設(shè)計(jì)的盡量簡單. 計(jì)算機(jī)辨別"符號(hào)位"顯然會(huì)讓計(jì)算機(jī)的基礎(chǔ)電路設(shè)計(jì)變得十分復(fù)雜! 于是人們想出了將符號(hào)位也參與運(yùn)算的方法. 我們知道, 根據(jù)運(yùn)算法則減去一個(gè)正數(shù)等于加上一個(gè)負(fù)數(shù), 即: 1-1 = 1 + (-1) = 0 , 所以機(jī)器可以只有加法而沒有減法, 這樣計(jì)算機(jī)運(yùn)算的設(shè)計(jì)就更簡單了.

于是人們開始探索 將符號(hào)位參與運(yùn)算, 并且只保留加法的方法. 首先來看原碼:

計(jì)算十進(jìn)制的表達(dá)式: 1-1=0

1 - 1 = 1 + (-1) = [00000001]原?+ [10000001]原?= [10000010]原?= -2

如果用原碼表示, 讓符號(hào)位也參與計(jì)算, 顯然對(duì)于減法來說, 結(jié)果是不正確的.這也就是為何計(jì)算機(jī)內(nèi)部不使用原碼表示一個(gè)數(shù).

為了解決原碼做減法的問題, 出現(xiàn)了反碼:

計(jì)算十進(jìn)制的表達(dá)式: 1-1=0

1 - 1 = 1 + (-1) = [0000 0001]原?+ [1000 0001]原= [0000 0001]反?+ [1111 1110]反?= [1111 1111]反?= [1000 0000]原?= -0

發(fā)現(xiàn)用反碼計(jì)算減法, 結(jié)果的真值部分是正確的. 而唯一的問題其實(shí)就出現(xiàn)在"0"這個(gè)特殊的數(shù)值上. 雖然人們理解上+0和-0是一樣的, 但是0帶符號(hào)是沒有任何意義的. 而且會(huì)有[0000 0000]原和[1000 0000]原兩個(gè)編碼表示0.

于是補(bǔ)碼的出現(xiàn), 解決了0的符號(hào)以及兩個(gè)編碼的問題:

1-1 = 1 + (-1) = [0000 0001]原?+ [1000 0001]原?= [0000 0001]補(bǔ)?+ [1111 1111]補(bǔ)?= [0000 0000]補(bǔ)=[0000 0000]原

這樣0用[0000 0000]表示, 而以前出現(xiàn)問題的-0則不存在了.而且可以用[1000 0000]表示-128:

(-1) + (-127) = [1000 0001]原?+ [1111 1111]原?= [1111 1111]補(bǔ)?+ [1000 0001]補(bǔ)?= [1000 0000]補(bǔ)

-1-127的結(jié)果應(yīng)該是-128, 在用補(bǔ)碼運(yùn)算的結(jié)果中, [1000 0000]補(bǔ)?就是-128. 但是注意因?yàn)閷?shí)際上是使用以前的-0的補(bǔ)碼來表示-128, 所以-128并沒有原碼和反碼表示.(對(duì)-128的補(bǔ)碼表示[1000 0000]補(bǔ)算出來的原碼是[0000 0000]原, 這是不正確的)

使用補(bǔ)碼, 不僅僅修復(fù)了0的符號(hào)以及存在兩個(gè)編碼的問題, 而且還能夠多表示一個(gè)最低數(shù). 這就是為什么8位二進(jìn)制, 使用原碼或反碼表示的范圍為[-127, +127], 而使用補(bǔ)碼表示的范圍為[-128, 127].

因?yàn)闄C(jī)器使用補(bǔ)碼, 所以對(duì)于編程中常用到的32位int類型, 可以表示范圍是: [-231, 231-1] 因?yàn)榈谝晃槐硎镜氖欠?hào)位.而使用補(bǔ)碼表示時(shí)又可以多保存一個(gè)最小值.

10.Math類:Math.sqrt(x),Math.pow(x,a),Math.round(),Math.PI,Math.E,Math.random()返回一個(gè)[0,1)之間的浮點(diǎn)數(shù),更精確的還有StrictMath

11.靜態(tài)導(dǎo)入:import static java.lang.Math.*,也可以靜態(tài)導(dǎo)入某一個(gè)特定的靜態(tài)數(shù)據(jù)域或靜態(tài)方法

12.數(shù)值類型轉(zhuǎn)換:不同類型的數(shù)值進(jìn)行運(yùn)算,會(huì)將操作數(shù)轉(zhuǎn)換成同一類型再進(jìn)行計(jì)算,

? ? ?轉(zhuǎn)換的優(yōu)先級(jí)為double>float>long>int

13.強(qiáng)制類型轉(zhuǎn)換

14運(yùn)算符優(yōu)先級(jí)和結(jié)合性:先看優(yōu)先級(jí),優(yōu)先級(jí)相同再看結(jié)合性,大多數(shù)為左結(jié)合,少數(shù)幾個(gè)為右結(jié)合,如賦值,三元運(yùn)算符,+=類和一元運(yùn)算符。三元運(yùn)算符前面的如果為真,后面的就不會(huì)執(zhí)行了

int a = 1,b = 2,s = 0;

s = a>0?100:b++;

System.out.println(s);//100

System.out.println(b);//2


a+=b+=c相當(dāng)于a+=(b+=c),

int a = 1,b = 2,c = 3;

a+=b+=c;

System.out.println(a);//6

a?b:c?d:e相當(dāng)于a?b:(c?d:e)//先執(zhí)行前面的

int a = 1,b = 2,s = 0;

s = a>0?b:++b>2?200:300;

System.out.println(s);//2

System.out.println(b);//2

15.枚舉類型:舉例如下

enum Size {S,M,L,XL}

Size s = Size.S;

16.字符串String。String類被final修飾,而且String對(duì)象所維護(hù)的值是不可變的,對(duì)于String s = "hello","hello"才是真正的對(duì)象,而且是不可變對(duì)象,s只不過是指向這個(gè)字符串常量的一個(gè)引用。

final修飾變量,如果是基本類型,則變量不能被從新賦值,而且值也不會(huì)變;如果是引用類型,則不能再引用(指向不能再改變)其他對(duì)象,但是指向的對(duì)象本身的內(nèi)容可以變(不可變類除外)。

final修飾方法,可以被繼承,但是不能被重寫

final修飾的類,不能被繼承,成員變量可以是final的,也可以不是,但成員方法自動(dòng)為final

不可變類:對(duì)象一旦被創(chuàng)建完成,對(duì)象的成員變量的值將不能被改變

?如果一個(gè)類要被聲明為static的,只有一種情況,就是靜態(tài)內(nèi)部類

17.String類的API

subString(m,n):包前不包后

equals():注意與==的區(qū)別,==比較的是內(nèi)存地址,即是否為同一個(gè)對(duì)象,String的equals方法已經(jīng)重寫過了,Object類的equals方法實(shí)際上就是==

equalsIgnoreCase()

compareTo()

endsWith(),startsWith()

toLowerCase(),toUpperCase()

length(),codePointCount()

trim(),replace(),format()

注意subString等方法和+產(chǎn)生的都是新的String對(duì)象

18.StringBuilder(StringBuffer效率比StringBuilder低,但是線程安全)append和toString方法

String根據(jù)字符串本身的內(nèi)容重寫了hashCode方法,StringBuilder和StringBuffer沒有,值為內(nèi)存地址(并非真的內(nèi)存地址,而是在虛擬機(jī)中的內(nèi)存地址

19.標(biāo)準(zhǔn)輸入Scanner in = new Scanner(System.in);

String name = in.nextLine();//next line

String color = in.next();//next word

int age = in.nextInt();//next int

上面的輸入是可見的,如果讀取密碼的話,用下面的(只能在終端,不能使用IDE,否則會(huì)報(bào)空指針錯(cuò)誤,因?yàn)镮DE占用了console對(duì)象,console對(duì)象是單例對(duì)象)

Console cons = System.console();

String username = cons.readLine("User name: ");

char[] password = cons.readPassword("Password: ");//密碼使用數(shù)組存儲(chǔ),因?yàn)槭褂米址话踩?/b>

字符串放在常量池,存在的時(shí)間長,且不能被修改,使用完后不能馬上覆蓋掉(直到gc回收),使用完后,需要將數(shù)組的值覆蓋掉

20.局部變量初始化:不一定要在聲明的時(shí)候立刻初始化,如

? ? ?int a;

? ? ?a = 2;這是完全可以的

21.大數(shù)值:BigInteger(大整數(shù))和BigDecimal(大浮點(diǎn)數(shù))

? ? 大數(shù)值運(yùn)算不能使用+,-,*,/,%符號(hào),而是使用對(duì)應(yīng)的方法

add? ? subtract? ? multiply? ? divide? ? mod? ? compareTo? ? valueOf

22.數(shù)組

? ? int[] a = {1,2,3,4,5};

? ? int[] a = new int[] {1,2,3,4,5};

? ? new int[] {1,2,3,4,5};//創(chuàng)建匿名數(shù)組

????int[] a = new int[10];//數(shù)組長度可以是變量 int n = 10;int[] a = new int[n];

? ? 創(chuàng)建一個(gè)整數(shù)數(shù)組時(shí),所有元素初始化為0;boolean數(shù)組元素都為false;對(duì)象數(shù)組元素都為null

23.一些接口

? ? Formattable? ??

????Iterable

24.一些API

? ? Arrays.toString(a)//將數(shù)組a轉(zhuǎn)換成字符串(形如[1,2,3])

? ? Arrays.deepToString(a)//將二維數(shù)組轉(zhuǎn)換成字符串

? ? Arrays.copyOf(a,length)//將a數(shù)組的每個(gè)元素拷貝到長度為length的新數(shù)組,

????若length<a.length,則拷貝前面的;若length>a.length,則多余的用默認(rèn)值填充

? ? Arrays.sort(a)//使用快速排序法對(duì)數(shù)組進(jìn)行排序

? ? Arrays.binarySearch(a,b)//返回b在數(shù)組a中的索引值,若a中沒有b,則返回一個(gè)負(fù)數(shù)r,-r-1是保持a有序b應(yīng)該插入a中的位置

? ? Arrays.equals(a,b)//比較兩個(gè)數(shù)組是否相同,如果長度相同,且a[i]和b[i]相同,則返回true

? ? Random:

? ? nextInt(n):生成一個(gè)0~n-1的隨機(jī)數(shù)

25.for each

? ? for(type variable : collection) {...}//collection為數(shù)組或者實(shí)現(xiàn)了Iterable接口

? ? for(int x : a) {System.out.println(x);}

26.main方法的參數(shù)String[] args的意義

27.類之間的關(guān)系

? ? 依賴(uses-a):類A的方法操作類B的對(duì)象,A只是單純的new一個(gè)B的對(duì)象,然后調(diào)用對(duì)象的方法

? ? 聚合(has-a):類A的對(duì)象包含類B的對(duì)象,即A數(shù)據(jù)域是B類型的如兔子有腿

? ? 繼承(is-a):類A繼承于類B

28.有的類沒有數(shù)據(jù)域,只有方法域(如Math)

29.除了構(gòu)造方法和類同名,其他的方法也可以跟類的名字一樣

30.對(duì)象變量和對(duì)象:一個(gè)對(duì)象變量并不包含一個(gè)對(duì)象,它只是對(duì)象的引用,new操作符的返回值就是一個(gè)引用

31.Date和GregorianCalendar,前者表示的是一個(gè)時(shí)間點(diǎn)(距離1970年1月1日00:00:00的毫秒數(shù)),后者是日歷表示,是時(shí)間點(diǎn)的表示,同一個(gè)時(shí)間點(diǎn)表示形式有多種

GregorianCalendar月份從0開始計(jì)數(shù)

二者之間的轉(zhuǎn)換Date time,GregorianCalendar calendar;time = calendar.getTime(); calendar.setTime(time)

32.隱式參數(shù)this:類的方法(靜態(tài)方法除外)有個(gè)隱式(implicit含蓄的)this,指向調(diào)用該方法的對(duì)象本身

33.更改器方法的好處:封裝性,而且可以在修改前進(jìn)行錯(cuò)誤檢查

34.訪問器方法:在編寫訪問器的時(shí)候,如果訪問的字段是一個(gè)對(duì)象,那不應(yīng)該返回該對(duì)象的引用(根據(jù)實(shí)際情況決定),因?yàn)榉祷貙?duì)象的引用使得該對(duì)象可以被外面的程序修改,破壞了數(shù)據(jù)的私有性,而應(yīng)該先對(duì)該對(duì)象進(jìn)行克?。ㄉ羁寺。?,再返回克隆對(duì)象,當(dāng)然像String類型的不可變對(duì)象除外,因?yàn)镾tring對(duì)象不能被修改

35.一個(gè)方法可以訪問該方法所屬類的所有的對(duì)象的私有數(shù)據(jù),如

? ? class A {

? ? ? ? ?private String name;

?????????public boolean myEquals(A other) {

? ? ? ? ? ? ? ? ? ? return name.equals(other.name);

????????????????}

????}

當(dāng)執(zhí)行harry.equals(boss)的時(shí)候,equals方法不僅訪問了harry的name,還訪問了boss的name

36.final修飾數(shù)據(jù)域的時(shí)候,應(yīng)該用于基本類型(primitive)或不可變類(如String,String之所以是不可變類,不是因?yàn)橛嘘P(guān)鍵詞final修飾,而是String對(duì)象維護(hù)的值不可變,String對(duì)象維護(hù)著一個(gè)final修飾的char[]),對(duì)于可變的類會(huì)造成混亂。注意兩種變:對(duì)象變量所指向的對(duì)象發(fā)生改變(堆中的對(duì)象本身改變),對(duì)象變量的指向發(fā)生改變(對(duì)象變量本身的值變了),指向了其他的對(duì)象(詳見卷一p115)

37.靜態(tài)域(static修飾又稱類域),靜態(tài)常量(static final修飾),靜態(tài)方法(不能訪問自身類的非靜態(tài)屬性和非靜態(tài)方法,可以訪問自身類的靜態(tài)域和靜態(tài)方法)

38.java函數(shù)傳參總是按值調(diào)用,方法得到的是所有實(shí)參值的一個(gè)拷貝,并不能修改實(shí)參值(卷一p121)

39.構(gòu)造器沒有對(duì)類的數(shù)據(jù)域進(jìn)行初始化的話(不良的習(xí)慣),數(shù)據(jù)域會(huì)有默認(rèn)的初始化值,數(shù)值為0,布爾為false,對(duì)象引用為null,這是和局部變量的區(qū)別,局部變量必須明確的初始化

40.如果一個(gè)類沒有編寫構(gòu)造函數(shù),會(huì)自動(dòng)提供一個(gè)無參數(shù)的構(gòu)造函數(shù),所有的數(shù)據(jù)域會(huì)被默認(rèn)初始化;但是如果編寫了構(gòu)造函數(shù),那就不再自動(dòng)提供構(gòu)造函數(shù)

41.構(gòu)造函數(shù)的形參命名技巧:a.使用數(shù)據(jù)域一樣的名字,方法內(nèi)添加this區(qū)分;b.數(shù)據(jù)域的名字+前綴a,如數(shù)據(jù)域?yàn)閚ame,形參就用aName

42.構(gòu)造器中調(diào)用另一個(gè)構(gòu)造器:在一個(gè)構(gòu)造器中使用this(...)的形式調(diào)用另一個(gè)構(gòu)造器(必須放在第一句)

43.數(shù)據(jù)域的初始化:構(gòu)造函數(shù)中初始化,聲明的時(shí)候初始化,初始代碼塊中初始化

44.初始化塊(卷一p130-131):包在一對(duì)花括號(hào)中的代碼{...},每次構(gòu)造對(duì)象的時(shí)候都會(huì)執(zhí)行一次

45.靜態(tài)代碼塊(卷一p131):static{...},只在類第一次加載的時(shí)候執(zhí)行(所以一個(gè)類沒有main方法也能執(zhí)行,記得在靜態(tài)代碼塊最后加一句System.exit(0),否則報(bào)沒定義main方法的錯(cuò)誤信息)

46.執(zhí)行順序

? ? ①靜態(tài)代碼塊(類第一次加載執(zhí)行,只執(zhí)行一次)和靜態(tài)數(shù)據(jù)域初始化——數(shù)據(jù)域默認(rèn)初始化——按照聲明的順序或初始化塊的順序執(zhí)行聲明時(shí)的初始化(如果有的話)和初始化塊——如果構(gòu)造器中第一行調(diào)用了另一個(gè)構(gòu)造器A,則執(zhí)行構(gòu)造器A,再執(zhí)行本構(gòu)造器

????②父類靜態(tài)代碼塊和靜態(tài)數(shù)據(jù)域初始化——子類靜態(tài)代碼塊和靜態(tài)數(shù)據(jù)域初始化——父初始化(非靜態(tài))——父構(gòu)造器——子初始化(非靜態(tài))——子構(gòu)造器

47.finalize方法

48.如果在源文件頭沒有package語句,則這個(gè)類放在一個(gè)沒有名字的默認(rèn)的包中

49.如果沒有指定public或private,那么可以被同一個(gè)包中的所有方法訪問(包可見)

50.一些安全機(jī)制:JDK實(shí)現(xiàn)者禁止類加載器加載用戶定義的包名以"java."開頭的類。用戶可以使用包密封機(jī)制,將一個(gè)包密封起來,就不能再向這個(gè)包添加類了

51.呵呵,國家法律為啥要綁定微信?

最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 3,144評(píng)論 2 9
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,734評(píng)論 18 399
  • 有沒有一種方法,讓沒有一點(diǎn)電腦基礎(chǔ)的朋友也能批量加到真實(shí)、活躍、本地的寶媽好友? 答案肯定是有的,方法也很簡單,只...
    臨界點(diǎn)人閱讀 3,183評(píng)論 0 0
  • 【每日一詩】 天凈沙·冬 元代:白樸 一聲畫角譙門, 半庭新月黃昏, 雪里山前水濱。 竹籬茅舍, 淡煙衰草孤村。 ...
    靈寶王歡鳳閱讀 265評(píng)論 4 2
  • 某日,與姐姐一起出門。在等地鐵時(shí)姐姐說在地鐵門里看到一帥哥。我說在哪在哪?姐姐說后面后面。我往后瞧了瞧。沒有??!我...
    99姑娘閱讀 231評(píng)論 0 0

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