三、 面向?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(); // "學習餓了要吃飯"
}
成員變量的默認值:
類與對象的練習:
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();
}
}
-
對象內(nèi)存圖:
內(nèi)存圖.PNG
2.成員變量和局部變量區(qū)別:
①在類中的位置不同
- 成員變量:類中,方法外
- 局部變量:方法中或者方法聲明上(形式參數(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的含義:
- private是一個權限修飾符,代表最小權限。
- 可以修飾成員變量和成員方法。
- 被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;
}
}
注意:
- 如果你不提供構造方法,系統(tǒng)會給出無參數(shù)構造方法。
- 如果你提供了構造方法,系統(tǒng)將不再提供無參數(shù)構造方法。
- 構造方法是可以重載的,既可以定義參數(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)換寫法如下
以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直接在編譯階段檢查這種錯誤,避免運行時異常
六、訪問修飾符
- public: Java語言中訪問限制最寬的修飾符,一般稱之為“公共的”。被其修飾的類、屬性以及方法不僅可以跨類訪問,而且允許跨包(package)訪問。
- private: Java語言中對訪問權限限制的最窄的修飾符,一般稱之為“私有的”。被其修飾的類、屬性以及方法只能被該類的對象訪問,其子類不能訪問,更不能允許跨包訪問。
- protect: 介于public 和 private 之間的一種訪問修飾符,一般稱之為“保護形”。被其修飾的類、屬性以及方法只能被類本身的方法及子類訪問,即使子類在不同的包中也可以訪問。
- default:即不加任何訪問修飾符,通常稱為“默認訪問模式“。該模式下,只允許在同一個包中進行訪問。