01-面向物件介紹
-
問題 : 什么是面向物件 ?
面向物件是一種編程思想, 這種思想可以指導我們以什么形式去組織代碼, 以什么思路解決問題.
-
問題 : 為什么要學習面向物件思想呢 ?
因為這套思想來源于生活, 生活中解決問題, 就是一個個的物件在一起打交道從而將問題解決了 我們希望寫代碼的時候, 也能按照這套思想解決問題, 代碼的撰寫就會更加貼切生活, 編程也就會更加簡單了舉例:
猜數字小游戲1. 產生亂數 ----> 找來了Random物件
2. 鍵盤錄入 ----> 找來了Scanner物件
-
問題 : 面向物件, 重點學什么 ?
1. 學習自己如何設計物件 2. 學習已有的物件如何使用
-
總結 : Java 講究萬物皆物件
02-類和物件
-
前提需知 : Java中想要創建物件, 必須先要有類的存在
-
類和物件
類 : 一組相關屬性和行為的集合, 將其理解為是物件的一張設計圖
物件 : 根據設計圖創建出來的物體
關系:
1) 依賴關系: 需要根據類創建物件
2) 數量關系: 根據一個類, 創建出多個物件
-
類的組成
學生: class Student {}
老師: class Teacher {}
貓: class Cat {}
屬性(名詞):
成員變數: 跟之前定義變數的格式一樣, 只不過位置發生了改變, 放在了方法外面
行為(動詞):
成員方法: 跟之前定義方法的格式一樣, 只不過去掉了 static 關鍵字
public class Student {
String name;
int age;
public void show(){
System.out.println(name + "..." + age);
}
}
-
物件的創建和使用
1. 創建物件的格式
類名 物件名 = new 類名();
Student stu = new Student();
System.out.println(stu); // com.itheima.oop.Student@233ac4a
// 全類名@十六進制地址
2. 使用物件的成員變數
物件名.變數名;
stu.name = "張三";
stu.age = 23;
if(stu.age >= 18){
...
}
3. 使用成員方法的格式
物件名.方法名(實際引數);
stu.show();
03-成員變數和區域變數的區別
1. 類中撰寫位置不同
成員變數: 方法外
區域變數: 方法里
2. 初始化值不同
成員變數: 有默認初始化值
區域變數: 沒有默認初始化值, 使用之前必須完成賦值
3. 記憶體位置不同
成員變數: 堆記憶體
區域變數: 堆疊記憶體
4. 生命周期不同
成員變數: 隨著物件的創建而存在, 隨著物件的消失而消失
區域變數: 隨著方法的呼叫而存在, 隨著方法的彈堆疊而消失
5. 作用域
都在自己所屬的大括號中有效
04-this關鍵字
-
情況 : 當區域變數和成員變數重名的時候, Java會根據就近原則, 優先使用區域變數
class A {
int num = 10;
public void show(){
int num = 20;
System.out.println(num);
}
}
?
A a = new A();
a.show(); // 20
-
問題 : 如何區磁區域變數和成員變數的重名 ?
//解決方案: 使用this關鍵字進行區分
?
class A {
int num = 10;
public void show(){
int num = 20;
System.out.println(this.num);
}
}
?
A a = new A();
a.show(); // 10
-
this 介紹 :
-
代表當前類物件的參考 (地址) 哪一個物件呼叫的方法, 方法中的this, 就代表的是哪一個物件
-
a1.show() ---> this ---> a1的地址 a2.show() ---> this ---> a2的地址
-
this的使用細節 :
this.本類的成員變數
this.本類的成員方法();
this的省略規則 :
成員變數: 如果變數名不涉及重名, this.可以省略不寫的
成員方法: 沒有前提條件, this.可以直接省略不寫的
05-構造方法
-
構造方法 \ 構造器
-
創建物件的時候, 要執行的方法
-
-
構造方法的格式 :
-
方法名與類名相同, 大小寫也必須保持一致
-
沒有回傳值型別, 連 void 都沒有
-
不能通過 return 陳述句帶回結果資料
-
-
構造方法的執行時機 :
-
在創建物件的時候, 被系統自動呼叫執行
-
每創建一次物件, 就會執行一次構造方法
-
-
構造方法的作用 :
-
本質的作用 : 創建物件
-
結合執行時機 : 在創建物件的時候, 給成員變數賦值
-
-
構造方法的注意事項 :
-
如果一個類中, 沒寫構造方法, 系統將會提供一個 [默認的] [無引數的] 構造方法
-
如果手動撰寫過構造方法, 系統將不會再提供那個默認的無參構造了
-
建議 : 今后無參構造, 帶參構造, 全部手動給出
-
-
構造方法, 不允許物件名呼叫
-
06-封裝
-
問題 : 什么是封裝 ?
隱藏實作細節, 僅對外暴露公共的訪問方式
-
封裝在代碼中的常見體現 :
-
將屬性抽取到類中, 是對零散的資料, 進行了封裝
封裝前: String id = "001"; String name = "張三"; int age = 23; String tel = "156xxxxJQKA"; String address = "北京"; 這里我操作的是5個[零散的]變數, 不好管理 -------------------------------------------- 封裝后: class User { private String id; private String name; private int age; private String tel; private String address; // 省略構造方法, 和setXxx\getXxx } User u1 = new User("001","張三",23,"156xxxxJQKA","北京"); 這里我面向的就是一個整體的物件了, 不再是零散的資料了-
將代碼邏輯, 抽取到方法中, 這是對代碼的功能進行了封裝
程式員A : public void printArray(int[] arr){ .. 遍歷陣列 .. } 程式員B : 只需要關注方法怎么呼叫即可, 不需要關注方法內部的實作 這時候, 就是程式員A, 將遍歷陣列的功能代碼,封裝到了printArray的方法中. -
07-權限修飾符
-
權限修飾符可以修飾成員 (變數, 方法)
-
private 在同一個類中
-
(default) 在同一個類中, 同一個包中
-
protected 在同一個類中, 同一個包中, 不同包的子父類中
-
public : 任意位置
-
-
結論 :
-
今后最常用的 private, public
-
08-標準JavaBean撰寫
-
所有成員變數 private 私有化
-
提供空參 \ 帶參構造方法
-
針對于私有的成員變數, 撰寫出 setXxx 和 getXxx 方法
?
/*
標準的JavaBean :
?
1. 成員變數 private 私有化
?
2. 提供[空參][帶參]構造方法
?
3. 針對于私有的成員變數, 提供對應的 setXxx 和 getXxx 方法
*/
public class Student {
?
private String name;
private int age;
?
public Student() {
}
?
public Student(String name, int age) {
this.name = name;
this.age = age;
}
?
public String getName() {
return name;
}
?
public void setName(String name) {
this.name = name;
}
?
public int getAge() {
return age;
}
?
public void setAge(int age) {
this.age = age;
}
}
?
?
public class StudentTest {
public static void main(String[] args) {
// 1. 使用空參構造方法創建物件, 通過setXxx方法完成賦值
Student stu1 = new Student();
stu1.setName("張三");
stu1.setAge(24);
System.out.println(stu1.getName() + "---" + stu1.getAge());
?
// 2. 使用帶參構造方法創建物件, 在創建物件的時候, 直接賦值
Student stu2 = new Student("李四", 26);
System.out.println(stu2.getName() + "---" + stu2.getAge());
}
}
快快收藏啦,然后去敲敲敲...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/395442.html
標籤:其他
上一篇:java球形【sphere】定義
