總概
- 命名規(guī)范
- 數(shù)據(jù)類(lèi)型
- eclipse常用快捷鍵
1篇裁、java開(kāi)發(fā)中的命名規(guī)則
除去一些硬性要求,比如不能用關(guān)鍵字赡若、不能以數(shù)字開(kāi)頭等达布,最好遵循以下的建議寫(xiě)法:
1、類(lèi):
每個(gè)首字母大寫(xiě)逾冬,如 Student黍聂、HelloWorld
2、接口:
同上
3身腻、變量:
第一個(gè)單詞完全小寫(xiě)产还,后續(xù)更多的單詞首字母大寫(xiě),如 age嘀趟、ageOfMyGirlfriend
4雕沉、方法:
與變量一樣,如 show()去件、getAge()
5坡椒、常量:
所有字母大寫(xiě)。如:public static final int MAX_ROW = 100
6尤溜、包(其實(shí)就是文件夾倔叼,用于對(duì)類(lèi)進(jìn)行管理):
全部小寫(xiě),多級(jí)包用點(diǎn)隔開(kāi)宫莱。公司域名的反寫(xiě)丈攒。
如 cn.pandastudio (相當(dāng)于兩級(jí)文件夾:cn\pandastudio);
com.baidu (相當(dāng)于兩級(jí)文件夾 com\baidu)
2、Java數(shù)據(jù)類(lèi)型
基本類(lèi)型:包括8種巡验,整型(byte际插、short、int【默認(rèn)】显设、long)框弛,浮點(diǎn)型(float、double【默認(rèn)】)捕捂,字符型(char)瑟枫,布爾型(boolean)。
引用類(lèi)型:(除了基本類(lèi)型指攒,都算引用類(lèi)型)慷妙,包括數(shù)組、類(lèi)允悦、接口膝擂、lambda等。
注意事項(xiàng):
1隙弛、定義long型數(shù)據(jù)猿挚,在數(shù)值之后要用L做后綴(大小寫(xiě)均可,推薦大寫(xiě))驶鹉,如520000L绩蜻。
2、定義一個(gè)float型數(shù)據(jù)室埋,在數(shù)值后要加字母F做后綴(同上)
3办绝、eclipse中常用快捷鍵整理
1、快速修正:Ctrl+1
2姚淆、單詞補(bǔ)全:Alt+/
3孕蝉、刪除行:Ctrl+D
4、在當(dāng)前行上插入一行:Ctrl+Shift+Enter
5腌逢、在當(dāng)前行下插入一行: Shift+Enter
6降淮、上下移動(dòng)選中的行:Alt+Up/Down
7、反悔:Ctrl+Z
8搏讶、上下移動(dòng)選中的行:Alt+Up/Down
9佳鳖、保存:Ctrl+S
10、注釋?zhuān)篊trl+/
11媒惕、查找:Ctrl+F
12系吩、排版:Ctrl+Shift+F
13、設(shè)置縮略和展開(kāi):
縮略:Window-->preferences-->key-->Collapse All
展開(kāi):Window-->preferences-->key-->Expand All
14妒蔚、設(shè)置自動(dòng)提示:
Eclipse? -> Window -> Perferences -> Java -> Editor -> Content Assist
15穿挨、shift+enter:快速換行
4月弛、棧的深度
棧的深度與局部變量有關(guān),局部變量越多科盛,棧越淺帽衙。
驗(yàn)證,通過(guò)自己調(diào)用自己贞绵,異常等驗(yàn)證厉萝。
5、i++和++的區(qū)別
1但壮、首先,單獨(dú)拿出來(lái)說(shuō)++i和i++常侣,意思都是一樣的蜡饵,就是i=i+1。
2胳施、如果當(dāng)做運(yùn)算符來(lái)說(shuō)溯祸,就是a=i++或者a=++i這樣的形式。情況就不一樣了舞肆。
先說(shuō)a=i++焦辅,這個(gè)運(yùn)算的意思是先把i的值賦予a,然后在執(zhí)行i=i+1椿胯;
而a=++i筷登,這個(gè)的意思是先執(zhí)行i=i+1,然后在把i的值賦予a哩盲;
舉個(gè)例子來(lái)說(shuō)前方,如果一開(kāi)始i=4。
那么執(zhí)行a=i++這條語(yǔ)句之后廉油,a=4惠险,i=5;
那么執(zhí)行a=++i這條語(yǔ)句之后抒线,i=5班巩,a=5;
同理嘶炭,i--和--i的用法也是一樣的抱慌。
例如:設(shè)x = 1 , y = 2 , z = 3,則表達(dá)式y(tǒng)+=z--/++x?的值是(A )眨猎。
A. 3?? B. 3. 5??? C. 4???D. 5 ? ? ? ? ? ??
解:按從左往右先乘除后加減的順序遥缕。z--除以++x,此時(shí)z為3宵呛,x為2单匣,所以3/2取整為1,y加上后邊的結(jié)果為2+1=3。
6户秤、String創(chuàng)建的對(duì)象個(gè)數(shù)問(wèn)題
String str = "hello";
String str1 = "hello";
Syso(str==str1); ? ? ? ? ?? //比較的是地址值码秉。輸出為T(mén)rue。指向的是同一個(gè)
String str2 = new String("hello"+str); //有兩個(gè)對(duì)象鸡号。"hello"和str為同一個(gè)對(duì)象转砖,str2為另一個(gè)對(duì)象。
String str2 = new String("hell"+str);
str.equals(str1) ? ? ? ?? //String中的equal()重寫(xiě)了鲸伴,相當(dāng)于只比較數(shù)值府蔗。
7、java 內(nèi)部類(lèi)為什么不能用靜態(tài)方法 汞窗?
非static的內(nèi)部類(lèi)姓赤,在外部類(lèi)加載的時(shí)候,并不會(huì)加載它仲吏,所以它里面不能有靜態(tài)變量或者靜態(tài)方法不铆。
static類(lèi)型的屬性和方法,在類(lèi)加載的時(shí)候就會(huì)存在于內(nèi)存中裹唆。
要使用某個(gè)類(lèi)的static屬性或者方法誓斥,那么這個(gè)類(lèi)必須要加載到j(luò)vm中。
基于以上兩點(diǎn)许帐,可以看出劳坑,如果一個(gè)非static的內(nèi)部類(lèi)如果具有static的屬性或者方法,那么就會(huì)出現(xiàn)一種情況:內(nèi)部類(lèi)未加載成畦,但是卻試圖在內(nèi)存中創(chuàng)建static的屬性和方法泡垃,這當(dāng)然是錯(cuò)誤的。原因:類(lèi)還不存在羡鸥,但卻希望操作它的屬性和方法蔑穴。
8、&& 和 &
9惧浴、再談i++和++i(經(jīng)常錯(cuò)4婧汀!衷旅!無(wú)語(yǔ)??)
看個(gè)例子:
```public class Tmp {
public static void main(String[] args) {
int i = 1;
int j = 10;
do {
if (i++ > --j)
continue;
} while (i < 5);
System.out.println("i:? "+i+"? j:? "+j);
}
}```
輸出結(jié)果:
i: 5 j: 6
分析:
下面是轉(zhuǎn)載自知乎的解釋?zhuān)蓞⒖肌?/p>
(1)如果只是看i++和++i捐腿,這兩個(gè)是等價(jià)的,都等同于i=i+1柿顶,都是變量自身加1茄袖。
(2)在一般情況下,它們都是跟賦值聯(lián)系在一起嘁锯。
比如:
int a;
a=i++;//將i的值賦值給a宪祥,即a=i聂薪;然后再執(zhí)行i=i+1;
也就是【a=i++;】與【a=i; i=i+1;】等價(jià)蝗羊。
a=++i;//將i+1的值賦給a,即a=i+1;然后再執(zhí)行i=i+1藏澳;
也就是【a=++i;】與【a=i+1;i=i+1;】等價(jià)。
(3)【總結(jié)一下】
①前置++是將自身加1的值賦值給新變量耀找,同時(shí)自身也加1翔悠;
②后置++是將自身的值賦給新變量,然后才自身加1.
作者:知乎用戶(hù)
鏈接:https://www.zhihu.com/question/19811087/answer/83748442
來(lái)源:知乎
著作權(quán)歸作者所有野芒。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)蓄愁,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
10狞悲、值傳遞撮抓、引用傳遞
CSDN博客:https://blog.csdn.net/zhzhao999/article/details/53449504
11、AutoCloseable接口
從jdk1.7開(kāi)始效诅,引入了資源自動(dòng)關(guān)閉的接口AutoCloseable胀滚。一些資源也實(shí)現(xiàn)了該接口趟济,如preparedStatement乱投、Connection、InputStream顷编、outputStream等等資源接口戚炫。在使用的時(shí)候只需要把資源在try塊中用小括號(hào)括起來(lái)就可以了。
12媳纬、String str="test"和String str=new String("test")區(qū)別
該部分可以再詳細(xì)研究一下java中的特殊類(lèi)String涉及到常量池的設(shè)計(jì)思想很巧妙??
先去看看常量池的概念: http://blog.csdn.net/cquptzg/article/details/72457389
"test"是存放在常量池中的對(duì)象双肤,常量池中不會(huì)存放相同的對(duì)象,
new String("test")是存放在堆中的對(duì)象钮惠,即使內(nèi)容相同也會(huì)創(chuàng)建不同的對(duì)象茅糜。
【例】?
? ? ? ? ?? String str1 = "test";?
? ? ? ? ? ?String str2 = "test";
? ? ? ? ? ?String str3 = new String("test);
? ? ? ? ? ?String str4 = new String("test);
? ? ? ? ? ?str1==str2的值為true;因?yàn)?test"存放在常量池中素挽,所以str1與str2均是"test"的同一個(gè)引用
? ? ? ? ? ?str1==str3的值為false蔑赘;
? ? ? ? ? ?str3==str4的值為false;即使他們內(nèi)容都是"test"预明,但也會(huì)分別創(chuàng)建對(duì)象缩赛。
若用equals()方法,因?yàn)閮?nèi)容都是"test"撰糠,則結(jié)果都是ture酥馍,
【對(duì)于==與equals的疑問(wèn),跳轉(zhuǎn):http://blog.csdn.net/cquptzg/article/details/72158040】
【總結(jié)】 通過(guò)常量池創(chuàng)建的對(duì)象阅酪,若內(nèi)容相同旨袒,則只會(huì)有一個(gè)汁针,而通過(guò)new創(chuàng)建的則不管之前有沒(méi)有創(chuàng)建過(guò)內(nèi)容相同的都會(huì)在堆里新創(chuàng)建一個(gè)對(duì)象
案例分析:
String str1="java";//指向字符串池
?? String str2="blog";//指向字符串池
???? ? String?? s = str1+str2;
+運(yùn)算符會(huì)在堆中建立起兩個(gè)String對(duì)象,這兩個(gè)對(duì)象的值分別是“java”,"blog",也就是說(shuō)從字符串常量池中復(fù)制這兩個(gè)值峦失,然后再堆中創(chuàng)建兩個(gè)對(duì)象扇丛。然后再建立對(duì)象s,然后將“javablog”的堆地址賦給s.? 這句話(huà)共創(chuàng)建了3個(gè)String對(duì)象。
String str1 = “str1”:
1尉辑、 在棧中創(chuàng)建str1的引用帆精。
2、 去常量池中查看是否有相同Unicode編碼的字符串常量隧魄。如果有將str1指向該常量卓练,如果沒(méi)有則創(chuàng)建一個(gè)內(nèi)容為”str1”的字符串常量,將str1的引用指向該常量购啄。
3襟企、 如果str1進(jìn)行了賦值str1= “123”,則棧中的str1的引用指向新的內(nèi)容為“123”的字符串常量。
4狮含、 String str1 = “str1”; String str2 = “str1”;str2的引用指向常量池中已經(jīng)存在的內(nèi)容為“str1”的常量顽悼,不會(huì)重新創(chuàng)建新的常量,str1和str2的引用指向同一個(gè)常量几迄。
str1 == str2; str1+”a” != str2+”a”;
String str1 = new String(“str1”):
1蔚龙、 在常量池中創(chuàng)建內(nèi)容為“str1”的對(duì)象,在堆中創(chuàng)建內(nèi)容為“str1”的對(duì)象映胁。
2木羹、 String str1 = new String(“str1”); String str2 = new String(“str1”);str2不會(huì)指向之前創(chuàng)建的對(duì)象,而是重新創(chuàng)建一個(gè)對(duì)象解孙。
str1 != str2;
代碼如下:
? ? ? ? String str1 = "str1";
? ? ? ? String str2 = "str1";
? ? ? ? String str3 = new String("str1");
? ? ? ? String str4 = new String("str1");
? ? ? ? System.out.println(str1==str2);//true地址一樣
? ? ? ? System.out.println(str3==str4);//false,但地址不一樣
? ? ? ? System.out.println(str3.equals(str4));//true,值一樣
? ? ? ? System.out.println(str2.equals(str3));//true,值一樣
? ? ? ? System.out.println((str1+"a")==(str2+"a"));//false;進(jìn)行了+連接地址不一樣
? ? ? ? System.out.println((str1+"a").equals((str2+"a")));//true;進(jìn)行了+連接值一樣
13坑填、聲明對(duì)象和聲明對(duì)象并賦值為null的區(qū)別,以及null調(diào)用方法弛姜,運(yùn)行時(shí)出現(xiàn)空指針異常
Object o與Object o=null的區(qū)別
class Test {
? public static void main(String[] args) {
? Object o1;
? o1.toString(); /*這里編譯不能通過(guò)脐瑰,編譯器只認(rèn)定o1是個(gè)引用,沒(méi)指向任何對(duì)象廷臼,所以不能調(diào)用方法苍在。*/
? Object o2 = null;
? o2.toString(); /*這里編譯可以過(guò),但是有空指針異常中剩,編譯器認(rèn)定o2是一個(gè)對(duì)象忌穿,雖然是一個(gè)空對(duì)象。*/
? }
}
null對(duì)象是一個(gè)特殊的對(duì)象结啼,他可以是任何類(lèi)型掠剑。他只是作為一個(gè)標(biāo)記而已,只是為了標(biāo)記不存在而存在的郊愧。也沒(méi)必要去追究他在內(nèi)存是什么樣朴译。null就是一個(gè)標(biāo)記而已井佑。容器可以接受一個(gè)空對(duì)象,但是一個(gè)空引用則是不接受的眠寿。
Object o; //這種寫(xiě)法只是分配一個(gè)引用躬翁,沒(méi)有分配內(nèi)存。
Object o = null; //這么寫(xiě)則是給引用指向了一個(gè)空對(duì)象盯拱。分配了內(nèi)存(空對(duì)象)盒发,所以編譯不會(huì)報(bào)錯(cuò),運(yùn)行時(shí)報(bào)空指針異常狡逢。