title: Java基礎語法(9) 面向對象之類的成員 blog: "CSDN" data: "Java學習路線及視頻" 1.面向過程與面向對象 1. 面向過程(POP) 與 面向對象(OOP) 二者都是一種思想,面向對象是相對於面向過程而言的。面向過程,強調的是功能行為,以函數為最小單位,考慮怎 ...
title: Java基礎語法(9)-面向對象之類的成員
blog: CSDN
data: Java學習路線及視頻
![G8Shge.png](https://s1.ax1x.com/2020/04/01/G8Shge.png)
1.面向過程與面向對象
- 面向過程(POP) 與 面向對象(OOP)
-
二者都是一種思想,面向對象是相對於面向過程而言的。面向過程,強調的是功能行為,以函數為最小單位,考慮怎麼做。面向對象,將功能封裝進對象,強調具備了功能的對象,以類/對象為最小單位,考慮誰來做。
-
面向對象更加強調運用人類在日常的思維邏輯中採用的思想方法與原則,如抽象、分類、繼承、聚合、多態等。
-
面向對象的三大特征
封裝 (Encapsulation)
繼承 (Inheritance)
多態 (Polymorphism)
-
- 面向過程
![G8pdat.png](https://s1.ax1x.com/2020/04/01/G8pdat.png)
- 面向對象
![G8pRZn.png](https://s1.ax1x.com/2020/04/01/G8pRZn.png)
- 面向對象的思想概述
- 程式員從面向過程的執行者轉化成了面向對象的指揮者
- 根據問題需要,選擇問題所針對的現實世界中的實體。
- 從實體中尋找解決問題相關的屬性和功能,這些屬性和功能就形成了概念世界中的類
- 把抽象的實體用電腦語言進行描述,形成電腦世界中類的定義。即藉助某種程式語言,把類構造成電腦能夠識別和處理的數據結構。
- 將類實例化成電腦世界中的對象。對象是電腦世界中解決問題的最終工具。
2.類和對象
- 面向對象的概述
- 類(Class)和對象(Object)是面向對象的核心概念。
- 類是對一類事物的描述,是抽象的、概念上的定義
- 對象是實際存在的該類事物的每個個體,因而也稱為實例(instance)。
- “萬事萬物皆對象” (女朋友)
![G8Cpt0.png](https://s1.ax1x.com/2020/04/01/G8Cpt0.png)
- 類的語法格式
修飾符 class 類名 {
屬性聲明;
方法聲明;
}
說明:修飾符public:類可以被任意訪問類的正文要用{ }括起來
public class Person{
private int age ; //聲明私有變數 age
public void showAge(int i) { //聲明方法showAge( )
age = i;
}
}
3.對象的創建和使用
- 創建對象語法
類名 對象名 = new 類名();
Animal xb=new Animal();
- 對象的使用
對象名.對象成員的方式訪問對象成員(包括屬性和方法)
- Java中的類和對象
//Animal類
public class Animal {
public int legs;
public void eat(){
System.out.println(“Eating.”);
}
public viod move(){
System.out.println(“Move.”);
}
public class Zoo{
public static void main(String args[]){
//創建對象
Animal xb=new Animal();
xb.legs=4;//訪問屬性
System.out.println(xb.legs);
xb.eat();//訪問方法
xb.move();//訪問方法
}
}
![G8P5JP.png](https://s1.ax1x.com/2020/04/01/G8P5JP.png)
4.類的成員之一: 屬性
- 語法格式
修飾符 數據類型 屬性名 = 初始化值 ;
- 說明1: 修飾符
- 常用的許可權修飾符有:private、預設、protected、public 其他修飾符:static、final (暫不考慮)
- 說明2: 數據類型
- 任何基本數據類型(如int、Boolean) 或 任何引用數據類型。
- 說明3:屬性名
- 屬於標識符,符合命名規則和規範即可。
public class Person{
private int age; //聲明private變數 age
public String name = “Lila”; //聲明public變數 name
}
- 變數的分類:成員變數與局部變數
![G8FSAA.png](https://s1.ax1x.com/2020/04/01/G8FSAA.png)
class Person{
//1.屬性
String name;//姓名--成員變數
int age = 1;//年齡
boolean isMale;//是否是男性
public void show(String nation){
//nation:局部變數
String color;//color:局部變數
color = "yellow";
}
}
//測試類
class PersonTest{
public static void main(String[] args){
Person p = new Person();
p.show(“USA”);
}
}
- 對象屬性的預設初始化賦值
![G8FTbQ.png](https://s1.ax1x.com/2020/04/01/G8FTbQ.png)
5.類的成員之二: 方法
- 什麼是方法(method、函數):
- 方法是類或對象行為特征的抽象,用來完成某個功能操作。在某些語言中也稱為函數或過程。
- 將功能封裝為方法的目的是,可以實現代碼重用,簡化代碼
- Java里的方法不能獨立存在,所有的方法必須定義在類里。
public class Person{
private int age;
public int getAge() { //聲明方法getAge()
return age;
}
public void setAge(int i) { //聲明方法setAge
age = i; //將參數i的值賦給類的成員變數age
}
}
- 方法的聲明格式:
修飾符 返回值類型 方法名(參數類型 形參1, 參數類型 形參2, ….){
方法體程式代碼
return 返回值;
}
修飾符:public,預設,private, protected等
- 方法的分類
無返回值 | 有返回值 | |
---|---|---|
無形參 | void 方法名(){} | 返回值的類型 方法名(){} |
有形參 | void 方法名(形參列表){} | 返回值的類型 方法名(形參列表){} |
-
註意
- 方法被調用一次,就會執行一次
- 沒有具體返回值的情況,返回值類型用關鍵字void表示,那麼方法體中可以不必使用return語句。如果使用,僅用來結束方法。
- 定義方法時,方法的結果應該返回給調用者,交由調用者處理。
- 方法中只能調用方法或屬性,不可以在方法內部定義方法。
-
方法的重載
-
在同一個類中,允許存在一個以上的同名方法,只要它們的參數個數或者參數類型不同即可。
-
與返回值類型無關,只看參數列表,且參數列表必須不同。(參數個數或參數類型)。調用時,根據方法參數列表的不同來區別。
-
//返回三個整數的和
int add(int x,int y,int z){
return x+y+z;
}
- 方法中的可變個數形參
- 聲明格式:方法名(參數的類型名 ...參數名)
- 方法參數部分指定類型的參數個數是可變多個:0個,1個或多個
- 可變個數形參的方法與同名的方法之間,彼此構成重載
- 可變參數方法的使用與方法參數部分使用數組是一致的
- 方法的參數部分有可變形參,需要放在形參聲明的最後
- 在一個方法的形參位置,最多只能聲明一個可變個數形參
//可變參數
public void test(String a,int... b){
for (int i : b) {
Log.i("test:","b:" + i);
}
}
6.類的成員之三: 構造器
- 構造器的特征
- 它具有與類相同的名稱
- 它不聲明返回值類型。(與聲明為void不同)
- 不能被static、final、synchronized、abstract、native修飾,不能有return語句返回值
- 構造器的作用
- 創建對象;給對象進行初始化
Person p = new Person(“Peter”,15);
- 語法格式
修飾符 類名 (參數列表) {
初始化語句;
}
//創建Animal類的實例
//調用構造器,將legs初始化為4。
public class Animal {
private int legs;
// 構造器
public Animal() {
legs = 4;
}
public void setLegs(int i) {
legs = i;
}
public int getLegs() {
return legs;
}
- 註意
- Java語言中,每個類都至少有一個構造器
- 預設構造器的修飾符與所屬類的修飾符一致
- 一旦顯式定義了構造器,則系統不再提供預設構造器
- 一個類可以創建多個重載的構造器
- 父類的構造器不可被子類繼承
7.類的成員之四: 代碼塊
-
代碼塊的作用:
- 對Java類或對象進行初始化
-
代碼塊的分類:
- 一個類中代碼塊若有修飾符, 則只能被static修飾,稱為靜態代碼塊(static block),沒有使用static修飾的,為非靜態代碼塊
-
靜態代碼塊:用static修飾的代碼塊
- 可以有輸出語句。
- 可以對類的屬性、類的聲明進行初始化操作。
- 不可以對非靜態的屬性初始化。即:不可以調用非靜態的屬性和方法。
- 若有多個靜態的代碼塊,那麼按照從上到下的順序依次執行。
- 靜態代碼塊的執行要先於非靜態代碼塊。
- 靜態代碼塊隨著類的載入而載入,且只執行一次。
-
非靜態代碼塊:沒有static修飾的代碼塊
- 可以有輸出語句。
- 可以對類的屬性、類的聲明進行初始化操作。
- 除了調用非靜態的結構外,還可以調用靜態的變數或方法。
- 若有多個非靜態的代碼塊,那麼按照從上到下的順序依次執行。
- 每次創建對象的時候,都會執行一次。且先於構造器執行。
class Person { public static int total; static { total = 100; System.out.println("in static block!"); } } public class PersonTest { public static void main(String[] args) { System.out.println("total = " + Person.total); System.out.println("total = " + Person.total); } }
-
程式中成員變數賦值的執行順序
![G8NfGq.png](https://s1.ax1x.com/2020/04/01/G8NfGq.png)
8.類的成員之五: 內部類
- 內部類概念
- 當一個事物的內部,還有一個部分需要一個完整的結構進行描述,而這個內部的完整的結構又只為外部事物提供服務,那麼整個內部的完整結構最好使用內部類。
- 在Java中,允許一個類的定義位於另一個類的內部,前者稱為內部類,後者稱為外部類。
- 內部類的名字不能與包含它的外部類類名相同;
- 分類
- 成員內部類(static成員內部類和非static成員內部類)
- 局部內部類(不談修飾符)、匿名內部類
- 成員內部類作為類的成員的角色
- 和外部類不同,Inner class還可以聲明為private或protected;
- 可以調用外部類的結構
- Inner class 可以聲明為static的,但此時就不能再使用外層類的非static的成員變數;
- 成員內部類作為類的角色
- 可以在內部定義屬性、方法、構造器等結構
- 可以聲明為abstract類 ,因此可以被其它的內部類繼承
- 可以聲明為final的
- 編譯以後生成OuterClass$InnerClass.class位元組碼文件(也適用於局部內部類)
- 註意
- 非static的成員內部類中的成員不能聲明為static的,只有在外部類或static的成員內部類中才可聲明static成員。
- 外部類訪問成員內部類的成員,需要“內部類.成員”或“內部類對象.成員”的方式
- 成員內部類可以直接使用外部類的所有成員,包括私有的數據
- 當想要在外部類的靜態成員部分使用內部類時,可以考慮內部類聲明為靜態的
class Outer {
private int s;
public class Inner {
public void mb() {
s = 100;
System.out.println("在內部類Inner中s=" + s);
}
}
public void ma() {
Inner i = new Inner();
i.mb();
}
}
public class InnerTest {
public static void main(String args[]) {
Outer o = new Outer();
o.ma();
}
}
9.結語
![8qXr3n.png](https://s1.ax1x.com/2020/03/24/8qXr3n.png)
2020-3-31: Java基礎語法(6)-註釋
2020-3-31: Java基礎語法(7)-數組
-
今日好文推薦
-
今日資料推薦