面向?qū)ο?/h1>
  • 面向?qū)ο蠛兔嫦蜻^程區(qū)別:

    • 從語言出發(fā):
      • C:完全面向過程
      • C++:一半面向過程,一半面向?qū)ο?/li>
      • Java:完全面向?qū)ο?/li>
    • 開發(fā)方式:
      • 面向過程
        • 注重實現(xiàn)功能步驟戚揭,注重實現(xiàn)功能的因果關(guān)系聘殖。
        • 第一步干什么芹关,第二步干什么续挟。
        • 缺點:耦合度高,擴展能力差侥衬。
        • 優(yōu)點:對于小型項目诗祸,效率高
        • 采用面向過程開發(fā)一臺計算機:一體機
        • 采用面向?qū)ο箝_發(fā)一臺計算機:組合機
      • 面向?qū)ο?
        • 將現(xiàn)實世界分隔成不同的單元跑芳,然后每一個單元實現(xiàn)成對象,然后給一個環(huán)境驅(qū)動一下直颅,讓各個對象之間寫作起來形成博个。(更符合人類思維方式)
        • 優(yōu)點:耦合度低,擴展性高
    • 面向過程主要關(guān)注的是:實現(xiàn)步驟以及整個過程
    • 面向?qū)ο笾饕P(guān)注的是:對象A功偿,對象B盆佣,對象C。械荷。共耍。然后進行組合。
    • OOA:面向?qū)ο蠓治?/li>
    • OOD:面向?qū)ο笤O(shè)計
    • OOP:面向?qū)ο缶幊?/li>
    • 實現(xiàn)軟件過程:分析(A)->設(shè)計(D)->編程(P)吨瞎。
    • leader 領(lǐng)導(dǎo)痹兜、組長
    • team 團隊
    • PM 項目經(jīng)理 Project Manager
    • 面向?qū)ο笕筇卣鳎悍庋b、繼承颤诀、多態(tài)
  • 類和對象

    • 主要一詞:對象

    • 類:是一個抽象的概念薪鹦,一個模板汰蓉,是思考、總結(jié)麻献、抽象的一個結(jié)果雅潭。本質(zhì)是現(xiàn)實世界中的某些食物的共同特征灯节,提取出來的一個概念猾警,一個模板妨蛹。

    • 對象(實例):實際存在的實體。

    • 要想得到對象剧包,必須先定義類恐锦,對象是通過類這個模板創(chuàng)造出來的。

    • 類是一個模板:類中描述所以對象的共同特征信息疆液。

    • 對象是通過類創(chuàng)建出的個體。

    • 通過類創(chuàng)建對象的過程叫實例化陕贮。

    • 抽象:多個對象具有共同特征堕油,進行思考總結(jié)抽取特征的過程。

    • 類:包括:狀態(tài)特征(屬性)肮之、動態(tài)特征(方法)

    • public class Student{
          //屬性:
              姓名
              性別
              身高
          //方法
              sing
              dance
              study
      }
      
    • 要求具備:觀察+抽象能力掉缺,把現(xiàn)實世界中的對象手中的共同特征抽象成類,然后通過類實例化對象戈擒,讓對象之間互相寫作形成系統(tǒng)眶明,模擬現(xiàn)實世界。

image.png
  • 類的定義

    • [修飾符列表] class 類名{
          //類體=屬性+方法
          //屬性在代碼中以變量形式存在(描述狀態(tài))筐高。
          //方法描述動作行為搜囱。
      }
      
    • 因為屬性是數(shù)據(jù)丑瞧,數(shù)據(jù)在程序中存在變量中。

    • 變量:在方法體內(nèi)聲明:局部變量蜀肘;類內(nèi)方法體外聲明變量:成員變量(屬性)绊汹。

    • 成員變量可以不手動賦值。

    • public class Student{
          int id;
          String name;
          int age;
          boolean gender;
          String addr;
      }
      
    • public class StudentTest{
          public static void main(String[] args){
              //new 類名()扮宠; 創(chuàng)建對象西乖。
              //new是一個運算符,專門負(fù)責(zé)對象的創(chuàng)建坛增。
              //類型 變量名 = new 類名();
                  //s1叫引用
              Student s1 = new Student();
              //類型:基本數(shù)據(jù)類型+引用數(shù)據(jù)類型获雕。
              //Java中所有的類都屬于引用數(shù)據(jù)類型。
          }
      }
      
    • 創(chuàng)建對象的個數(shù)沒有限制收捣,只要有模板類就行届案。

    • 關(guān)于編譯的過程:按說先編譯Student.java ,再編譯StudentTest.java。

    • 但是對于編譯器來說坏晦,編譯StudentTest.java時萝玷,會自動找Student.class文件,如果沒有昆婿,會自動編譯Student.java文件球碉,生成Student.class文件。

    • 第一種方式:javac Student.java javac StudentTest.java

    • 第二種方式:javac StudentTest.java

    • 第三種方式:javac *.java

    • 在語法上實現(xiàn)對象創(chuàng)建:類名 變量名 = new 類名();

image.png
  • 成員變量沒有手動賦值都默認(rèn)賦值仓蛆。

    • 類型 默認(rèn)值
    • byte 0
    • short 0
    • int 0
    • long 0L
    • float 0.0F
    • double 0.0
    • boolean false
    • char \u0000
    • 引用數(shù)據(jù)類型 null
  • 實例變量(屬性):對象級別的變量睁冬。

  • 實例變量訪問時,必須先實例化看疙。不能通過類名直接訪問豆拨。

image.png
  • 對象和引用的區(qū)別:對象是通過new出來的,在堆內(nèi)存中存儲能庆。引用 是但凡是變量并且變量中保存了堆內(nèi)存中對象的變量施禾。

  • //訪問實例變量: 引用.實例變量名

  • public class 學(xué)生{
      int 學(xué)號;
      String 姓名;
    }
    
  • public clss 學(xué)生測試{
      public static void main(String[] args){
          學(xué)生 張三 = new 學(xué)生();
          System.out.println(張三.學(xué)號);
          System.out.println(張三.姓名);
          
          張三.學(xué)號 = 111;
          張三.姓名 = "這里";
          
          System.out.println(張三.學(xué)號);
          System.out.println(張三.姓名);
      }
    }
    
public  class User{
    int id;
    String user;
}
public class UserTest{
    public static void main(String[] args){
        User u1 = new User();
        u1.id = 111;
        u1.user = "張三";
        
        System.out.println(u1.id);
        System.out.println(u1.user);
    }
}
image.png
  • 借鑒:


    image.png
public class Addr{
    String city;
    String jd;
}
public class User{
    String username;
    int id;
    Addr addr;
}
public class Test{
    public static void main(String[] args){
        User u = new User();
        System.out.println(u.id);
        System.out.println(u.username);
        System.out.println(u.addr);
        
        Addr c  = new Addr();
        c.city = "beij";
        c.jd = "daxing";
        
        u.addr = c;
        
        System.out.println(u.addr.city);
    }
}
image.png
  • 畫內(nèi)存圖注意事項:
    • 不要體現(xiàn)代碼在內(nèi)存圖中,主要體現(xiàn)數(shù)據(jù)
    • 圖形搁胆,有先后順序弥搞。
  • 為什么畫內(nèi)存圖
    • 有了內(nèi)存圖,程序不允許渠旁,也知道結(jié)果
    • 有了內(nèi)存圖攀例,有助于調(diào)試程序
  • 引用是存儲對象內(nèi)存地址的一個變量
  • 對象是堆里new出來的。
  • 引用一定是局部變量嗎顾腊? 不一定粤铭。可以是成員變量
public class T{
    A a;
    
    public static void main(String[] args){
        D d = new D();
        C c = new C();
        B b = new B();
        A a = new A();
        T t = new T();
        
        //以下賦值不寫會出現(xiàn)空指針異常杂靶。
        c.d = d;
        b.c = c;
        a.b = b;
        t.a = a;
        
        //通過t訪問d中的i
        System.out.println(t.a.b.c.d.i);
    }
}

class A{
    B b;
}
class B{
    C c;
}

class C{
    D d;
}
class D{
    int i;
}
public class NullPointerTest{
    public static void main(String[] args){
        Customer c = new Customer();
        
        System.out.println(c.id);
        
        c.id = 9876;
        System.out.println(c.id);
        
        c = null;//編譯器只檢查語法梆惯。語法沒錯酱鸭。
        System.out.println(c.id);
    }
}

class Customer{
    int id;
}
image.png
  • 關(guān)于垃圾回收器GC:在Java中,垃圾回收期主要針對的是堆內(nèi)存加袋。當(dāng)一個Java對象沒有任何引用指向該對象時凛辣,GC會考慮將該垃圾數(shù)據(jù)釋放回收掉。

  • 空引用訪問實例(對象相關(guān))相關(guān)的數(shù)據(jù)時都會出現(xiàn)空指針異常职烧。

  public class Test{
    public static void main(String[] args){
        int i = 10;
        add(i);
        System.out.println("main-->"+i);
    }
    public static void add(int i){
        i++;
        System.out.println("add->"+i);
    }
  }
360截圖20200417112338296.jpg
  • 無論是基本數(shù)據(jù)類型還是引用數(shù)據(jù)類型傳值都是值傳遞
public class Test{
    public static void main(String[] args){
        Person p = new Person();
        p.age = 10;
        add(p);
        System.out.println("main->"+p.age);
    }
    public static void add(Person p){
        p.age++
        System.out.println("add->"+p.age);
    }
}

class Person{
    int age;
}
image.png
  • 值傳遞傳遞的是變量中保存的值復(fù)制一份傳遞過去扁誓。

  • 構(gòu)造方法:通過構(gòu)造方法可以完成對象的創(chuàng)建以及實例變量初始化。也就是說蚀之,構(gòu)造方法是用來創(chuàng)建對象并且同時給對象的屬性賦值蝗敢。

  • 當(dāng)一個類沒有提供任何構(gòu)造方法,系統(tǒng)默認(rèn)提供一個無參構(gòu)造方法足删。

  • 建議將無參構(gòu)造寫出來寿谴。

  • 調(diào)用構(gòu)造方法使用new運算符

  • // 構(gòu)造方法語法:
    [修飾符列表]構(gòu)造方法名(形式參數(shù)列表){
      構(gòu)造方法體;
    }
    修飾符目前統(tǒng)一寫public
    構(gòu)造方法與類名必須一致。
    構(gòu)造方法不需要指定返回值類型失受,也不能寫void讶泰。寫void表示普通方法。
    //普通方法語法:
    [修飾符列表]返回值類型 方法名(形式參數(shù)列表){
      方法體;
    }
    
    //構(gòu)造對象
    new 構(gòu)造方法名(參數(shù)列表);
    
    
  • public class ConstructorTest{
      public static void main(String[] args){
          Student s1 = new Student();
          //如果定義了一個有參構(gòu)造拂到,則系統(tǒng)不會提供無參構(gòu)造方法痪署。
          
          System.out.println(s1);
          
          Student s2 = new Student(2);
          
          Student s3 = new Student(1,"11",12);
          
          System.out.println(s3.id);
          System.out.println(s3.name);
          System.out.println(s3.age);     
      }
      
      public static void doSome(){
          System.out.println("111");
      }
    }
    
    public class Student{
      int id;
      string name;
      int age;
      
      public Student(){
          System.out.println("do some!");
      }
      public Student(int i){
          
      }
      
      public Student(String name){
          
      }
      public Student(int id,String name,int age){
          id = id;
          name = name;
          age = age;
      }
    }
    
  • 成員變量默認(rèn)賦值的時機:在構(gòu)造方法執(zhí)行的過程中完成的初始化。

  • 構(gòu)造方法:用于對象的創(chuàng)建

  • 封裝作用:保證內(nèi)部結(jié)構(gòu)的安全兄旬;屏蔽復(fù)雜狼犯,暴露簡單。

  • 在代碼級別上领铐,封裝有什么用悯森?

    • 一個類中的數(shù)據(jù),假設(shè)封裝之后绪撵,對于代碼的調(diào)用人員來說瓢姻,不需要關(guān)心代碼的復(fù)雜實現(xiàn),只需要通過一個簡單的入口就可以訪問了音诈,另外汹来,類體重安全級別較高的數(shù)據(jù)封裝起來,外部人員不能隨意訪問改艇,來保證數(shù)據(jù)的安全性。

    • public class Person{
          int age;
      }
      
    • public class PersonTest{
          public static void main(String[] args){
              Person p1 = new Person();
              System.out.println(p1.age);
              
              p1.age = 50;
              System.out.println(p1.age);
              
              p1.age = -100;//age是一個負(fù)數(shù)坟岔,但是通過了谒兄。
              System.out.println(p1.age);
              
          }
      }
      
    • //不使用封裝Person類的age暴露,隨意修改社付。

    • //封裝起來承疲,數(shù)據(jù)安全邻耕,調(diào)用方便
      //屬性私有化,對外提供簡單的操作
      public class PersonTest{
          public static void main(String[] args){
              Person p1 = new Person();
              System.out.println(p1.age);
              
              p1.age = 50;
              System.out.println(p1.age);
              
              p1.age = -100;//age是一個負(fù)數(shù)燕鸽,但是通過了兄世。
              System.out.println(p1.age);
              
          }
      }
      
    • public class Person{
          private int age;//只能在本類中訪問,出來就不能訪問了啊研。
          
          //外部訪問入口
      }
      
    • 構(gòu)造方法作用:創(chuàng)建對象御滩,給屬性賦值。

public class MethodTest{
    public static void main(String[] args){
        //調(diào)用static的調(diào)用方法
        MethodTest.doSome();
        doSome();
        
        //不帶static的調(diào)用方法
        MethocTest mt = new MethodTest();
        mt.doOther();
    }
    //帶static方法
    public static void doSome(){
        System.out.println("wss");
    }
    
    //無static方法,實例方法党远,必須通過對象調(diào)用
    public void doOther(){
        
    }
}
//空指針異常本質(zhì)是空引用訪問實例相關(guān)數(shù)據(jù)削解。
public class NullPointerTest{
    public static void main(String[] args){
        User u = new User();
        System.out.println(u.id);
        u.doSome();
        
        u = null;
        System.out.println(u.id);//需要對象存在,空指針異常
        u.doSome();//一個實例方法調(diào)用必須有對象的存在沟娱,所以空指針異常氛驮。
    }
}

class User{
    int id;
    public void doSome(){
        System.out.println("dosome");
    }
    public void exam(){
        
    }
}
  • public class Person{
      private int age;//只能在本類中訪問,出來就不能訪問了济似。
      
      //外部訪問入口
      //提供對外公開的入口矫废,都是類的實例操作入口,因此非static類型的砰蠢。
      //set和get的格式: 
      //public 返回值類型 get+屬性首字母大寫(無參){
          return xxx;
      //}
      //public void set+屬性首字母大寫(參數(shù)){
          xxx = 參數(shù);
      //}
      public int getAge(){
          return age;
      }
      public void setAge(int nianLing){
          if(nianLing < 0 || nianLing > 150){
              System.out.println("年齡值不合法");
              return;
          } 
          age = nianLing;
      }
    }
    
public class PersonTest{
    public static void main(String[] args){
        Person p = new Person();
        int nianLing = p1.getAge();
        System.out.println(nianLing);
        
        
        p1.setAge(100);
        System.out.println(p1.getAge());
        
        p1.setAge(-100);
        System.out.println(p1.getAge());
    }
}
  • 封裝的代碼實現(xiàn):屬性私有化蓖扑;對外提供set和get方法。
  • set和get都是實例方法娩脾,不帶static赵誓,實例方法必須先new對象。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末柿赊,一起剝皮案震驚了整個濱河市俩功,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碰声,老刑警劉巖诡蜓,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異胰挑,居然都是意外死亡蔓罚,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門瞻颂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來豺谈,“玉大人,你說我怎么就攤上這事贡这〔缒” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丽惭。 經(jīng)常有香客問我击奶,道長,這世上最難降的妖魔是什么责掏? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任柜砾,我火速辦了婚禮,結(jié)果婚禮上换衬,老公的妹妹穿的比我還像新娘痰驱。我一直安慰自己,他們只是感情好冗疮,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布萄唇。 她就那樣靜靜地躺著,像睡著了一般术幔。 火紅的嫁衣襯著肌膚如雪另萤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天诅挑,我揣著相機與錄音四敞,去河邊找鬼。 笑死拔妥,一個胖子當(dāng)著我的面吹牛忿危,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播没龙,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼铺厨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了硬纤?” 一聲冷哼從身側(cè)響起解滓,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎筝家,沒想到半個月后洼裤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡溪王,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年腮鞍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莹菱。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡移国,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出道伟,到底是詐尸還是另有隱情桥狡,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站裹芝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏娜汁。R本人自食惡果不足惜嫂易,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望掐禁。 院中可真熱鬧怜械,春花似錦、人聲如沸傅事。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蹭越。三九已至障本,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間响鹃,已是汗流浹背驾霜。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留买置,地道東北人粪糙。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像忿项,于是被迫代替她去往敵國和親蓉冈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349

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