天天看點

JAVA學習day09

1、面向過程與面向對象的思想

面向對象: 我該讓誰來做

面向過程: 我該怎麼做

2、大象裝冰箱

我們把大象裝冰箱為例進行分析。

在針對具體的需求,可以使用名詞提煉的辦法進行分析,尋找具體的對象。

需求:把大象裝冰箱裡

對象:大象、冰箱

分三步:

1、打開冰箱門

2、将大象裝進去

3、關閉冰箱門

分析發現打開、裝、關閉都是冰箱的功能。即冰箱對象具備如下功能:

冰箱打開

冰箱存儲

冰箱關閉

用僞代碼描述,上述需求中有兩個具體的事物 大象 和 冰箱

描述大象:

class 大象

{

}

描述冰箱

class冰箱

void 打開(){}

void 存儲(大象){}

void 關閉(){}

當把具體的事物描述清楚之後,需要使用這些具體的事物,Java使用具體的事物,需要通過new關鍵字來建立這個事物的具體執行個體。

使用對象:

1、建立冰箱的對象

冰箱 bx = new 冰箱();

2、調用冰箱的功能

對象.功能();

bx.打開();

bx.存儲(new 大象());

bx.關閉();

 總結:

1、先按照名詞提煉問題領域中的對象

2、對對象進行描述,其實就是在明确對象中應該具備的屬性和功能

3、通過new的方式就可以建立該事物的具體對象

4、通過該對象調用它以後的功能。

3、對象的記憶體圖

方法進棧,類進堆
           

4、成員變量和局部變量的差别

成員變量:定義在類中的
局部變量:定義在方法中的變量

差別:
1)定義位置上的差別
成員變量:定義在類中,方法外
局部變量:定義在方法中,語句内

2)作用域不同
成員變量:作用範圍是整個類
局部變量:作用範圍是方法内,語句内

3)預設值不同
成員變量:有自己的預設值
局部變量:沒有預設值,不指派不能使用

4)記憶體位置不同
成員變量:跟着對象進入堆記憶體存儲
局部變量:跟着方法進棧記憶體

5)生命周期不同
成員變量:跟着對象,在堆中存儲,記憶體等待JVM清理
局部變量:跟着方法,方法出棧,生命周期較短

           

5、方法參數是基本資料類型 或 引用資料類型

public class Person {

String name ;

/*

  • 方法的參數類型,是基本資料類型,引用資料類型

    */

public class TestPerson {

public static void main(String[] args) {
    int a = 1;
    function(a);
    System.out.println(a);
    
    Person p = new Person();
    p.name = "張三";
    System.out.println(p.name);
    
    function(p);
    
    System.out.println(p.name);
}
/*
 * 定義方法,參數類型是引用資料類型
 * 參數是Person類型
 * p接受的是一個記憶體的位址
 * main 中的變量p
 * function  中的變量p  儲存的位址是一樣的
 */
public static void function(Person p){
    p.name = "李四";
}

/*
 * 定義方法,參數類型是基本資料類型
 */
public static void function(int a){
    a+=5;
}           

6、封裝

将具體功能封裝到方法中,學習對象時,也提過将方法封裝在類中,其實這些都是封裝。
封裝,它也是面向對象思想的特征之一。面向對象共有三個特征:封裝,繼承,多态。接下來我們具體學習封裝。
    封裝表現:
    1、方法就是一個最基本封裝體。
    2、類其實也是一個封裝體。
    從以上兩點得出結論,封裝的好處:
    1、提高了代碼的複用性。
    2、隐藏了實作細節,還要對外提供可以通路的方式。便于調用者的使用。這是核心之一,也可以了解為就是封裝的概念。
    3、提高了安全性。
           

7、private關鍵字

  • 新的關鍵字 private 私有 屬于成員修飾符,不能修飾局部變量
  • 被private修飾的成員,隻能在自己的本類中被使用
  1. cn.itcast.demo04;
  • 描述現實生活中的人的事物
  • 屬性: 姓名 年齡
  • 功能: 說話
  • 出現安全問題: age問題,可能出現指派為負數的情況
  • 負數不會導緻程式問題,違反生活中的真實情況
  • 提高安全問題: 讓外面的類,不允許直接調用我的成員變量
  • 對私有變量,提供公共的通路方式: 方法
//人的姓名,成員變量
String name;
//人的年齡,成員變量
private int age ;

//變量age被私有,提供方法,讓外面的類使用
//定義方法,對age變量進行指派,方法名字,必須set開頭
public void setAge(int a){
    //對變量參數a進行範圍的限制
    if(a<0 || a > 200){
        //如果a超過範圍,手動将age指派為20
        age = 20;
    }else{
    //如果a沒有超過範圍,直接對age指派
    age = a;
    }
}

//定義方法,對變量age擷取值使用,方法名字get
public int getAge(){
    return age;
}


//定義人的說話功能,方法中,要求說出自己的姓名和年齡
public void speak(){
    System.out.println(name+"..."+age);
}           

package cn.itcast.demo04;

  • 定義好的Person類進行測試
  • 建立對象,對象調用屬性和方法

public class PersonTest {

public static void main(String[] args) {
    //建立Person類的對象  new
    Person p = new Person();
    //對成員變量指派
    //p.age = -200;
    //對成員變量age指派,隻能調用Set方法指派
    p.setAge(50);
    
    p.name = "張三";
    //調用類中方法
    p.speak();
    
    //輸出成員變量age值,必須調用get方法
    System.out.println(p.getAge());
}
           
類中不需要對外提供的内容都私有化,包括屬性和方法。
    以後再描述事物,屬性都私有化,并提供setXxx getXxx方法對其進行通路。
           

8、私有化Person類帶get,set

私有化所有的屬性(成員變量),必須有對應的get與set方法
凡是自定義的類,都必須有get與set方法
           

package cn.itcast.demo05;

  • 類描述人:
  • 屬性: 姓名和年齡
  • 方法: 說話
  • 私有化所有的屬性 (成員變量) ,必須寫對應的get/set方法
  • 凡是自定義的類,自定義成員變量,應該私有化,提供get/set
  • this關鍵字:
  • 區分成員變量和局部變量同名情況
  • 方法中,方位成員變量,寫this.
private String name;
private int age;

// set方法,變量name,age指派
public void setAge(int age) {
    this.age = age;
}

public void setName(String name) {
    this.name = name;
}

// get方法,變量name,age擷取值
public int getAge() {
    return age;
}

public String getName() {
    return name;
}

public void speak() {
    String  name = "哈哈";
    int age = 16;
    
    System.out.println("人在說話  " + this.name + "..." + this.age);
}           
public static void main(String[] args) {
    Person p = new Person();
    //調用set方法,對成員變量指派
    p.setAge(18);
    p.setName("旺财");
    p.speak();
    
    
    //調用get方法,擷取成員變量的值           

// System.out.println(p.getName());

// System.out.println(p.getAge());

}           

9、this關鍵字——用于解決成員變量和局部變量的重名問題

方法中的局部變量和類中的成員變量,采用就近原則進行變量擷取

由于存在成員變量和局部變量同名的情況,此時需要this關鍵字

所有this.的變量都是類中的成員變量

10、知識點總結

 類與對象

 類,用于描述多個對象的共同特征,它是對象的模闆。

 對象,用于描述現實中的個體,它是類的執行個體。

 類的定義:使用關鍵字class來定義java中的類

 格式:

class 類名 {
            //屬性
            資料類型 變量名;
            …
            //方法
            修飾符 傳回值類型 方法名(參數){   }
            …
        }           

 建立對象:

類名 對象名 = new 類名();

 封裝(private關鍵字)

 封裝,把對象的屬性與方法的實作細節隐藏,僅對外提供一些公共的通路方式

 封裝的展現:

 變量:使用 private 修飾,這就是變量的封裝

 方法:也是一種封裝,封裝了多條代碼

 類: 也是一種封裝,封裝了多個方法

 private關鍵字,私有的意思

 它可以用來修飾類中的成員(成員變量,成員方法)

 private的特點:

 private修飾的成員隻能在目前類中通路,其他類中無法直接通路

 this關鍵字

 this關鍵字,本類對象的引用

 this是在方法中使用的,哪個對象調用了該方法,那麼,this就代表調用該方法的對象引用

 this什麼時候存在的?當建立對象的時候,this存在的

 this的作用:用來差別同名的成員變量與局部變量(this.成員變量)

public void setName(String name) {
            this.name = name;
        }           
JAVA學習day09