掌握:面向對象側重于指定類和對象的使用
類和對象(了解)
客觀存在的事物皆為對象,是以我們也常常說萬物皆對象
類的了解
- 類是對現實生活中一類具有共同屬性和行為的事物的抽象
- 類是對象的資料類型,類是具有相同屬性和行為的一組對象的集合
- 簡單了解:類就是對現實事物的一種描述
- 類的組成
- 屬性:指事物的特征,例如:手機事物(品牌,價格,尺寸)
- 行為:指事物能執行的操作,例如:手機事物(打電話,發短信)
- 類和對象的關系
- 類:類是對現實生活中一類具有共同屬性和行為的事物的抽象
- 對象:是能夠看得到摸的着的真實存在的實體
- 簡單了解:類是對事物的一種描述,對象則為具體存在的事物
類的定義
類的組成是由屬性和行為兩部分組成
- 屬性:在類中通過成員變量來展現(類中方法外的變量)
- 行為:在類中通過成員方法來展現(和前面的方法相比去掉static關鍵字即可)
類的定義步驟:
①定義類
②編寫類的成員變量
③編寫類的成員方法
/*
手機類:
類名:
手機(Phone)
成員變量:
品牌(brand)
價格(price)
成員方法:
打電話(call)
發短信(sendMessage)
*/
public class Phone {
//成員變量
String brand;
int price;
//成員方法
public void call() {
System.out.println("打電話");
}
public void sendMessage() {
System.out.println("發短信");
}
}
對象的使用
- 建立對象的格式:
- 類名 對象名 = new 類名();
- 調用成員的格式:
- 對象名.成員變量
- 對象名.成員方法();
/*
建立對象
格式:類名 對象名 = new 類名();
範例:Phone p = new Phone();
使用對象
1:使用成員變量
格式:對象名.變量名
範例:p.brand
2:使用成員方法
格式:對象名.方法名()
範例:p.call()
*/
public class PhoneDemo {
public static void main(String[] args) {
//建立對象
Phone p = new Phone();
//使用成員變量
System.out.println(p.brand);
System.out.println(p.price);
p.brand = "小米";
p.price = 2999;
System.out.println(p.brand);
System.out.println(p.price);
//使用成員方法
p.call();
p.sendMessage();
}
}
對象記憶體圖(了解)
單個對象記憶體圖
多個對象記憶體圖
多個對象指向相同記憶體圖
成員變量和局部變量
. | 成員變量 | 局部變量 | 靜态變量 |
---|---|---|---|
定義位值 | 在類中,方法外 | 方法中,或者方法的形式參數 | 在方法中,方法外 |
初始化值 | 有預設的初始化值 | 無,先定義,指派後才能使用 | 有預設的初始化值 |
調用方式 | 對象調用 | ---- | 對象調用,類名調用 |
存儲位置 | 堆中 | 棧中 | 方法區 |
生命周期 | 與對象共存亡 | 與方法共存亡 | 與類共存亡 |
别名 | 執行個體變量 | ---- | 類變量 |
封裝
-
封裝概述
是面向對象三大特征之一(封裝,繼承,多态)
是面向對象程式設計語言對客觀世界的模拟,客觀世界裡成員變量都是隐藏在對象内部的,外界是無法直接操作的
-
封裝原則
将類的某些資訊隐藏在類内部,不允許外部程式直接通路,而是通過該類提供的方法來實作對隐藏資訊的操作和通路
成員變量private,提供對應的getXxx()/setXxx()方法
-
封裝好處
通過方法來控制成員變量的操作,提高了代碼的安全性
把代碼用方法進行封裝,提高了代碼的複用性
private(私有)關鍵字
private是一個修飾符,可以用來修飾成員(成員變量,成員方法)
- 被private修飾的成員,隻能在本類進行通路,針對private修飾的成員變量,如果需要被其他類使用,提供相應的操作
- 提供“get變量名()”方法,用于擷取成員變量的值,方法用public修飾
- 提供“set變量名(參數)”方法,用于設定成員變量的值,方法用public修飾
this關鍵字
this修飾的變量用于指代成員變量,其主要作用是(區分局部變量和成員變量的重名問題)
- 方法的形參如果與成員變量同名,不帶this修飾的變量指的是形參,而不是成員變量
- 方法的形參沒有與成員變量同名,不帶this修飾的變量指的是成員變量
構造方法
構造方法是一種特殊的方法
- 作用:建立對象 Student stu = new Student();
-
格式:
public class 類名{
修飾符 類名( 參數 ) {
}
}
- 功能:主要是完成對象資料的初始化
class Student {
private String name;
private int age;
//構造方法
public Student() {
System.out.println("無參構造方法");
}
public void show() {
System.out.println(name + "," + age);
}
}
/*
測試類
*/
public class StudentDemo {
public static void main(String[] args) {
//建立對象
Student s = new Student();
s.show();
}
}
構造方法的注意事項(了解)
- 構造方法的建立
如果沒有定義構造方法,系統将給出一個預設的無參數構造方法
如果定義了構造方法,系統将不再提供預設的構造方法
- 構造方法的重載
如果自定義了帶參構造方法,還要使用無參數構造方法,就必須再寫一個無參數構造方法
- 推薦的使用方式
無論是否使用,都手工書寫無參數構造方法
- 重要功能!
可以使用帶參構造,為成員變量進行初始化
标準類制作(應用)
需求:定義标準學生類,要求分别使用空參和有參構造方法建立對象,空參建立的對象通過setXxx指派,有參建立的對象直接指派,并通過show方法展示資料。
class Student {
//成員變量
private String name;
private int age;
//構造方法
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
//成員方法
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void show() {
System.out.println(name + "," + age);
}
}
/*
建立對象并為其成員變量指派的兩種方式
1:無參構造方法建立對象後使用setXxx()指派
2:使用帶參構造方法直接建立帶有屬性值的對象
*/
public class StudentDemo {
public static void main(String[] args) {
//無參構造方法建立對象後使用setXxx()指派
Student s1 = new Student();
s1.setName("林青霞");
s1.setAge(30);
s1.show();
//使用帶參構造方法直接建立帶有屬性值的對象
Student s2 = new Student("林青霞",30);
s2.show();
}
}