002java300集基礎學習--尚學堂(28~51面向對象)

java300集基礎學習--尚學堂(28~51面向對象)

課時28:面向過程和面向對象的本質區別

本章概述

面向對象概念

oriented 確定…的方位 面向
object 對象
面向對象:通過對象來組織代碼,通過對象來封裝我們的數據

面向對象與面向過程之間的關系

面向對象編程起源

類似于c語言中的結構體
c++ 把同屬性的變量 同屬性的函數組合在一起為一個整體的類

面向對象編程優點

擴展性強、分工強、適合夠復雜的軟件

課程29:面向對象的方式思考問題

面向對象編程初步

  • 如何開汽車(事物比較簡單,可以用線性的思維去解決)
    面向過程: 面向對象:
    1.踩離合 駕駛員
    2.掛擋 汽車
    3.踩油門,放離合 駕駛員開汽車!
    4.開了 car.start();
  • 如何造汽車(事情比較復雜,使用簡單的線性思維無法解決)


課程30:類和對象的關系 寫出我們的第一個類

對象和類的概念

  • 面向的對象編程(OOP)的本質:以類的方式組織代碼,以對象的方式封裝(組織)數據
  • 對象:是具體的事物
  • 類:是對對象的抽象(抽象 抽出象的部分)
  • 先有具體的對象,然后抽象各個對象之間象的部分,歸納出類,通過類再認識其他對象
  • 對象和類的關系:特殊到一般,具體到抽象
  • 類:我們叫class
  • 對象:我們叫做Object,instance(實例)。以后我們說某個類的對象,某個類的實例。是一個意思
  • 類可以看成一類對象的模板,對象可以看成該類的一個具體實例
  • 類是用于描述同一類形的對象的一個抽象的概念,類中定義了這一類對象所應具有的靜態和動態屬性
  • 對象是java程序的核心,在java程序中“萬事萬物皆對象”
  • JDK提供了很多類供編程人員使用,編程人員也可以定義自己的類
package com.syy;

public class Student {
    //靜態的數據
    String name;
    int id;
    int age;
    String gender;
    //動態的行為
    public void study(){
        System.out.println(name+"在學習");
    }
    public void sayhello(String sname){
        System.out.println(name+"想"+sname+"說你好");
    }
    public static void main(String[] agrs){
        Student s1 = new Student();
        s1.name = "王哄";
        s1.study();
        s1.sayhello("王小二"); 
    }
}
/*
 * s1:  name王哄
 *      age
 *      id
 *      gender
 *      weight
 *      study()
 *      syahello
 */

課時31 程序執行過程的內存分析01

引用類型

  • java語言中除基本類型之外的變量類型都稱之為引用類型
  • java中的對象是通過引用(reference)對其操作的

類的屬性

  • 屬性 field, 或者叫成員變量
  • 成員變量系統會初始化,局部變量系統不會初始化
  • 屬性用于定義該類或該類對象包含的數據或者說靜態屬性
  • 屬性作用范圍是整個類體
  • 在定義成員變量時可以對其初始化,如果不對其初始化,java使用默認的值對其初始化。數值:0,0.0, boolean:false 所有引用類型:null
  • 屬性定義格式
    [修飾符] 屬性類型 屬性名 = [默認值]
    修飾符:可以省略,可以是:public protected static final
    屬性類型:可以是任意類型,基本類型和引用類型
    屬性名:合法標識符都可 首字母小寫 駝峰原則

類的方法

  • 面向對象中,整個程序的基本單位是類,方法是從屬于類的
  • java中方法參數傳遞是:值傳遞
  • 方法定義格式

[修飾符] 方法返回值類型 方法名(形參列表){
//n條語句
}

內存分析

  • 棧 存放:局部變量
  • 堆 存放:new出來的對象
  • 方法區 存放:類的信息(代碼)、static變量、常量池(字符串常量)等

內存分析實例

package com.syy;

public class Student {
    //靜態的數據
    String name;
    int id;
    int age;
    String gender;
    //動態的行為
    public void study(){
        System.out.println(name+"在學習");
    }
    public void sayhello(String sname){
        System.out.println(name+"想"+sname+"說你好");
    }
    public static void main(String[] agrs){
        //通過類加載器Class Loader加載Student類。加載后,在方法區中就有了Student類的信息;
        Student s1 = new Student();
        s1.name = "王哄";
        s1.study();
        s1.sayhello("王小二"); 
    }
}
/*
 * s1:  name王哄
 *      age
 *      id
 *      gender
 *      weight
 *      study()
 *      syahello
 */      

課程32程序執行過程的內存分析02

課程33虛擬機內存管理 垃圾回收機制 c++和java的比較

垃圾回收機制(Garbage Collection)

  • 對象空間的分配:
    使用new關鍵字創建對象即可
  • 對象空間的釋放:
    將對象賦值null即可垃圾回收器將負責回收所有“不可達”對象的北村空間
  • 要點:
    程序員無權調用垃圾回收器
    程序員可以通過System.gc()。通知GC運行,但是JAVA規范并不能保證立刻運行
    finalize方法,是JAVA提供給程序員用來釋放對象或資源的方法,但是盡量少用
  • C++垃圾回收機制需要自己調用

課程34 構造方法

構造器

  • 構造器又稱為構造方法,constructor
  • 構造器用于構造該類的實例
  • 格式如下:

[修飾符] 類名(形參列表){
//n條語句
}

  • 是一種特殊的方法:
    1.通過new關鍵字調用
    2.構造器雖然有返回值,但是不能定義返回類型(返回值的類型肯定是本類),不能再構造器里調用return
    3.如果我們沒有定義構造器,則系統會自動定義一個無參的構造函數。如果已定義則編譯器不會添加
    4.構造器的方法名必須與類名一致
    5.作用:構造該類的對象,經常也用來初始化對象的屬性
package com.syy;

public class Car34 {
    int speed;
    
    
    public Car34(){
        System.out.println("構造一輛車");
    }

}
package com.syy;
/**
 * 測試構造方法
 * @author Administrator
 *
 */
public class Constructor {
    public static void main(String[] args){
        Car34 c = new Car34();
    }
}

實例

  • 定義一個點(point)類用來表示三維空間中的點(有三個坐標)。要求如下:
    可以生成具有特定坐標的點對象
    提供可以設置三個坐標的方法
  • 提供可以計算該點距另外點距離平方的方法
  • 代碼:
package com.syy;

public class Point {
    double x,y,z;
    //通過構造器初始化對象的屬性
    public Point(double _x,double _y, double _z){
        x = _x;
        y = _y;
        z = _z;
    }
    public void setX(double _x){
        x =_x;
    }
    public void setY(double _y){
        x =_y;
    }
    public void setZ(double _z){
        x =_z;
    }
    public double distance(Point p){
        double result = Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y)+(z-p.z)*(z-p.z));
        return result;
    }
    public static void main(String[] agrs){
        Point p = new Point(3,4,8);
        Point p2 = new Point(30,40,80);
        p.setX(10);
        System.out.println(p.x);
        System.out.println(p.distance(p2));     
    }   
}

課程35:方法重載_構造方法重載

重載(overload)

  • 方法的重載是指一個類中可以定義有相同得名字,但參數不同的多個方法。調用時,會根據不同的參數表選擇對應的方法。
  • 兩同三不同
    同一個類,同一個方法名
    不同:參數列表不同(類型 個數 順序不同)
  • 只有返回值不同不構成方法的重載

int a(String str){},
void a{String i}
調用: a();
誰能告訴我調用的哪一個方法

  • 只有形參的名稱不同,不構成方法的重載
  • 與普通方法一樣,構造方法也可以重載
package com.syy;
/**
 * 測試方法重載
 * @author Administrator
 *
 */
public class Overload {
    public static void main(String[] agrs) {
        myMath m = new myMath();
        int result = m.add(4.2, 5);
        System.out.println(result);
    }
}
class myMath{
    /*
    int a;
    int b;
    public myMath(int a){
        this.a = a;
    }
    public myMath(int a, int b){
        this.a = a;
        this.b = b;
    }
    */
    public int add(int a,int b){
        return a+b;
    }
    public int add(int a,double b){
        return (int)(a+b);
    }
    public int add(double a,int b){
        return (int)(a+b);
    }
    public int add(int a, int b,int c){
        return a+b+c;
    }   
}

課時36:static變量和方法 內存分析static

static關鍵詞

  • 在類中,用static聲明的成員變量為靜態變量,或者叫做:類屬性、類變量
    1.它為該類的公用變量,屬于類,被該類的所有實例共享,在類被載入時被顯示初始化
    2.對于該類的所有對象來說,static成員變量只有一份。被該類的所有對象共享
    3.可以使用“對象.類屬性”來調用。不過,一般都是用“類名.類屬性”
    4.static變量置于方法區中
  • 用static聲明的方法為靜態方法
    1.不需要對象,就可以調用(類名.方法名)
    2.在調用該方法時,不會將對象的引用傳遞給它,所以在static方法中不可訪問非static得成員
package com.syy;

public class Student2 {
    String name;
    int id;
    static int ss;
    public static void printSS(){
        System.out.println(ss);
    }
}
package com.syy;

public class Test {
    public static void main(String[] agrs){
        Student2.ss = 323;
        Student2.printSS();
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,733評論 18 399
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,858評論 1 10
  • Win7下如何打開DOS控制臺? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,608評論 4 12
  • 一:java概述:1,JDK:Java Development Kit,java的開發和運行環境,java的開發工...
    ZaneInTheSun閱讀 2,685評論 0 11
  • 2017年的煙花一過,我正好是個24歲的小姑娘了。 困惑隨年齡,只增不減。關于家庭愛情和仕途。爸媽兩頭親戚...
    小賴童鞋2012閱讀 167評論 0 0