記錄

為了能夠了解程序員大師們的解題思路熟菲,以便對(duì)癥下藥的解決問題,開始學(xué)習(xí)java知識(shí),目標(biāo)是能讀懂代碼邏輯铣揉。這里記錄下近期的學(xué)習(xí)知識(shí)。

  • 源文件(比如party.java)經(jīng)過編譯(自動(dòng))后生成.class文件(paryt.class)餐曹,java虛擬機(jī)運(yùn)行.class文件輸出結(jié)果
  • 聲明和賦值
int x = 3; //將數(shù)字3賦值給x逛拱,x被聲明為int類型,注意以英文分號(hào)結(jié)束語句台猴。
  • 注釋朽合,不被代碼執(zhí)行的部分。
//雙斜杠是注釋
/*
 這也是注釋
*/
  • 類-方法饱狂;方法是能夠獨(dú)立實(shí)現(xiàn)功能的程序片段曹步;方法有靜態(tài)方法(有關(guān)鍵字static,可以直接調(diào)用)和實(shí)例方法(沒有關(guān)鍵字static休讳,必須先實(shí)例化(new)才能調(diào)用)
public class Dog{//public:公開給其他類讲婚,class類聲明,Dog是類名稱(自瓤∪帷)筹麸,必須有花括號(hào)活合。
    int size;
    String bread;
    String name;
    void bark(){//bark()是方法,必須有小括號(hào)物赶,方法必須在類里面白指。
    //在方法的花括號(hào)中編寫方法應(yīng)該執(zhí)行的指令
        if  (size>60){//if判斷,當(dāng)小括號(hào)內(nèi)為true時(shí)執(zhí)行大括號(hào)內(nèi)語句
            System.out.println("woof!woof!")
        } else if (size >14){//注意判斷條件酵紫,逐級(jí)降低
            System.out.println("Ruff!Ruff!")
        } else {//上面條件都不滿足時(shí)告嘲,執(zhí)行本代碼塊內(nèi)語句
            System.out.println("Yip!Yip!")
        }//結(jié)束if判斷
    }//方法結(jié)束
}//類結(jié)束

編寫測(cè)試用的類
class DogTestDrive{
   public static void main (String[] args){
        Dog d = new Dog(); //Dog d 聲明一個(gè)引用變量,new Dog() 創(chuàng)建一個(gè)對(duì)象奖地,= 將新的Dog()對(duì)象賦值給d這個(gè)引用變量橄唬。
        d.size = 40; //賦值(圓點(diǎn)運(yùn)算符)
        d.bark(); //調(diào)用方法
    }
}
  • System.out.print,當(dāng)前行輸出鹉动;System.out.println轧坎,新起一行輸出
  • 數(shù)組的聲明、創(chuàng)建泽示、調(diào)用和元素統(tǒng)計(jì)
String [] pets = {"dog","cat","rabbit"} //每個(gè)元素都要被引號(hào)包裹缸血,元素間用逗號(hào)分隔
//java數(shù)組坐標(biāo)是從0開始的,比如我要取第一個(gè)元素
String s = pet[0] // "dog"
//統(tǒng)計(jì)數(shù)組內(nèi)元素個(gè)數(shù)
int x = pet.length // 3
  • 變量的聲明必須有類型和名稱
  • 方法可以有多個(gè)參數(shù)械筛,在聲明的時(shí)候用逗號(hào)分開捎泻,傳入時(shí)也逗號(hào)分開
void go(){
    TestStuff t = new TestStuff();
    t.takeTwo(12,34);
}
void takeTwo(int x, int y){//聲明一個(gè)擁有兩個(gè)int參數(shù)的方法,方法名分別是x埋哟,y笆豁。12傳給了x,34傳給了y赤赊,12/34是實(shí)參闯狱,x/y是形參,按順序賦值抛计。注意哄孤,類型相同!
    int z = x+y;
    System.out.println(z);
}
  • 實(shí)例變量聲明在類內(nèi)吹截,有默認(rèn)值瘦陈,可不用初始化
  • 局部變量聲明在方法中,沒有默認(rèn)值波俄,在使用前必須初始化
  • 使用==比較兩個(gè)primitive主數(shù)據(jù)類型晨逝,或者判斷兩個(gè)引用是否引用同一個(gè)對(duì)象
  • 使用equals() 來判斷兩個(gè)對(duì)象是否在意義上相等
  • 實(shí)力變量要標(biāo)記為private,并通過getter與setter來存取懦铺,以確保實(shí)例變量值在合法范圍內(nèi)捉貌。
  • for循環(huán)(加強(qiáng)版)
String [] s = {"a","b","c"}
for(String i:s){//注意變量類型一致String,i迭代尋找s里的每一個(gè)值,':'相當(dāng)于in
    System.out.println(i)
}
  • for循環(huán)(基礎(chǔ)版)
for(int i=0;i<100;i++){//int i=0:初始化昏翰;i<100:判斷條件苍匆;i++:后遞增運(yùn)算符
    System.out.println(i)
}
  • 產(chǎn)生隨機(jī)數(shù)
//randomNum:聲明的一個(gè)保存隨機(jī)數(shù)的變量
//(int):類型轉(zhuǎn)換,把Math.random()*5的結(jié)果(double類型)轉(zhuǎn)換成int類型
//Math:Java內(nèi)建類棚菊,random()是其中一個(gè)方法,會(huì)產(chǎn)生一個(gè)介于0-1的小數(shù)
int randomNum = (int)(Math.random()*5)
  • ArrayList類叔汁,讀取快统求,是個(gè)對(duì)象,要用.運(yùn)算符調(diào)用他的方法
    1据块,創(chuàng)建
    ArrayList<Egg> myList = new ArrayList<Egg>();
    //<>限制類型另假,也就是這個(gè)ArrayList只接受Egg的對(duì)象
    2己莺,加入元素
    Egg s= new Egg();
    myList.add(s);
    3,查詢大小
    int theSize = myList.size();
    4,查詢特定元素
    boolean isIn = myList.contains(s);
    5,判斷集合是否為空
    boolean empty = myList.isEmpty()案怯;
    6,刪除元素
    myList.remove(s);
  • LinkedList 插入刪除快,可以頭尾添加
LinkedList<String> ln = new LinkedList<String>();
ln.add("a");
ln.addFirst("a0");//頭添加
ln.addLast("b");//尾添加
String f = ln.getFirst();//取頭數(shù)據(jù)
String l = ln.getLast();//取尾數(shù)據(jù)
  • List接口允許重復(fù)昆著,Set接口不可重復(fù),HashSet查詢快,TreeSet排序;
HashSet<String> hs = new HashSet<String>();
hs.add("a");
hs.add("b");
hs.add("a");
System.out.println(hs);//a,b

TreeSet<String> ts = new TreeSet<String>();
ts.add("c");
ts.add("a");
ts.add("b");
System.out.println(ts);//a,b,c
  • Map接口是一組成對(duì)的對(duì)象key-value驰徊,key不可重復(fù)。HashMap是無序的,TreeMap能夠根據(jù)key自動(dòng)排序捐韩。

  • “與”和“或”運(yùn)算符(&&,||)鹃锈,不等于荤胁!=

  • 引入,使用import屎债,比如引入ArrayList: import java.util.ArrayList; 放在代碼最頂部

  • 繼承:extend仅政,減少子類中代碼重復(fù),子類可以直接使用父類中的實(shí)力變量和方法盆驹。構(gòu)造方法(方法名與類名相同圆丹,沒有返回值)不能被繼承

//語法
class 子類名 extends 父類名 {}
  • 覆蓋:由子類重新定義繼承下來的方法,以改變或者延伸方法
  • 多態(tài)下躯喇,引用和對(duì)象可以是不同的類型辫封,比如Animal myDog = new Dog();引用類型可以是實(shí)際對(duì)象類型的父類硝枉。
  • 參數(shù)和返回類型也可以多態(tài)(注意PetOwner里調(diào)用giveShot方法傳參d,h都是Animal a的子類)
class Vet{
    public void giveShot(Animal a){
        //a參數(shù)可以用任何Animal的類型對(duì)象來當(dāng)傳入
        //當(dāng)執(zhí)行到makeNoise()的時(shí)候倦微,不管它引用的對(duì)象是什么妻味,該對(duì)象都會(huì)執(zhí)行makeNoise()
        a.makeNoise();
    }
}
class PetOwner{
    public void start(){
        Vet v = new Vet();
        Dog d = new Dog();
        Hippo h = new Hippo();//Animal的子類即可
        v.giveShot(d);//會(huì)執(zhí)行Dog的makeNoise();
        v.giveShot(h);//會(huì)執(zhí)行Hippo的makeNoise();
}
  • 方法的重載(overload),兩個(gè)方法的名稱相同欣福,但是參數(shù)類型责球、個(gè)數(shù)不同。
public class Overloads{
    String uniqueID;
    public int addNums(int a ,int b){
        return a+b;
    }
    public double addNums(double a ,double b){
        //這里的方法名稱相同劣欢,但是方法的返回值類型棕诵,參數(shù)類型不同
        return a+b;
    }
}
  • 抽象類(不能被實(shí)例化(new)的類)關(guān)鍵詞“abstract”,抽象類的目的就是被繼承凿将,除此之外沒別的意義,比如Animal
  • 不是抽象的類就是具體類价脾,比如Dog牧抵,Cat
  • 抽象的方法,沒有實(shí)體侨把。如果聲明出一個(gè)抽象方法犀变,那么就一定要放在抽象類里面,不能非抽象類內(nèi)聲明抽象方法秋柄。好處就是--多態(tài)获枝,所有子類都能用到這些抽象方法
public abstract void eat();//分號(hào)結(jié)尾沒有方法體{}
  • this關(guān)鍵字,表示對(duì)當(dāng)前對(duì)象的調(diào)用
  • final關(guān)鍵字骇笔,在類前面:阻止繼承省店;在方法前面:阻止方法覆蓋;在屬性前面:常量
  • 接口
//語法
[public][abstract] interface interfaceName{}
  • 實(shí)現(xiàn)接口笨触,使用關(guān)鍵字implement懦傍,一個(gè)類必須實(shí)現(xiàn)接口中的所有方法,一個(gè)類可以實(shí)現(xiàn)多個(gè)接口芦劣,用逗號(hào)隔開粗俱。
  • 內(nèi)部類的引用類型轉(zhuǎn)換:向上轉(zhuǎn)換Dog——>Animal;向下轉(zhuǎn)換Animal——>Dog
  • 里氏代換原則:父類出現(xiàn)的地方虚吟,子類一定可以出現(xiàn)
public class Test{
    public static void main(String [] args){
        Pet cat = new Cat();//向上轉(zhuǎn)換
        Pet dog = new Dog();
        Person per = new Person();//new一個(gè)對(duì)象
        per.care(cat);//調(diào)用care方法
        per.care(dog);//里氏代換寸认,帶還了父類里的Pet
    }
}
interface Pet{//定義接口
    public void run();
}
class Person{
    public void care(Pet p){
        p.run();
    }
}
class Cat implements Pet{//實(shí)現(xiàn)接口
    public void run(){
        System.out.println("cat run...")
    }
}
class Dog implements Pet{
    public void run(){
        System.out.println("dog run...")
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市串慰,隨后出現(xiàn)的幾起案子偏塞,更是在濱河造成了極大的恐慌,老刑警劉巖模庐,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烛愧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)怜姿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門慎冤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沧卢,你說我怎么就攤上這事蚁堤。” “怎么了但狭?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵披诗,是天一觀的道長。 經(jīng)常有香客問我立磁,道長呈队,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任唱歧,我火速辦了婚禮宪摧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘颅崩。我一直安慰自己几于,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布沿后。 她就那樣靜靜地躺著沿彭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尖滚。 梳的紋絲不亂的頭發(fā)上喉刘,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音熔掺,去河邊找鬼饱搏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛置逻,可吹牛的內(nèi)容都是我干的推沸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼券坞,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼鬓催!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恨锚,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤宇驾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后猴伶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體课舍,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡塌西,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了筝尾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捡需。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖筹淫,靈堂內(nèi)的尸體忽然破棺而出站辉,到底是詐尸還是另有隱情,我是刑警寧澤损姜,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布饰剥,位于F島的核電站,受9級(jí)特大地震影響摧阅,放射性物質(zhì)發(fā)生泄漏汰蓉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一棒卷、第九天 我趴在偏房一處隱蔽的房頂上張望古沥。 院中可真熱鬧,春花似錦娇跟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至龄章,卻和暖如春吃谣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背做裙。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國打工岗憋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锚贱。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓仔戈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拧廊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子监徘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355