注意點

1顿乒、public class 和 class的區(qū)別

  • 一個java源文件當(dāng)中可以定義多個class
  • 一個java源文件當(dāng)中public的class不是必須的
  • 一個class會定義生成一個xxx.class字節(jié)碼文件
  • 一個java源文件當(dāng)中public class只能有一個茂卦,并且該類名稱必須和java源文件名稱一致酸纲。
  • 每一個class當(dāng)中都可以編寫main方法,都可以設(shè)定程序的入口漫贞,想執(zhí)行X.class當(dāng)中的main方法:java X

2甸箱、java內(nèi)存管理

  • 方法區(qū)內(nèi)存:在類加載的時候,class字節(jié)碼代碼片段被加載到該內(nèi)存空間當(dāng)中
  • 棧內(nèi)存(局部變量):方法代碼片段執(zhí)行的時候迅脐,會給該方法分配內(nèi)存空間芍殖,在棧內(nèi)存中壓棧
  • 堆內(nèi)存:new的對象在堆內(nèi)存中存儲


    image.png

3、形參引用傳值

java形參接收的都是實參中保存的值谴蔑,
只不過基礎(chǔ)類型例如int豌骏、char等變量都是直接保存的值本身龟梦,而引用變量保存的是對象的內(nèi)存地址。

  • 傳遞基本數(shù)據(jù)類型:
void add(x){
  x++;
  System.out.println(x); //11
}

int x = 10;
add(x); 
System.out.println(x); //10
  • 傳遞引用:
void add(User u){
  u.age++;
  System.out.println(u.age); //11
}

User u = new User(10);
add(u); //這里的u保存的是user對象的內(nèi)存地址窃躲,原封不動的將地址傳給add中的u
System.out.println(u.age); //11

4计贰、this特殊用法

  • this在static中不能使用
  • this可以簡化無參構(gòu)造函數(shù)的默認賦值(這種語法只能出現(xiàn)在構(gòu)造函數(shù)第一行)
//帶參構(gòu)造函數(shù)
public Date(int year, int month, int day){
  this.year = year;
  this.month = month;
  this.day = day;
}

public Date(){
  /*this.year = 1997;
  this.month = 1;
  this.day = 1;*/
  
  //通過這種方式不會創(chuàng)建新的對象,同時又可以調(diào)用其他的構(gòu)造函數(shù)
  this(1970,1,1);
}

5蒂窒、靜態(tài)代碼塊

  • 語法格式:
static{
  java語句;
}
  • 靜態(tài)代碼塊在類加載時執(zhí)行躁倒,且只執(zhí)行一次
  • 靜態(tài)代碼塊在一個類中可以編寫多個,且遵循自上而下的順序依次執(zhí)行(在main方法之前執(zhí)行)
  • 靜態(tài)代碼塊的作用:
    如果需要在類加載時刻執(zhí)行一段特殊的代碼(例如日志記錄)洒琢,可以使用靜態(tài)代碼塊

6秧秉、繼承

  • 三大特征:封裝、繼承衰抑、多態(tài)
  • 繼承的基本作用:代碼復(fù)用象迎,有了繼承才有了“方法的覆蓋”和“多態(tài)機制”
  • java中的類與類之間只支持單繼承
  • java中子類繼承父類的哪些數(shù)據(jù)?
    私有的不繼承呛踊、構(gòu)造方法不繼承砾淌,其他數(shù)據(jù)都可以被繼承
  • java中的類默認繼承JavaSE庫中的Object類

7、方法覆蓋跟重載

  • 重載:相同函數(shù)名恋技,不同參數(shù)列表拇舀,不關(guān)心返回值
  • 覆蓋:子類中重新定義的函數(shù)逻族,其函數(shù)名蜻底、參數(shù)列表、返回類型與父類完全相同
  • 覆蓋訪問權(quán)限只能更高不能更低
  • 覆蓋拋出異常只能更少不能更多
  • 私有方法聘鳞、構(gòu)造方法薄辅、靜態(tài)方法不能覆蓋

8、多態(tài)

①基礎(chǔ)語法

Animal a = new Dog(); //定義一個指向Dog對象的Animal類型的引用a抠璃,最后a調(diào)用的方法都是Dog類的方法站楚,因為對象實體是Dog,Animal只是a的引用類型

②向上搏嗡、向下轉(zhuǎn)型:

  • 向上轉(zhuǎn)型:Animal a = new Dog();
  • 向下轉(zhuǎn)型(強制類型轉(zhuǎn)換):當(dāng)調(diào)用的方法或者訪問的屬性是子類中特有的窿春,在父類中不存在必須要向下轉(zhuǎn)型。Animal a = new Dog(); -----> Dog b = (Dog) a;

③避免強制類型轉(zhuǎn)換(向下轉(zhuǎn)型)異常:(ClassCastException)
instanceof運算符

  • 語法格式:引用 instanceof 類名
  • 運行結(jié)果:
    假設(shè):a instanceof Animal
    true表示:a引用指向的對象是一個Animal類型

④實際使用示例:

//-----------------父類------------------
public class Animal {
    void eat(){
        System.out.println("我在進食");
    }
}
//-----------------子類------------------
public class Bird extends Animal{
    void eat(){
        System.out.println("我在吃蟲子");
    }
}
public class Dog extends Animal{
    void eat(){
        System.out.println("我在吃骨頭");
    }
}
public class Cat extends Animal {
    void eat(){
        System.out.println("我在吃魚");
    }
}
//-----------------主人類:要調(diào)用寵物的eat方法-----------------
public class Master {
    //傳入Animal父類采盒,而非具體的子類避免高耦合
    public void feed(Animal a) {
        a.eat();
    }
}
//-----------------main方法所在的類-----------------
public class Test {
    public static void main(String[] args) {
        Animal a = new Dog();
        Animal b = new Cat();
        Animal c = new Bird();
        Master m = new Master();
        m.feed(a);
        m.feed(b);
        m.feed(c);
    }
}

9旧乞、final關(guān)鍵字

①final修飾的類無法被繼承
②final修飾的方法無法被覆蓋
③final修飾的變量一旦賦值之后不可重新賦值【不可二次賦值】
④final修飾的實例變量必須手動賦值,不能采用系統(tǒng)默認值
⑤final修飾的引用一旦指向某個對象之后磅氨,不能再指向其他對象尺栖,那么被指向的對象無法被垃圾回收器回收【但是對象內(nèi)部的內(nèi)存可以被修改】
⑥java常量:public static final double PI = 3.1415926

10、package烦租、import

①包的作用:方便程序管理延赌,易查找除盏、易維護
②包的命名規(guī)范:公司域名倒序 + 項目名 + 模塊名 + 功能名 (公司域名具有全球唯一性,不容易重名)
③import語法:
import 類名; 例如:import java.util.Date;
import 包名.*; 例如:import java.util.*;
④java.lang.*; 不需要手動引入挫以,系統(tǒng)自動引入

11者蠕、訪問控制權(quán)限修飾符

①權(quán)限
public 表示公開的,任何位置都能訪問
protected 同包掐松、子類中可以訪問
缺省 同包中可以訪問
private 表示私有的蠢棱,只能在本類中訪問
②修飾符的范圍:private < 缺省 < protected < public
③只希望子類使用的時候使用protected

12、super

①super跟this很類似甩栈,this是指本類泻仙,super是指父類
②this()調(diào)用的是本類的構(gòu)造函數(shù),super()調(diào)用的是父類的構(gòu)造函數(shù)
③super量没、this都不能在靜態(tài)方法中使用玉转,都可以出現(xiàn)在實例方法和構(gòu)造方法中
④當(dāng)一個構(gòu)造方法第一行:
既沒有this()又沒有super()時,默認會有一個super();
表示通過當(dāng)前子類的構(gòu)造方法調(diào)用父類的無參數(shù)構(gòu)造方法殴蹄,所以必須保證父類的無參數(shù)構(gòu)造方法是存在的究抓。
⑤子類構(gòu)造方法執(zhí)行時必然調(diào)用父類的構(gòu)造方法
⑥不管new什么對象,Object類的無參構(gòu)造函數(shù)一定會執(zhí)行(且Object類的無參構(gòu)造函數(shù)一定是處于棧頂)
⑦super不能省略的情況:
如果父類和子類有同名屬性袭灯,并且想通過子類訪問父類的該屬性刺下,則不能省略
⑧super不是引用,不保存內(nèi)存地址稽荧,也不指向任何對象

13橘茉、抽象類

①類與類之間具有共同特征,將這些共同特征提取出來姨丈,形成的就是抽象類畅卓;
②抽象類無法創(chuàng)建對象(無法實例化),抽象類是用來被繼承的蟋恬;
③抽象類的子類也可以是抽象類翁潘;
④抽象類屬于引用數(shù)據(jù)類型;
⑤抽象類有構(gòu)造方法歼争,供子類使用拜马;
⑥抽象方法表示沒有實現(xiàn)的方法,沒有方法體的方法沐绒;
例:public abstract void doSome();
⑦抽象類中不一定有抽象方法俩莽,但是抽象方法一定出現(xiàn)在抽象類中;
非抽象類繼承抽象類必須實現(xiàn)其抽象方法洒沦;
⑨沒有方法體的方法不一定都是抽象方法豹绪,例:
public native int hashCode(); native表示調(diào)用JVM本地程序。

14、接口 interface

①接口是完全抽象的瞒津,是一種特殊的抽象類蝉衣,所以也無法創(chuàng)建對象;
②接口支持多繼承:interface C extends A, B巷蚪;
接口中只包含兩部分內(nèi)容:常量+抽象方法病毡;
④接口中所有元素都是public修飾的;
⑤接口中的抽象方法:public abstract 修飾符可以省略屁柏;
⑥接口中的常量:public static final 可以省略啦膜;
⑦繼承extends、實現(xiàn)implements淌喻;
⑧一個類可以同時實現(xiàn)多個接口: class Test implements A, B僧家;
⑨繼承和實現(xiàn)都存在時,extends在前裸删,implements在后;
⑩抽象類根接口的區(qū)別:

  • 抽象類是半抽象的八拱,接口是完全抽象的
  • 抽象類有構(gòu)造方法,接口沒有
  • 接口和接口之間支持多繼承涯塔,類和類之間只能單繼承
  • 接口中只允許出現(xiàn)常量和抽象方法

15肌稻、經(jīng)典異常

空指針異常:NullPointerException
類型轉(zhuǎn)換異常:ClassCastException
數(shù)組下標(biāo)越界異常:ArrayIndexOutOfBoundsException
數(shù)字格式化異常:NumberFormatException

16、可變長度參數(shù)

  • 可變長度參數(shù)要求的參數(shù)個數(shù):0~N個匕荸;
  • 可變長度參數(shù)必須在參數(shù)列表中的最后一個位置上爹谭,而且可變長度參數(shù)只能有一個;
  • 可變長度參數(shù)在接受的時候可以當(dāng)做數(shù)組處理
  • 實參傳入的時候可以直接傳數(shù)組
public static void test1(int... args){
    System.out.println(args.length);
    for(int i : args){
        System.out.println(i);
    }
}
    
public static void test2(int i, String... strs){
    for(String s : strs){
        System.out.println(s);
    }
}

test1(1,2,3);
test2(1, new String[]{"wo", "shi"});
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末榛搔,一起剝皮案震驚了整個濱河市诺凡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌药薯,老刑警劉巖绑洛,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異童本,居然都是意外死亡,警方通過查閱死者的電腦和手機脸候,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門穷娱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人运沦,你說我怎么就攤上這事泵额。” “怎么了携添?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵嫁盲,是天一觀的道長。 經(jīng)常有香客問我烈掠,道長羞秤,這世上最難降的妖魔是什么缸托? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮瘾蛋,結(jié)果婚禮上俐镐,老公的妹妹穿的比我還像新娘。我一直安慰自己哺哼,他們只是感情好佩抹,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著取董,像睡著了一般棍苹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上茵汰,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天廊勃,我揣著相機與錄音,去河邊找鬼经窖。 笑死坡垫,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的画侣。 我是一名探鬼主播冰悠,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼配乱!你這毒婦竟也來了溉卓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤搬泥,失蹤者是張志新(化名)和其女友劉穎桑寨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忿檩,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡尉尾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了燥透。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沙咏。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖班套,靈堂內(nèi)的尸體忽然破棺而出肢藐,到底是詐尸還是另有隱情,我是刑警寧澤吱韭,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布吆豹,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏痘煤。R本人自食惡果不足惜凑阶,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望速勇。 院中可真熱鬧晌砾,春花似錦、人聲如沸烦磁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽都伪。三九已至呕乎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間陨晶,已是汗流浹背猬仁。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留先誉,地道東北人湿刽。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像褐耳,于是被迫代替她去往敵國和親诈闺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 1.lambda的歷史:波長單位,帶有參數(shù)變量的表達式稱為lambda表達式 2.lambda表達式的基本語法:參...
    遞歸宇宙閱讀 949評論 0 0
  • 1铃芦、接口可以多實現(xiàn):一個實現(xiàn)類可以同時實現(xiàn)多個接口 那就是這個實現(xiàn)類要實現(xiàn)所有的接口中的所有抽象的方法 2雅镊、接口可...
    硪以忘記伱的一切閱讀 205評論 0 0
  • 不使用IDE怎么編譯和指定classpath private default protected public 注...
    luckee閱讀 367評論 0 0
  • 1. ??=和??的用法 2. 字符串三個引號 字符串使用單引號和雙引號都可以,但是三引號是代表什么刃滓?三引號代表多...
    Sweet丶閱讀 420評論 0 0
  • 數(shù)組類型聲明的兩種方式 ts中的非空斷言操作符 null 和 undefined是其他類型的子類型仁烹,可以賦值給其他...
    Mstian閱讀 795評論 0 3