命名規(guī)則:
工程名:一般小寫
Package名字:小寫
類名:每個(gè)單詞的首字母大寫
屬性和方法名:小駝峰 首個(gè)單詞首字母小寫,其余單詞首字母大寫
static final修飾的認(rèn)為是常量:常量屬性全大寫
基本數(shù)據(jù)類型
數(shù)值型:
整型(整數(shù) byte short int long)
浮點(diǎn)型(小數(shù)float double(默認(rèn)))
字符型:char(單個(gè)字符,2字節(jié))
布爾型:Boolean(true/false 經(jīng)常用作開(kāi)關(guān))
引用數(shù)據(jù)類型(類、接口、數(shù)組)
char 型變量中能不能存貯一個(gè)中文漢字?#
可以,char占兩個(gè)字節(jié)
運(yùn)算符
邏輯與或與按位與或的區(qū)別:
邏輯與? false&&true? ? false? ? (有短路操作, 只能參與邏輯運(yùn)算,不可以參與位運(yùn)算)
按位與? false&true? ? false? (無(wú)短路操作, 可以參與位運(yùn)算)
++i 先加后賦值
i++? 先賦值后加
+=? ? x+=y;-----?? x=x+y;
邏輯運(yùn)算符:
&&? ? and
||? ? ? or
!? ? ? ? not
位運(yùn)算符:
&? ? and
|? ? 或
^? ? 異或
<<? 左移? ? 左移一位*2? 左移2位 *22? 左移n位 *2n
右移? ? 右移一位/2? 右移2位 /22? 右移n位 /2n
用最有效率的方法算出 2 乘以 8 等於幾?
2 << 3
因?yàn)閷⒁粋€(gè)數(shù)左移 n 位,就相當(dāng)于乘以了 2 的 n 次方,那么,一個(gè)數(shù)乘以 8 只要將其左移 3 位即可,
而位運(yùn)算 cpu 直接支持的,效率最高,所以,2 乘以 8 等於幾的最效率的方法是 2 << 3。
三元運(yùn)算符
表達(dá)式1?表達(dá)式2:表達(dá)式3
boolean b=(1>2)?true:false;System.out.println(b);------>falseinti=(2>3)?1:0;System.out.println(i);------>0
分支
if/switch
switch
每個(gè)分支判斷條件類型相同 switch支持的表達(dá)式類型為int、byte、char、short,String(JDK17+)
switch 語(yǔ)句能否作用在 byte 上----->能
能否作用在 long 上,? ? ? ? ----->不能
能否作用在 String 上? ? ? ? ----->jdk1.7后能
假設(shè)switch –a分支沒(méi)有break,那么他會(huì)繼續(xù)向下執(zhí)行,直到遇到break;
@Test
public void test2() {
char c='b';
switch (c) {
//a或者b進(jìn)行相同的處理
case 'a':
//如果選擇了a,那么執(zhí)行什么
case 'b':
//如果選擇了a,那么執(zhí)行什么
System.out.println("您選擇了a或者b");
break;
default://如果上述情況都不滿足,就默認(rèn)
break;
}
while與 dowhile區(qū)別
while直接判斷是否成立? ---->有可能一次都沒(méi)執(zhí)行
do----while 先執(zhí)行一次,然后再判斷條件是否成立? ---->至少執(zhí)行一次
for/foreach
for(inti=0;i<=100;i+=2){}for(循環(huán)到的對(duì)象類型? 引用名稱:循環(huán)誰(shuí)){? ? 引用名稱。。。。。。。 }
死循環(huán)
while(true){
}
for(;;)
循環(huán)中斷:
兩種:
中斷整個(gè)循環(huán):break;
中斷當(dāng)次循環(huán),進(jìn)行到下一次循環(huán)(跳過(guò)本次循環(huán),進(jìn)行下一次)continue;
break語(yǔ)句用于終止某個(gè)語(yǔ)句塊的執(zhí)行。用在循環(huán)語(yǔ)句體中,可以強(qiáng)行退出整個(gè)循環(huán)。
“break;”語(yǔ)句:可以出現(xiàn)在while、do…while、for、switch語(yǔ)句體中。
“break label”語(yǔ)句 :可以出現(xiàn)在任何語(yǔ)句體中。
循環(huán)的中斷
continue語(yǔ)句用在循環(huán)語(yǔ)句體中,用于終止某次循環(huán)過(guò)程,跳過(guò)本次循環(huán),開(kāi)始下一次循環(huán)過(guò)程
“continue;” 語(yǔ)句:只能出現(xiàn)在循環(huán)語(yǔ)句while、do…while、for中,不能用在switch語(yǔ)句中
Break label:為每層循環(huán)定義個(gè)別名,break可以指定跳出哪一外名字的循環(huán)。
練習(xí)題
1.一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地時(shí),共經(jīng)過(guò)多少米?第10次反彈多高?
@Testpublicvoidtest18(){/**
? ? ? * 1.一球從100米高度自由落下,每次落地后反跳回原高度的一半; 再落下
? ? ? * 求它在第10次落地時(shí),共經(jīng)過(guò)多少米?第10次反彈多高?
? ? ? */doubleh=100.00;//從第2次開(kāi)始算,跳的高度 100+50+25+12.5+...//h/1+h/2+h/4+h/8doublesum=100.00;for(inti=1;i<=9;i++){System.out.println("h="+h);sum+=h/2*2;h=h/2;}System.out.println("最終h="+h/2);System.out.println("sum="+sum);}
2.打印出所有的"水仙花數(shù)",所謂"水仙花數(shù)"是指一個(gè)三位數(shù),其各個(gè)位數(shù)字立方和等于該數(shù)本身。
個(gè)位數(shù)字的立方+十位數(shù)字的立方+百位數(shù)字的立方的和= 它本身
@Testpublicvoidtest1(){for(inti=100;i<=999;i++){intbai=i/100;intshi=i/10%10;intge=i%10;if(bai*bai*bai+shi*shi*shi+ge*ge*ge==i){System.out.println(i);}}}153370371407
3、int total = 0;
for ( int i = 0; i < 4; i++ ){
if ( i == 1) continue;
if ( i == 2) break;
total += i;
}
則執(zhí)行完該程序段后total的值為:(? )。
A、0? ? ? ? B、1? ? ? ? C、3? ? ? ? D、6
數(shù)組
第一種通過(guò)下標(biāo)放值//數(shù)組定義inta[]=newint[5];//數(shù)組第一個(gè)元素為1a[0]=1;//數(shù)組第2個(gè)元素為1a[1]=456;//數(shù)組第3個(gè)元素為1a[2]=123;a[3]=567;a[4]=2;System.out.println(a[1]);第二種 通過(guò)new+{}組合方式//數(shù)組初始化 方括號(hào)不寫數(shù)字,根據(jù)初始化個(gè)數(shù)自動(dòng)確定數(shù)組長(zhǎng)度數(shù)組類型? 數(shù)組名[]=new數(shù)據(jù)類型[]{元素1,元素2,…}inta[]=newint[]{1,456,123,567,2};第三種 直接初始化數(shù)組類型? 數(shù)組名[]={元素1,元素2,…}inta[]={1,456,123,567,2};@Testpublicvoidtest3(){//先建立一個(gè)一維數(shù)組,長(zhǎng)度為100,存放1-100之間的數(shù)//存放完之后再寫一段程序,把數(shù)組的每個(gè)元素打印出來(lái)inta[]=newint[100];inti=0;for(i=0;i<100;i++){//a[0]=1;a[1]=2? a[i]=i+1;}for(i=0;i<100;i++){System.out.println(a[i]);}}多維數(shù)組:定義數(shù)組類型? 數(shù)組名[][]數(shù)組類型[][]數(shù)組名數(shù)組類型[]數(shù)組名[]inta[][];int[][]b;int[]c[];多維數(shù)組的創(chuàng)建數(shù)組名=new數(shù)據(jù)元素類型[行數(shù)][列數(shù)]數(shù)組名=new數(shù)據(jù)元素類型[行數(shù)][];a=newint[3][4];a=newint[3][];a=newint[][4];//非法int[][]array={{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}};
方法定義與調(diào)用
[訪問(wèn)權(quán)限控制符][修飾符]返回值類型 方法名(參數(shù)類型 形參,參數(shù)類型 形參,…){方法體//方法做什么業(yè)務(wù)}
3、重載(編譯時(shí))和重寫(運(yùn)行時(shí))##
運(yùn)行時(shí)多態(tài)的三個(gè)必要條件:
1、必須有繼承或?qū)崿F(xiàn)(子類繼承父類? 實(shí)現(xiàn)類實(shí)現(xiàn)接口)
2、必須有重寫? (子類重寫父類的方法, 實(shí)現(xiàn)類覆蓋接口的方法)
3、父類的引用指向子類的對(duì)象? 也就是要有向上轉(zhuǎn)型
重寫:方法的定義完全相同,只是方法方法體不同
相同的方法名、相同的參數(shù)列表(參數(shù)類型,參數(shù)順序)、相同的返回值類型
一定發(fā)生在子類當(dāng)中,與父類同名,同參,同返回值類型的方法,子類覆蓋方法的訪問(wèn)權(quán)限要不小于父類中被覆蓋方法的訪問(wèn)權(quán)限
重載:同一個(gè)類中,相同的方法名、參數(shù)必須不同(參數(shù)類型不同或參數(shù)個(gè)數(shù)不同)、返回值可以相同也可以不同
請(qǐng)說(shuō)出作用域 public ,private ,protected ,以及不寫時(shí)的區(qū)別
作用域? ? ? ? 當(dāng)前類? 同一package? 子孫類? ? ? 其他 package
public? ? ? ? ? ? √? ? ? ? ? ? ? ? ? √? ? ? ? ? ? √? ? ? ? ? ? ? ? ? ? √
protected? ? ? √? ? ? ? ? ? ? ? ? √? ? ? ? ? ? √? ? ? ? ? ? ? ? ? ×
default? ? ? ? ? √? ? ? ? ? ? ? ? ? √? ? ? ? ? ? ? ×? ? ? ? ? ? ? ? ? ×
private? ? ? ? ? √
繼承和多態(tài)
類單繼承
接口可以多繼承
同一個(gè)類可以實(shí)現(xiàn)多個(gè)接口
構(gòu)造方法
構(gòu)造方法名與類名相同,無(wú)返回值類型,也不需要用void補(bǔ)位
如果你沒(méi)有寫有參構(gòu)造,系統(tǒng)為你生成無(wú)參構(gòu)造
如果你寫了有參構(gòu)造,不會(huì)再為你自動(dòng)生成無(wú)參構(gòu)造,這時(shí)候如果想用無(wú)參構(gòu)造,需要重寫
如何給新實(shí)例的對(duì)象賦值
1、屬性的set方法賦值
2、通過(guò)有參構(gòu)造方法賦值
變量類型
局部變量
方法級(jí)別的變量
局部變量只能在該方法里的有效
實(shí)例變量
成員變量 類級(jí)別
如果是公有的,其他類也能訪問(wèn)到
如果是私的的,當(dāng)前類的所有方法都可以訪問(wèn)他
靜態(tài)變量
第三種靜態(tài)變量
用static修飾的變量 static修飾的變量是可以共享的變量
書寫格式:訪問(wèn)權(quán)限 訪問(wèn)修飾? 變量類型 變量名
java 中實(shí)現(xiàn)多態(tài)的機(jī)制是什么?
父類的引用指向子類的實(shí)例(接口與實(shí)現(xiàn)類之間? 父類與子類之間)
抽象類與接口的區(qū)別
抽象類和接口都不能實(shí)例化
1)接口里的方法都是抽象的,而抽象類可以有非抽象方法。
2)類是單繼承,多實(shí)現(xiàn)
3)接口和接口之間可以多繼承(接口可以合并)
4)抽象類可以理解為抽象方法和非抽象方法的混合體,而接口中的方法全是抽象方法,是一套純粹的規(guī)范。
接口里的屬性必須是static final的,但抽象類無(wú)限制
*接口里不能有構(gòu)造方法,抽象類可以有構(gòu)造方法
static與final
用static修飾的內(nèi)容系統(tǒng)啟動(dòng)時(shí)就會(huì)加載進(jìn)來(lái),適合做一些初始化工作
Static 修飾的元素主要用來(lái)實(shí)現(xiàn)各個(gè)類之間共享,特別是屬性
修飾:屬性:方法? ? ? 代碼塊需要注意的問(wèn)題?? 只能修飾類成員,不能修飾局部變量(不能修飾方法體里的變量)。 ?? 用static修飾變量(屬性)?? 所有對(duì)象共享?? 也稱為類變量?? 用static修飾的成員變量,它們?cè)陬惐惠d入時(shí)創(chuàng)建,只要類存在,static變量就存在(參考java虛擬機(jī)視頻)?? 兩種方式訪問(wèn):?? 直接訪問(wèn):類名.屬性;?? 實(shí)例化后訪問(wèn):對(duì)象名.屬性?? 用static修飾方法?? 不需要實(shí)例化,可以直接訪問(wèn)?? 也稱為類方法?? 兩種方式訪問(wèn):?? 直接訪問(wèn):類名.方法名()?? 實(shí)例化后訪問(wèn):對(duì)象名.方法名()?? 注意事項(xiàng)?? 靜態(tài)方法里只能直接訪問(wèn)靜態(tài)成員,而不能直接訪問(wèn)類中的非靜態(tài)成員?? 靜態(tài)方法中不能使用this、super關(guān)鍵字?? 靜態(tài)方法不能被非靜態(tài)方法覆蓋,靜態(tài)方法不能修飾構(gòu)造器?? 靜態(tài)代碼塊?? 一個(gè)類中由static關(guān)鍵字修飾的,不包含在任何方法體中的代碼塊?? 當(dāng)類被載入時(shí),靜態(tài)代碼塊被執(zhí)行,且只被執(zhí)行一次?? 靜態(tài)塊經(jīng)常用來(lái)進(jìn)行類屬性的初始化
Final(終極的不可修改的)
可以修飾的內(nèi)容:類 變量(屬性) 方法?? 類:不能被繼承(沒(méi)有下一代),可被實(shí)例化?? 變量:常量,不能被重新賦值? ? ?? 方法:不能被重寫。
單例
?? 單例模式實(shí)現(xiàn):–? 擁有一個(gè)私有構(gòu)造方法 –? 提供一個(gè)自身靜態(tài)私有的成員變量–? 提供一個(gè)公有的靜態(tài)的方法(返回實(shí)例化后的對(duì)象)publicclassSingleton{/*? 單例模式實(shí)現(xiàn):
? ? –? 擁有一個(gè)私有構(gòu)造方法
? ? –? 提供一個(gè)類型為自身的? 靜態(tài)的私有的成員變量(屬性)
? ? –? 提供一個(gè)公有的靜態(tài)的方法(返回實(shí)例化后的對(duì)象)*///step 2 提供一個(gè)類型為自身的? 靜態(tài)的私有的成員變量privatestaticfinalSingletoninstance=newSingleton();//step 1擁有一個(gè)私有構(gòu)造方法 privateSingleton(){}//step 3提供一個(gè)公有的靜態(tài)的方法publicstaticSingletongetSingleton(){returninstance;}publicstaticvoidmain(String[]args){Singletons1=Singleton.getSingleton();Singletons2=Singleton.getSingleton();System.out.println(s1);System.out.println(s2);}}
final, finally, finalize 的區(qū)別
final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
finally 是異常處理語(yǔ)句結(jié)構(gòu)的一部分,表示總是執(zhí)行。
finalize 是 Object 類的一個(gè)方法,在垃圾收集器執(zhí)行的時(shí)候會(huì)調(diào)用被回收對(duì)象的此方法,
可以覆蓋此方法提供垃圾收集時(shí)的其他資源回收,例如關(guān)閉文件等。JVM 不保證此方
法總被調(diào)用
String StringBuffer StringBuilder區(qū)別
String是不可變字符串常量,對(duì)它的改動(dòng)都創(chuàng)建了新的對(duì)象;
StringBuffer與StringBuilder代表一組可以改變的字符串
StringBuffer是線程安全的
StringBuilder是線程不安全的,效率高于StringBuffer,單線程操作可以使用StringBuilder
String與 Math是否可被繼承,為什么
不可以,因?yàn)楸籪inal修飾
計(jì)算子串在父串中出現(xiàn)的次數(shù)
publicvoidtest3(){System.out.println("請(qǐng)輸入字符串1");Strings1=newScanner(System.in).next();System.out.println("請(qǐng)輸入字符串2");Strings2=newScanner(System.in).next();//引進(jìn)計(jì)數(shù)器用于記錄次數(shù)intcount=0;while(s1.indexOf(s2)!=-1){System.out.println("存在");count++;s1=s1.substring(s1.indexOf(s2)+s2.length());System.out.println(s1);}System.out.println(count);//indexOf求子串在整串的次數(shù)//鍵盤輸入//首先判斷是否存在子串a(chǎn)bc在父串中存在,如果存再計(jì)算次數(shù)}
List Set map
數(shù)組是定長(zhǎng)的? ? 可以存放基本類型和引用類型 訪問(wèn)較快 java.lang包中
集合是可變長(zhǎng)的? 集合只能存放引用類型? ? ? ? ? ? ? java.util包內(nèi)
Set與list map
Set - 無(wú)序的集合;不允許重復(fù)(可用于去重)
List有序的集合;允許重復(fù)
Map key-value key-唯一標(biāo)識(shí) value實(shí)際存放的數(shù)據(jù) 適合根據(jù)指定唯一標(biāo)識(shí)來(lái)查找
set的類型
?? Set接口的實(shí)現(xiàn)類
HashSet — HashSet的特性在于其內(nèi)部對(duì)象的散列存取,即采用哈希技術(shù)
TreeSet — TreeSet存入的順序跟存儲(chǔ)的順序不同,但是存儲(chǔ)是按照排序存儲(chǔ)的
ArrayList與linkedlist區(qū)別
ArrayList--內(nèi)部基于數(shù)組實(shí)現(xiàn),隨機(jī)查詢速度快,插入刪除速度慢;
(建議用普通for循環(huán)讀取)
LinkedList--內(nèi)部基于鏈表實(shí)現(xiàn),隨機(jī)查詢速度慢,插入刪除速度快
(用迭代器讀取會(huì)比較快)
Map接口有兩個(gè)實(shí)現(xiàn):
HashMap:按hashcode排序 基于數(shù)組的
TreeMap:按自然順序? 基于紅黑二叉樹的
LinkedHashMap;按存入的順序? 基于鏈表的
冒泡算法(略)
撲克牌
packagecom.neuedu.test;publicinterfaceCard{// 匹配情況String[]cases={"花色點(diǎn)數(shù)都相同","花色相同","點(diǎn)數(shù)相同","不相同"};// 花色String[]suits={"紅桃","黑桃","梅花","方塊"};// 牌面值String[]faces={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};// 判斷兩張牌的牌型StringshowPokerHands(Cardcard);publicStringgetSuit();publicStringgetFace();}packagecom.neuedu.test;publicclassSuitExceptionextendsException{publicSuitException(Stringmessage){super(message);}}packagecom.neuedu.test;publicclassFaceExceptionextendsException{publicFaceException(Stringmessage){super(message);}}packagecom.neuedu.test;publicclassCardImplimplementsCard{privateStringface;privateStringsuit;publicCardImpl(Stringface,Stringsuit)throwsSuitException,FaceException{// 判斷花色是否在suits范圍內(nèi)。如果花色不對(duì)拋SuitExceptionbooleansuitFlag=false;// 不在花色范圍內(nèi)for(Stringmysuit:suits){if(mysuit.equals(suit)){suitFlag=true;// 花色合法}}if(suitFlag==false){thrownewSuitException("花色不合法");}booleanfaceFlag=false;// 不在花色范圍內(nèi)for(Stringmyface:faces){if(myface.equals(face)){faceFlag=true;// 花色合法}}if(faceFlag==false){thrownewFaceException("花色不合法");}// 判斷花色是否在faces范圍內(nèi)。如果牌面不對(duì)拋FaceExceptionthis.face=face;this.suit=suit;}@OverridepublicStringshowPokerHands(Cardcard){// 判斷花色和點(diǎn)數(shù)都相同if(face.equals(card.getFace())&&suit.equals(card.getSuit())){returncases[0];}elseif(face.equals(card.getFace())){returncases[2];}elseif(suit.equals(card.getSuit())){returncases[1];}else{returncases[3];}}@OverridepublicStringgetSuit(){// TODO Auto-generated method stubreturnnull;}@OverridepublicStringgetFace(){// TODO Auto-generated method stubreturnnull;}publicstaticvoidmain(String[]args)throwsSuitException,FaceException{// 創(chuàng)建一張紅桃3,一張黑桃6,調(diào)用方法判斷兩張牌的牌型。CardImplcard1=newCardImpl("3","紅桃");CardImplcard2=newCardImpl("6","黑桃");Stringresult=card1.showPokerHands(card2);System.out.println(result);}}
轉(zhuǎn)至:↓↓↓
鏈接:http://www.lxweimin.com/p/ff7dc46dcfe9
來(lái)源:簡(jiǎn)書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。