我的Java雜記

好長時間了,之前記的。用的著收好。

1.前++后++

自增運算符:++

自減運算符:--

基本含義:讓一個變量漲一個數(shù)字1,或者讓一個變量降一個數(shù)字1

使用格式:寫在變量名稱之前,或者寫在變量名稱之后。例如:++num,也可以num++

使用方式:

1. 單獨使用:不和其他任何操作混合,自己獨立成為一個步驟。

2. 混合使用:和其他操作混合,例如與賦值混合,或者與打印操作混合,等。

使用區(qū)別:

1. 在單獨使用的時候,前++和后++沒有任何區(qū)別。也就是:++num;和num++;是完全一樣的。

2. 在混合的時候,有【重大區(qū)別】

A. 如果是【前++】,那么變量【立刻馬上+1】,然后拿著結(jié)果進(jìn)行使用。?? ?【先加后用】

B. 如果是【后++】,那么首先使用變量本來的數(shù)值,【然后再讓變量+1】。?? ?【先用后加】

例如:// 與打印操作混合的時候

int num2 = 20;

// 混合使用,先++,變量立刻馬上變成21,然后打印結(jié)果21

System.out.println(++num2); // 21

System.out.println(num2); // 21

System.out.println("=================");

int num3 = 30;

// 混合使用,后++,首先使用變量本來的30,然后再讓變量+1得到31

System.out.println(num3++); // 30

System.out.println(num3); // 31

System.out.println("=================");

2.封g、s

封裝中g(shù)et、set方法中:

set是有參無返回值,并且是往里放。

get是無參有返回值,并且是往外拿。

3.Scanner、Random、ArrayList小雜

Scanner類是屬于控制臺輸出,有普通的,和匿名的兩種。

Random用來生成隨機(jī)數(shù)字,其方法和Scanner方法一樣,只是不帶參數(shù),還有在使用nextInt()是范圍是正負(fù)21億。

當(dāng)nextInt(n)中有參數(shù)時就是代表隨機(jī)數(shù)是一個左閉右開區(qū)間的范圍(【0~n)范圍也就是0~n-1)

ArrayList list = new ArrayList<>();ArrayList集合,但凡在jdk1.7以上的版本后面的ArrayList<>都不用寫參數(shù),否則反之。

list.add( );這是增加索引,

list.get()從元素中獲取

list.remove()從元素中刪除元素

list.size()獲取元素的長度

4.基本數(shù)據(jù)類型小雜

八個基本類中一般都是把首字母變成大寫就變成包裝類了,而int和char的包裝類是特殊的,

int的包裝類是Integer,char的包裝類是Character.

5.字符串大雜

String 字符串中==是地址相等

例如: public static void main(String[] args) {

String str1 = "abc";

String str2 = "abc";

char[] charArray = {'a','b','c'};

String str3 = new String(charArray);

System.out.println(str1 == str2);//ture

System.out.println(str1 == str3);//false

System.out.println(str2 == str3);//false

}

如果字符串是equals的話比較的是內(nèi)容

例如: System.out.println(str1.equals(str2));//ture

System.out.println(str1.equals(str3));//ture

System.out.println(str2.equals(str3));//ture

但比較大小寫的話就會是flase,其中如果是equalsIgnoreCase()就是ture,Ignore是忽略,Case大小寫。

并且只有英文字母區(qū)分大小寫,中文沒有,會出現(xiàn)false.

例如:

String strA = "Java";

String strB = "java";

System.out.println(strA.equals(strB));//嚴(yán)格區(qū)分大小寫 ?false

System.out.println(strA.equalsIgnoreCase(strB));// ture

String 當(dāng)中與獲取相關(guān)的常用方法

public int length()獲取字符串中字符的個數(shù)

例如:

int ch = "jfijfjfjfllf".length();

System.out.println("字符串的長度是:"+ch);//出來長度12

public String concat( String str);將當(dāng)前字符串和參數(shù)字符串拼接成返回值的字符串。

例如:

String str1 = "Hello";

String str2 = "World";

String str3 = str1.concat(str2);

System.out.println(str1);//Hello

System.out.println(str2);//World

System.out.println(str3);//HelloWorld

public char charAt(int indenx):查取指定索引位置的單個字符

例如:

char hh = "Hello".charAt(1);

System.out.println("在字符串中第一個索引是:"+hh);//會把字符串中被索引的字母搜出來的,這個查詢和

//數(shù)組的查詢方式一樣按0.1.3.....de 方式

public int indexof(String str):查找參申訴字符串在本字符串當(dāng)中首次出現(xiàn)的索引位置,如果沒有返回-1值

例如:

String str6 = "HelloWorld";

int h = str6.indexOf("llo");

System.out.println("第一次索引值是:"+h);//查找參數(shù)字符串在本來字符串中的第一索引位置

int asd = str6.indexOf("asd");

System.out.println("第一次索引值是:"+asd);//如果根本沒有,返回-1值。

public String substring(int index):截取從參數(shù)位置一直到字符末尾,返回新字符串。

public String substring(int begin,int end):截取從begin開始end結(jié)束,中間的字符串。備注:【begin,end),包含左邊,不包含右邊。

例如:

public static void main(String[] args) {

String str1 = "HelloWorld";

String sub = str1.substring(5);

System.out.println(str1);

System.out.println(sub);//World

String sub2 = str1.substring(4, 7);

System.out.println(sub2);//owo

}

public char[ ] toCharArray():將當(dāng)前字符串拆分成為字符數(shù)組作為返回值

public byte[ ] getBytes():獲取當(dāng)前字符串底層的字節(jié)數(shù)組。

public String replace( CharSequrnce oldString,CharSequence newString):

將所有出現(xiàn)的老字符串替換成為新字符串,返回替換之后的結(jié)果新字符串。

例如:

char[] ch = "Hello".toCharArray();

System.out.println(ch[0]);

System.out.println(ch.length);//5

byte[] k = "ABC".getBytes();

for (int i = 0; i < k.length; i++) {

System.out.println(k[i]);//65.66.67

}

String str2 = "How do you do?";

String he = str2.replace("o", "*");

System.out.println(str2);//How do you do?

System.out.println(he);//H*w d* y*u d*?

String str3 = "雷吱木吱嘎,丟類老母";

String ma = str3.replace("丟類老母", "****");

System.out.println(ma);//雷吱木吱嘎,****

分割字符串的方法;

public String[] split(String regex):按照參數(shù)的規(guī)則,將字符串切分成為若干部分。

注意事項:split方法的參數(shù)其實是一個“正則表達(dá)式”,今后學(xué)習(xí)。

今天要注意:如果要按照英文句點"."進(jìn)行切分,必須寫“\\.(兩個反斜杠)”

6.靜態(tài)變量小雜

static靜態(tài)關(guān)鍵字,在類中使用可屬于每個對象,調(diào)用。

光標(biāo)放在需要修改的變量名上,然后shift + F6~ 完美~

static靜態(tài)方法不用創(chuàng)建對象可以直接調(diào)用,調(diào)用時一半建議用類名.方法名

無論是成員變量,還是成員方法。如果有了static,都推薦使用類名稱進(jìn)行調(diào)用。

靜態(tài)變量:類名稱.靜態(tài)變量

靜態(tài)方法:類名稱.靜態(tài)方法() ?注意:靜態(tài)方法中不能出現(xiàn)this對象

注意:靜態(tài)不能訪問非靜態(tài)。原因:因為在內(nèi)存當(dāng)中是【先】有靜態(tài)內(nèi)容,【后】有的

非靜態(tài)內(nèi)容“古人不知今人,但今人知道古人”

static靜態(tài)代碼塊,特點:當(dāng)?shù)谝淮斡玫奖绢悤r,靜態(tài)代碼執(zhí)行唯一的一次。

靜態(tài)內(nèi)容總是優(yōu)先于非靜態(tài),所以靜態(tài)代碼塊比構(gòu)造方法先執(zhí)行。

(1):靜態(tài)代碼塊的典型用途:

用來一次性地對靜態(tài)變量進(jìn)行賦值。

private int id()

private static int idCounter = 0;//學(xué)號計時器,每當(dāng)new了一個新對象的時候,計數(shù)器++

public static String toString (數(shù)組):將參數(shù)組變成字符串,(按照默認(rèn)格式:[元素1,元素2,元素3.......])

(2)public static void sort(數(shù)組):按照默認(rèn)升序(從小到大)對數(shù)組元素進(jìn)行排序。

例如:

int[] str = {1,2,3};

String s = Arrays.toString(str);

System.out.println(s);//[1,2,3]

int[] two = {3,2,4,5,1,9,8};

Arrays.sort(two);

System.out.println(Arrays.toString(two));//[1,2,3,4,5,8,9]

(3)java.util.math類是數(shù)學(xué)相關(guān)的工具類,里面提供大量的靜態(tài)方法,完成與數(shù)學(xué)運算符相關(guān)的方法

public static double ?abs( double num):獲取絕對值。

public static double ?ceil( double num):向上取整。

public static double ?floor( double num):向下取整。

public static long ?round(double num):四舍五入。

例如:System.out.println(Math.abs(3.14));//3.14

System.out.println(Math.abs(-5.6));//5.6

System.out.println(Math.ceil(3.9));//4.0

System.out.println(Math.ceil(3.1));//4.0

System.out.println(Math.ceil(-3.1));//-3.0

System.out.println(Math.floor(3.9));//3.0

System.out.println(Math.floor(3.1));//3.0

System.out.println(Math.floor(-3.1));//-4.0

System.out.println(Math.floor(-3.1));//-4.0

System.out.println(Math.round(3.5));//4

System.out.println(Math.round(3.1));//3

System.out.println(Math.PI);//3.141592653589793

7.面向?qū)ο蟮娜筇匦裕悍庋b性、繼承性、多態(tài)性。

繼承是多態(tài)的前提,如果沒有繼承就沒有多態(tài)。

在繼承的關(guān)系中,“子類就是一個父類”。也就是說,子類可以被當(dāng)做父類看待。

例如:父類是員工,子類是講師,那么“講師就是一個員工”。

在父子類的繼承關(guān)系當(dāng)中,如果成員變量重名,則創(chuàng)建子類對象時,訪問有兩種方式:

直接通過子類對象訪問成員變量:

等號左邊是誰,就優(yōu)先用誰,沒有則想上找。

簡介通過成員方法訪問成員變量:

該方法屬于誰,就優(yōu)先用誰,沒有則向上找。

在父子關(guān)系中,創(chuàng)建子類對象,訪問成員方法的規(guī)則:

創(chuàng)建的對象是誰,就優(yōu)先用誰,如果沒有則向上找。

例如:

public static void main(String[] args) {

zi h = new ?zi();

h.methodzi();//子類構(gòu)造方法。

h.methodfu();//父類構(gòu)造方法。

h.method(); ?//子類構(gòu)造方法。22

}

重寫(Override)

概念:在繼承關(guān)系中,方法和名稱一樣,參數(shù)列表也一樣。

重寫(Override):方法的名稱一樣,參數(shù)列表【也一樣】。最好叫覆蓋、覆寫

重載(Overload):方法名稱一樣,參數(shù)列表【不一樣】。

方法的覆蓋重寫特點:創(chuàng)建的是子類對象,則優(yōu)先用子類方法。

方法覆蓋重寫的注意事項:

1.必須保證父子類之間方法的名稱相同,參數(shù)列表也相同。

@Overriad:寫在方法前面,用來檢測是不是有效的正確覆蓋重寫。

這個注解就算了,只要滿足要求,也是正確的方法覆蓋重寫。

2.子類方法的返回值必須【小于等于】父類方法的返回值范圍。

小擴(kuò)展提示:java.lang.object類是所有類的公共最高類(祖宗類),java.lang.String

就是object的子類。

3.子類方法的權(quán)限必須【大于等于】父類方法的權(quán)限修飾符。

小擴(kuò)展提示:public>protected>(default)>private

備注:(default)不是關(guān)鍵字ddefault,而是什么都不寫,留空。

其中有一個super的用法,//把父類的show方法拿過來重復(fù)利用//自己子類在添加更多內(nèi)容。

==============================

this和super兩種構(gòu)造調(diào)用,不能同時使用,還有它們都是也必須是構(gòu)造方法的第一個語句,

唯一一個。在同一個調(diào)用中不會有第二個this和super。

=============================================

如何使用抽象類抽象方法:

1.不能直接創(chuàng)建new對象。

2.必須用一個子類來繼承抽像父類。

接口:接口是一種公共的規(guī)范標(biāo)準(zhǔn)

接口中:抽象是abstract,默認(rèn)是default,靜態(tài)方法是static.

靜態(tài)跟對象沒關(guān)系,跟類有關(guān)系。

而且靜態(tài)方法中:不能通過接口實現(xiàn)類的對象來調(diào)用接口當(dāng)中的靜態(tài)方法。

正確用法:通過接口名稱,直接調(diào)用其中的靜態(tài)方法。

格式:接口名稱.靜態(tài)方法名(參數(shù))

接口也可以定義“成員變量”,但是必須使用public static final三個關(guān)鍵字

進(jìn)行修飾。從效果上看,就是接口的常量。

格式:

public static final 數(shù)據(jù)類型 常量名稱 = 數(shù)據(jù)值;

注意事項:

1.接口當(dāng)中的常量,可以省略public static final ,注意:不寫也一樣。

2.接口當(dāng)中的常量,必須進(jìn)行賦值;不能不賦。

final 這是一個常量,一旦賦值,不可以修改。

多態(tài):一個對象擁有多種形態(tài),也就是:對象的多態(tài)性。

父類引用指向子類對象。

對象的向上轉(zhuǎn)型就是:父類引用指向子類對象。

向上轉(zhuǎn)型一定是安全的,沒有問題的,正確的。但是也有一個弊端:

對象一旦向上轉(zhuǎn)型為父類,那么就無法調(diào)用子類原本特有的內(nèi)容。

ClassCastException類轉(zhuǎn)換異常

8.數(shù)據(jù)結(jié)構(gòu)

棧-----------這個結(jié)構(gòu)就是先進(jìn)后出。入口和出口在同一側(cè)。

隊列---------這個結(jié)構(gòu)就是先進(jìn)先出。入口和出口在兩側(cè)。

數(shù)組---------這個結(jié)構(gòu)查詢快,增刪慢。

查詢快:數(shù)組的地址是連續(xù)的,我們通過數(shù)組的首地址可以找到數(shù)組,通過數(shù)組的索引可以快速查找某一個元素

增刪慢:數(shù)組的長度是固定的,我們想要增加/刪除一個元素必須創(chuàng)建一個新數(shù)組,把源數(shù)組的數(shù)據(jù)復(fù)制過來

在堆內(nèi)中,頻繁的創(chuàng)建數(shù)組,復(fù)制數(shù)組中的元素,銷毀數(shù)組,效率低下。

鏈表----------這個結(jié)構(gòu)查詢慢,增刪快。

查詢慢:鏈表中地址不是連續(xù)的,每次查詢元素都必須從頭開始查詢。

增刪快:鏈表結(jié)構(gòu),增加/刪除一個元素,對鏈表的整體結(jié)構(gòu)沒有影響所以增刪快。

鏈表分兩種一種是單向鏈表,一種是雙向鏈表。

單向鏈表:鏈表中只一條子鏈,不能保證元素的順序(存儲元素和取出元素的順序有可能一致)

雙向鏈表:鏈表中有兩條鏈子,有一條鏈子是專門記錄元素的順序,是一個有序的集合。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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