Java基礎(chǔ)
1、JDK是什么?JRE是什么?JDK和JRE的區(qū)別?
JRE:Java Runtime Environment ,Java虛擬機吓蘑、庫函數(shù)惕虑、運行Java應(yīng)用程序和Applet所必須文件
JDK:Java Development Kit:JRE的超集,包含編譯器和調(diào)試器等用于程序開發(fā)的文件
Java運行環(huán)境的三項主要功能:
- 加載代碼 :由class loader 完成
- 校驗代碼 :由bytecode verifier 完成
- 執(zhí)行代碼 :由 runtime interpreter完成
2磨镶、HelloWorld
編譯:利用編譯器(javac)將源程序編譯成字節(jié)碼文件溃蔫,文件名:源文件名.class,
javac命令編譯HelloWorld.java文件為HelloWorld.class文件琳猫,
運行:利用虛擬機(解釋器伟叛,java)解釋執(zhí)行class字節(jié)碼文件。java命令
3脐嫂、標識符(不能是關(guān)鍵字)
- 標識符可以由字母统刮、數(shù)字、下劃線(_)雹锣、美元符($)組成网沾,但不能包含 @癞蚕、%蕊爵、空格等其它特殊字符,不能以數(shù)字開頭桦山。譬如:111stu 就是不合法攒射。
- 標識符不能是 Java關(guān)鍵字和保留字(Java預(yù)留的關(guān)鍵字,以后的升級版本中有可能作為關(guān)鍵字)恒水,但可以包含關(guān)鍵字和保留字会放。如:不可以使用 void 作為標識符,但是 Stuvoid 可以钉凌。
- 標識符是嚴格區(qū)分大小寫的咧最。并且沒有長度限制的。 一定要分清楚 Student和 student是兩個不同的標識符御雕!
4矢沿、數(shù)據(jù)類型
5、基本數(shù)據(jù)類型轉(zhuǎn)換
自動類型轉(zhuǎn)換:容量小的數(shù)據(jù)類型可以自動轉(zhuǎn)換為容量大的數(shù)據(jù)類型酸纲。
強制轉(zhuǎn)換:顯示轉(zhuǎn)換捣鲸,丟失精度
6、String闽坡、StringBuffer栽惶、StringBuilder
String是引用類型愁溜。可以用String str= new String("abc");的形式來創(chuàng)建外厂,也可以用String str ="abc"冕象;的形式來創(chuàng)建
String str = "abc"創(chuàng)建對象的過程
1 首先在常量池中查找是否存在內(nèi)容為"abc"的字符串對象
2 如果不存在則在常量池中創(chuàng)建一個"abc"的字符串對象,并讓str引用 該對象
3 如果存在則直接讓str引用該對象
String str = new String("abc")創(chuàng)建對象的過程
1首先定義一個str的String類型的引用并存放在棧中
2在字符串常量池中查看是否存在內(nèi)容為"abc"字符串對象
3若存在則跳過這個步驟酣衷,若不存在交惯,則在字符串常量池中創(chuàng)建一個內(nèi)容為"abc"的字符串對象
4執(zhí)行new操作,在堆中創(chuàng)建一個指定的對象"abc"穿仪,這里堆的對象是字符串常量池“abc”對象的一個拷貝對象
5讓str指向堆中“abc”這個對象(也就是存儲這個對象的在堆中的地址)
常用操作:
- (1) 字符串的連接
public String concat(String str)
該方法的參數(shù)為一個String類對象,作用是將參數(shù)中的字符串str連接到原來字符串的后面. - (2)求字符串的長度
public int length()
返回字串的長度,這里的長度指的是字符串中Unicode字符的數(shù)目. - (3)求字符串中某一位置的字符
public char charAt(char ndex)
該方法在一個特定的位置索引一個字符串,以得到字符串中指定位置的字符.值得注意的是,在字符串中第一個字符的索引是0,第二個字符的索引是1,依次類推,最后一個字符的索引是length()-1. - (4)字符串的比較
比較字符串可以利用String類提供的下列方法:
public boolean equals(Object anObject)
該方法比較兩個字符串,和Character類提供的equals方法相似,因為它們都是重載Object類的方法.該方法比較當前字符串和參數(shù)字符串,在兩個字符串相等的時候返回true,否則返回false. - (5)從字符串中提取子串
public String substring(int beginIndex)
該方法從beginIndex位置起,從當前字符串中取出剩余的字符作為一個新的字符串返回. - (6) 字符串中單個字符的查找
字符串中單個字符的查找可以利用String類提供的下列方法:
public int indexOf(int ch)
該方法用于查找當前字符串中某一個特定字符ch出現(xiàn)的位置.該方法從頭向后查找,如果在字符串中找到字符ch,則返回字符ch在字符串中第一次出現(xiàn)的位置;如果在整個字符串中沒有找到字符ch,則返回-1. - (7) 字符串中多余空格的去除
public String trim()
該方法只是去掉開頭和結(jié)尾的空格,并返回得到的新字符串.值得注意的是,在原來字符串中間的空格并不去掉.
運行速度:StringBuilder > StringBuffer > String
StringBuilder:非線程安全席爽,StringBuffer:線程安全
因為,String為字符串常量啊片,而StringBuilder和StringBuffer均為字符串變量只锻,即String對象一旦創(chuàng)建之后該對象是不可更改的,但后兩者的對象是變量紫谷,是可以更改的齐饮。
首先創(chuàng)建一個String對象str,并把“abc”賦值給str笤昨,然后在第三行中祖驱,其實JVM又創(chuàng)建了一個新的對象也名為str,然后再把原來的str的值和“de”加起來再賦值給新的str瞒窒,而原來的str就會被JVM的垃圾回收機制(GC)給回收掉了捺僻,所以,str實際上并沒有被更改崇裁,也就是前面說的String對象一旦創(chuàng)建之后就不可更改了匕坯。所以,Java中對String對象進行的操作實際上是一個不斷創(chuàng)建新的對象并且將舊的對象回收的一個過程拔稳,所以執(zhí)行速度很慢葛峻。
而StringBuilder和StringBuffer的對象是變量,對變量進行操作就是直接對該對象進行更改巴比,而不進行創(chuàng)建和回收的操作术奖,所以速度要比String快很多。
7轻绞、變量(對應(yīng)于常量 static final)
局部變量:方法或語句塊內(nèi)部定義的變量采记。生命周期是從聲明位置開始 到”}”為止。在使用前必須先聲明和初始化(賦初值)
成員變量(實例變量):方法外部铲球、類的內(nèi)部定義的變量挺庞。從屬于對象,生命周期伴隨對象始終稼病,隸屬于類选侨。如果不自行初始化掖鱼,他會自動初始化成該類型的默認初始值(數(shù)值型變量初始化成0或0.0,字符型變量的初始化值是16位的0援制,布爾型默認是false)
靜態(tài)變量(類變量):使用static定義戏挡。 從屬于類,生命周期伴隨類始終晨仑,從類加載到卸載褐墅。如果不自行初始化,他會自動初始化成該類型的默認初始值(數(shù)值型變量初始化成0或0.0洪己,字符型變量的初始化值是16位的0妥凳,布爾型默認是false)
成員變量在堆內(nèi)存中,由于對象的存在答捕,才在內(nèi)存中存在逝钥;
局部變量在棧內(nèi)存中;
局部變量必須初始化拱镐,否則不能運行艘款;
成員變量有默認初始化值,因此可以不初始化沃琅;
當成員變量和局部變量名稱一致時哗咆,默認使用局部變量
8、運算符
- 算數(shù)運算符
- 自增自減運算符
- 關(guān)系運算符
- 位運算符
- 邏輯運算符
- 賦值運算符
- 三目運算符
- instanceof運算符
9益眉、代碼結(jié)構(gòu)
選擇結(jié)構(gòu):
if else
switch case:
switch 語句中的變量類型可以是: byte晌柬、short、int 呜叫、char空繁。
從 Java SE 7 開始殿衰,switch 支持字符串類型了朱庆,同時 case 標簽必須為字符串常量或字面量。
循環(huán)結(jié)構(gòu):
while 循環(huán)
do…while 循環(huán)
for 循環(huán)
增強for 循環(huán)
增強for循環(huán)有些缺點闷祥,
例如不能在增強循環(huán)里動態(tài)的刪除集合內(nèi)容娱颊,不能獲取下標等
- (1)對于非集合類(沒有實現(xiàn) Iterable接口)的數(shù)組遍歷,增強型for循環(huán)和普通循環(huán)遍歷原理相同,效率相同
- (2)對于集合類(實現(xiàn)了Iterable接口)凯砍,增強型for循環(huán)的遍歷其本質(zhì)就是迭代器 iterator的遍歷,和普通循環(huán)遍歷相比箱硕,各自有自己適用的場景,比如說普通for循環(huán)比較適合List類(數(shù)組類)遍歷通過下標查找數(shù)據(jù)的悟衩,而增強型for循環(huán)則比較適合鏈表結(jié)構(gòu)的集合的遍歷剧罩。
10、數(shù)組
數(shù)組聲明
int a[];
int[] a;
數(shù)組初始化
靜態(tài)初始化:
int a[]={1,2,3,4};
動態(tài)初始化:
int a[]=new int[5]; 創(chuàng)建一個長度為5的int 數(shù)組座泳。
數(shù)組遍歷
可以使用普通for循環(huán)或者foreach循環(huán)遍歷數(shù)組惠昔。
- 數(shù)組是對象類型幕与,聲明數(shù)組時注意new的使用;
- 聲明數(shù)組時一定要考慮數(shù)組的最大容量镇防,數(shù)組一旦被聲明了啦鸣,大小就固定了,不能修改容量来氧。
- java 支持多為數(shù)組诫给,使用比較少。