樂編科技--java基礎day20

三、 面向?qū)ο?/h2>

Java語言是一種面向?qū)ο蟮某绦蛟O計語言,而面向?qū)ο笏枷胧且环N程序設計思想,我們在面向?qū)ο笏枷氲闹敢拢?使用Java語言去設計、開發(fā)計算機程序。 這里的對象泛指現(xiàn)實中一切事物,每種事物都具備自己的屬性和行為。面 向?qū)ο笏枷刖褪窃谟嬎銠C程序設計過程中,參照現(xiàn)實中事物,將事物的屬性特征、行為特征抽象出來,描述成計算 機事件的設計思想。 它區(qū)別于面向過程思想,強調(diào)的是通過調(diào)用對象的行為來實現(xiàn)功能,而不是自己一步一步的去 操作實現(xiàn)。
例子:
洗衣服:

  • 面向過程:把衣服脫下來-->找一個盆-->放點洗衣粉-->加點水-->浸泡10分鐘-->揉一揉-->清洗衣服-->擰干-->晾 起來
  • 面向?qū)ο螅喊岩路撓聛?->打開全自動洗衣機-->扔衣服-->按鈕-->晾起來
    區(qū)別:
  • 面向過程:強調(diào)步驟。
  • 面向?qū)ο螅簭娬{(diào)對象,這里的對象就是洗衣機
    面向?qū)ο笏枷胧且环N更符合我們思考習慣的思想,它可以將復雜的事情簡單化,并將我們從執(zhí)行者變成了指揮者。
    面向?qū)ο蟮恼Z言中,包含了三大基本特征,即封裝、繼承和多態(tài)。
    1.封裝:
    封裝是面向?qū)ο蟮暮诵乃枷?將對象的屬性和行為封裝起來,其載體就是類,類通常會隱藏實現(xiàn)細節(jié),這就是封裝.只允許操作公開的數(shù)據(jù),避免了外部操作對內(nèi)部數(shù)據(jù)的影響.提高了程序可維護性
    2.繼承:
    比如:矩形,菱形,平行四邊形和梯形 都是四邊形.他們共同的特點是:擁有四個邊.如果把平行四邊形當做四邊形的延伸,那么平行四邊形復用了四邊形的屬性和行為,同時添加了平行四邊形特有的屬性和行為(平行且相等),那么將類似于平行四邊形的類稱作子類,類似于四邊形的類稱為父類.
    繼承是實現(xiàn)重復利用的重要手段,子類通過繼承,復用父類屬性和行為的同時又添加了子類特有的屬性和行為.
    3.多態(tài):
    多態(tài)是繼封裝、繼承之后,面向?qū)ο蟮牡谌筇匦浴?br> 生活中,比如跑的動作,小貓、小狗和大象,跑起來是不一樣的。再比如飛的動作,昆蟲、鳥類和飛機,飛起來也 是不一樣的??梢?,同一行為,通過不同的事物,可以體現(xiàn)出來的不同的形態(tài)。多態(tài),描述的就是這樣的狀態(tài)。

1.類:

是一組相關屬性和行為的集合??梢钥闯墒且活愂挛锏哪0?,使用事物的屬性特征和行為特征來描述該類事物。
現(xiàn)實中,描述一類事物:
屬性:就是該事物的狀態(tài)信息。
行為:就是該事物能夠做什么。
舉例:小貓。
屬性:名字、體重、年齡、顏色。
行為:走、跑、叫

類的定義格式:

public class ClassName {
   //成員變量
   //成員方法  
}

定義類:
就是定義類的成員,包括成員變量和成員方法。
①成員變量:在類中,方法外。
②成員方法:和以前定義方法幾乎是一樣的。只是少了static.
https://www.cnblogs.com/111testing/p/8443539.html

public class Student {
    //成員變量
   String name;//姓名        
   int age;//年齡
 //成員方法     //學習的方法     
  public void study() {
     System.out.println("好好學習,天天向上"); 
  }     
//吃飯的方法
   public void eat() { 
    System.out.println("學習餓了要吃飯");  
 } 
}
2.對象

舉例:一只小貓。
屬性:tom、5kg、2 years、yellow。 行為:溜墻根走、蹦跶的跑、喵喵叫。
類和對象的關系:
類是對一類事物的描述,是抽象的。
對象是一類事物的實例,是具體的。
類是對象的模板,對象是類的實體。
①創(chuàng)建對象:
類名 對象名 = new 類名();
②使用對象訪問類中的成員:
對象名.成員變量;
對象名.成員方法()

public class Test01_Student {
   public static void main(String[] args) {
     //創(chuàng)建對象格式:類名 對象名 = new 類名();
     Student s = new Student();
     System.out.println("s:"+s); //cn.itcast.Student@100363       //直接輸出成員變量值     
System.out.println("姓名:"+s.name); //null
     System.out.println("年齡:"+s.age); //0
     System.out.println("‐‐‐‐‐‐‐‐‐‐");
       //給成員變量賦值
     s.name = "趙麗穎";
     s.age = 18;
       //再次輸出成員變量的值
     System.out.println("姓名:"+s.name); //趙麗穎
     System.out.println("年齡:"+s.age); //18
     System.out.println("‐‐‐‐‐‐‐‐‐‐");
       //調(diào)用成員方法
     s.study(); // "好好學習,天天向上"
     s.eat(); // "學習餓了要吃飯"  
 }

成員變量的默認值:

成員變量的默認值.PNG

類與對象的練習:

public class Phone {
 // 成員變量
 String brand;
 //品牌
 int price;
 //價格
 String color;
 //顏色 // 成員方法 //打電話 
public void call(String name) {
 System.out.println("給"+name+"打電話");
 }
//發(fā)短信
 public void sendMessage() {
 System.out.println("群發(fā)短信");
 } 
}

定義測試類:

public class Test02Phone {
 public static void main(String[] args) { 
//創(chuàng)建對象
 Phone p = new Phone();
 //輸出成員變量值
 System.out.println("品牌:"+p.brand);//null 
 System.out.println("價格:"+p.price);//0
 System.out.println("顏色:"+p.color);//null 
 System.out.println("‐‐‐‐‐‐‐‐‐‐‐‐");
//給成員變量賦值
 p.brand = "錘子";
 p.price = 2999;
 p.color = "棕色";
 //再次輸出成員變量值
 System.out.println("品牌:"+p.brand);//錘子
 System.out.println("價格:"+p.price);//2999
 System.out.println("顏色:"+p.color);//棕色
 System.out.println("‐‐‐‐‐‐‐‐‐‐‐‐");
 //調(diào)用成員方法
 p.call("紫霞");
 p.sendMessage(); 
 } 
}
  1. 對象內(nèi)存圖:


    內(nèi)存圖.PNG

2.成員變量和局部變量區(qū)別:


成員變量和局部變量位置圖.PNG

①在類中的位置不同

  • 成員變量:類中,方法外
  • 局部變量:方法中或者方法聲明上(形式參數(shù))

②作用范圍不一樣

  • 成員變量:類中
  • 局部變量:方法中

③初始化值的不同

  • 成員變量:有默認值
  • 局部變量:沒有默認值。必須先定義,賦值,最后使用

④在內(nèi)存中的位置不同

  • 成員變量:堆內(nèi)存
  • 局部變量:棧內(nèi)存

⑤生命周期不同

  • 成員變量:隨著對象的創(chuàng)建而存在,隨著對象的消失而消失
  • 局部變量:隨著方法的調(diào)用而存在,隨著方法的調(diào)用完畢而消失
3.封裝

面向?qū)ο缶幊陶Z言是對客觀世界的模擬,客觀世界里成員變量都是隱藏在對象內(nèi)部的,外界無法直接操作和修改。 封裝可以被認為是一個保護屏障,防止該類的代碼和數(shù)據(jù)被其他類隨意訪問。要訪問該類的數(shù)據(jù),必須通過指定的 方式。適當?shù)姆庋b可以讓代碼更容易理解與維護,也加強了代碼的安全性
①原則:
將屬性隱藏起來,若需要訪問某個屬性,提供公共方法對其訪問。
②步驟:
使用 private 關鍵字來修飾成員變量。
對需要訪問的成員變量,提供對應的一對 getXxx 方法 、 setXxx 方法
private的含義:

  1. private是一個權限修飾符,代表最小權限。
  2. 可以修飾成員變量和成員方法。
  3. 被private修飾后的成員變量和成員方法,只在本類中才能訪問。
    使用格式:
private 數(shù)據(jù)類型 變量名
public class Student {
   private String name;
   private int age;
   public void setName(String name) {
     //name = name;
     this.name = name;
   }
     public String getName() {
     return name;   
    }
     public void setAge(int age) {
     //age = age;
     this.age = age;
   }
     public int getAge() {
      return age;
    }
}

一、this關鍵字:
this代表所在類的當前對象的引用(地址值),即對象自己的引用
方法被哪個對象調(diào)用,方法中的this就代表那個對象。即誰在調(diào)用,this就代表誰
二、構造方法:
當一個對象被創(chuàng)建時候,構造方法用來初始化該對象,給對象的成員變量賦初始值。
注意:
無論你與否自定義構造方法,所有的類都有構造方法,因為Java自動提供了一個無參數(shù)構造方法, 一旦自己定義了構造方法,Java自動提供的默認無參數(shù)構造方法就會失效
構造方法的定義格式 :

修飾符 構造方法名(參數(shù)列表){
 // 方法體 
     }

構造方法的寫法上,方法名與它所在的類名相同。它沒有返回值,所以不需要返回值類型,甚至不需要void。使用 構造方法后,代碼如下:

public class Student {
   private String name;
   private int age;   // 無參數(shù)構造方法
   public Student() {}    // 有參數(shù)構造方法
   public Student(String name,int age) { 
    this.name = name;
     this.age = age; 
   } 
}

注意:

  1. 如果你不提供構造方法,系統(tǒng)會給出無參數(shù)構造方法。
  2. 如果你提供了構造方法,系統(tǒng)將不再提供無參數(shù)構造方法。
  3. 構造方法是可以重載的,既可以定義參數(shù),也可以不定義參數(shù)
    三、標準代碼——JavaBean
    JavaBean 是 Java語言編寫類的一種標準規(guī)范。符合 JavaBean 的類,要求類必須是具體的和公共的,并且具有無 參數(shù)的構造方法,提供用來操作成員變量的 set 和 get 方法
public class ClassName{
   //成員變量
   //構造方法
   //無參構造方法【必須】
   //有參構造方法【建議】
   //成員方法
   //getXxx() 
  //setXxx() 
}

public class Student {
   //成員變量
   private String name;
   private int age;
     //構造方法 
  public Student() {} 
    public Student(String name,int age) { 
    this.name = name; 
    this.age = age; 
  }
     //成員方法
   publicvoid setName(String name) {
     this.name = name; 
  }  
   public String getName() {
     return name;  
 } 
    publicvoid setAge(int age) { 
    this.age = age; 
  } 
    publicint getAge() {
     return age;  
 } 
}

四、ArrayList類
java.util.ArrayList 是大小可變的數(shù)組的實現(xiàn),存儲在內(nèi)的數(shù)據(jù)稱為元素。此類提供一些方法來操作內(nèi)部存儲 的元素。 ArrayList 中可不斷添加元素,其大小也自動增長。
構造方法:

public ArrayList() :構造一個內(nèi)容為空的集合

基本格式:

ArrayList<String> list = new ArrayList<String>();

成員方法:
public boolean add(E e) : 將指定的元素添加到此集合的尾部。
public E remove(int index) :移除此集合中指定位置上的元素。返回被刪除的元素
public int size() :返回此集合中的元素數(shù)。遍歷集合時,可以控制索引范圍,防止越界。
public E get(int index) :返回此集合中指定位置上的元素。返回獲取的元素。

public class Demo01ArrayListMethod { 
  public static void main(String[] args) { 
    //創(chuàng)建集合對象
     ArrayList<String> list = new ArrayList<String>();
       //添加元素
     list.add("hello");
     list.add("world"); 
    list.add("java"); 
      //public E get(int index):返回指定索引處的元素
     System.out.println("get:"+list.get(0)); 
    System.out.println("get:"+list.get(1)); 
    System.out.println("get:"+list.get(2));
       //public int size():返回集合中的元素的個數(shù) 
    System.out.println("size:"+list.size());
       //public E remove(int index):刪除指定索引處的元素,返回被刪除的元素
     System.out.println("remove:"+list.remove(0));
       //遍歷輸出
     for(int i = 0; i < list.size(); i++){ 
      System.out.println(list.get(i));    
 } 
  } 
}

ArrayList如何存儲基本數(shù)據(jù)類型?
ArrayList對象不能存儲基本類型,只能存儲引用類型的數(shù)據(jù)。類似 <int> 不能寫,但是存儲基本數(shù)據(jù)類型對應的 包裝類型是可以的。所以,想要存儲基本類型數(shù)據(jù), <> 中的數(shù)據(jù)類型,必須轉(zhuǎn)換后才能編寫,轉(zhuǎn)換寫法如下

ArrayList存儲基本類型.PNG

以Interget為例:

public class Demo02ArrayListMethod { 
  public static void main(String[] args) {
     ArrayList<Integer> list = new ArrayList<Integer>();
     list.add(1);
     list.add(2);
     list.add(3); 
     list.add(4);
      System.out.println(list);
     }
 }

將對象添加到集合

public class Test02ArrayList { 
  public static void main(String[] args) { 
    //創(chuàng)建集合對象 
    ArrayList<Student> list = new ArrayList<Student>();
       //創(chuàng)建學生對象
     Student s1 = new Student("趙麗穎",18); 
    Student s2 = new Student("唐嫣",20); 
    Student s3 = new Student("景甜",25); 
    Student s4 = new Student("柳巖",19);
       //把學生對象作為元素添加到集合中
     list.add(s1);
     list.add(s2); 
     list.add(s3);
     list.add(s4); 
      //遍歷集合
     for(int x = 0; x < list.size(); x++) {
       Student s = list.get(x); 
      System.out.println(s.getName()+"‐‐‐"+s.getAge());
     } 
  } 
}

五、static關鍵字
static修飾靜態(tài)方法:
當 static 修飾成員方法時,該方法稱為類方法 。靜態(tài)方法在聲明中有 static ,建議使用類名來調(diào)用,而不需要 創(chuàng)建類的對象。調(diào)用方式非常簡單
類方法:使用 static關鍵字修飾的成員方法,習慣稱為靜態(tài)方法
定義格式:

修飾符 static 返回值類型 方法名 (參數(shù)列表){ 
 // 執(zhí)行語句      
 }

靜態(tài)方法調(diào)用的注意事項:

  • 靜態(tài)方法可以直接訪問類變量和靜態(tài)方法。
  • 靜態(tài)方法不能直接訪問普通成員變量或成員方法。反之,成員方法可以直接訪問類變量或靜態(tài)方法。
  • 靜態(tài)方法中,不能使用this關鍵字。
  • 靜態(tài)方法只能訪問靜態(tài)成員

static 修飾的內(nèi)容:
是隨著類的加載而加載的,且只加載一次。 存儲于一塊固定的內(nèi)存區(qū)域(靜態(tài)區(qū)),所以,可以直接被類名調(diào)用。 它優(yōu)先于對象存在,所以,可以被所有對象共享
提問:為什么static為什么只能調(diào)用靜態(tài)的?
因為靜態(tài)方法是屬于類的,動態(tài)方法屬于實例對象,動態(tài)方法只有在對象實例化之后才存在,如果靜態(tài)方法能調(diào)用動態(tài)方法的話,那如果別人通過類名調(diào)用靜態(tài)方法時實例對象可能并不存在,但是方法內(nèi)又調(diào)用了對象的方法,由于對象不存在,所以動態(tài)方法也不存在,程序肯定報錯,所以java直接在編譯階段檢查這種錯誤,避免運行時異常
六、訪問修飾符


訪問修飾符111.PNG
  • public: Java語言中訪問限制最寬的修飾符,一般稱之為“公共的”。被其修飾的類、屬性以及方法不僅可以跨類訪問,而且允許跨包(package)訪問。
  • private: Java語言中對訪問權限限制的最窄的修飾符,一般稱之為“私有的”。被其修飾的類、屬性以及方法只能被該類的對象訪問,其子類不能訪問,更不能允許跨包訪問。
  • protect: 介于public 和 private 之間的一種訪問修飾符,一般稱之為“保護形”。被其修飾的類、屬性以及方法只能被類本身的方法及子類訪問,即使子類在不同的包中也可以訪問。
  • default:即不加任何訪問修飾符,通常稱為“默認訪問模式“。該模式下,只允許在同一個包中進行訪問。
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容