Java基礎語法(9)-面向對象之類的成員

title: Java基礎語法(9)-面向對象之類的成員 html

blog: CSDNjava

data: Java學習路線及視頻程序員

G8Shge.png

1.面向過程與面向對象

  1. 面向過程(POP) 與 面向對象(OOP)
  • 兩者都是一種思想,面向對象是相對於面向過程而言的。面向過程,強調的是功能行爲,以函數爲最小單位,考慮怎麼作。面向對象,將功能封裝進對象,強調具有了功能的對象,以類/對象爲最小單位,考慮誰來作數組

  • 面向對象更增強調運用人類在平常的思惟邏輯中採用的思想方法與原則,如抽象、分類、繼承、聚合、多態等。數據結構

    • 面向對象的三大特徵函數

      ​ 封裝 (Encapsulation)工具

      ​ 繼承 (Inheritance)學習

      ​ 多態 (Polymorphism)測試

  1. 面向過程
G8pdat.png
  1. 面向對象
G8pRZn.png
  1. 面向對象的思想概述
  • 程序員從面向過程的執行者轉化成了面向對象的指揮者
  • 根據問題須要,選擇問題所針對的現實世界中的實體
  • 從實體中尋找解決問題相關的屬性和功能,這些屬性和功能就造成了概念世界中的類
  • 把抽象的實體用計算機語言進行描述,造成計算機世界中類的定義。即藉助某種程序語言,把類構形成計算機可以識別和處理的數據結構。
  • 類實例化成計算機世界中的對象。對象是計算機世界中解決問題的最終工具。

2.類和對象

  1. 面向對象的概述
  • 類(Class)對象(Object)是面向對象的核心概念。
  • 類是對一類事物的描述,是抽象的、概念上的定義
  • 對象是實際存在的該類事物的每一個個體,於是也稱爲實例(instance)。
  • 「萬事萬物皆對象」 (女友)
G8Cpt0.png
  1. 類的語法格式
修飾符 class  類名 {
	屬性聲明;
	方法聲明;
}
說明:修飾符public:類能夠被任意訪問類的正文要用{  }括起來
public class Person{
	private int age ;	//聲明私有變量 age 
	public void showAge(int i) { //聲明方法showAge( )
		age = i;
 	}
}

3.對象的建立和使用

  1. 建立對象語法
類名 對象名 = new 類名();
Animal xb=new Animal();
  1. 對象的使用
對象名.對象成員的方式訪問對象成員(包括屬性和方法)
  1. 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

4.類的成員之一: 屬性

  1. 語法格式

修飾符 數據類型 屬性名 = 初始化值 ;.net

  • 說明1: 修飾符
    • 經常使用的權限修飾符有:private、缺省、protected、public 其餘修飾符:static、final (暫不考慮)
  • 說明2: 數據類型
    • 任何基本數據類型(如int、Boolean) 或 任何引用數據類型。
  • 說明3:屬性名
    • 屬於標識符,符合命名規則和規範便可。
public class Person{
	private int age;	//聲明private變量 age
	public String name = 「Lila」;	//聲明public變量 name
}
  1. 變量的分類:成員變量與局部變量
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」);
	}
}
  1. 對象屬性的默認初始化賦值
G8FTbQ.png

5.類的成員之二: 方法

  1. 什麼是方法(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. 方法的聲明格式:
修飾符 返回值類型 方法名(參數類型 形參1, 參數類型 形參2, ….){
	方法體程序代碼
	return 返回值;
}

修飾符:public,缺省,private, protected等
  1. 方法的分類
無返回值 有返回值
無形參 void 方法名(){} 返回值的類型 方法名(){}
有形參 void 方法名(形參列表){} 返回值的類型 方法名(形參列表){}
  1. 注意

    • 方法被調用一次,就會執行一次
    • 沒有具體返回值的狀況,返回值類型用關鍵字void表示,那麼方法體中能夠沒必要使用return語句。若是使用,僅用來結束方法。
    • 定義方法時,方法的結果應該返回給調用者,交由調用者處理。
    • 方法中只能調用方法或屬性,不能夠在方法內部定義方法。
  2. 方法的重載

    • 在同一個類中,容許存在一個以上的同名方法,只要它們的參數個數或者參數類型不一樣便可。

    • 與返回值類型無關,只看參數列表,且參數列表必須不一樣。(參數個數或參數類型)。調用時,根據方法參數列表的不一樣來區別。

//返回三個整數的和
int add(int x,int y,int z){
	return x+y+z;
}
  1. 方法中的可變個數形參
  • 聲明格式:方法名(參數的類型名 ...參數名)
  • 方法參數部分指定類型的參數個數是可變多個:0個,1個或多個
  • 可變個數形參的方法與同名的方法之間,彼此構成重載
  • 可變參數方法的使用與方法參數部分使用數組是一致的
  • 方法的參數部分有可變形參,須要放在形參聲明的最後
  • 在一個方法的形參位置,最多隻能聲明一個可變個數形參
//可變參數
public void test(String a,int... b){
  	for (int i : b) {
       Log.i("test:","b:" + i);
     }
}

6.類的成員之三: 構造器

  1. 構造器的特徵
    • 它具備與類相同的名稱
    • 它不聲明返回值類型。(與聲明爲void不一樣)
    • 不能被static、final、synchronized、abstract、native修飾,不能有return語句返回值
  2. 構造器的做用
    • 建立對象;給對象進行初始化
Person p = new Person(「Peter」,15);
  1. 語法格式
修飾符	類名 (參數列表) {
	初始化語句;
}
//建立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;
}
  1. 注意
    • Java語言中,每一個類都至少有一個構造器
    • 默認構造器的修飾符與所屬類的修飾符一致
    • 一旦顯式定義了構造器,則系統再也不提供默認構造器
    • 一個類能夠建立多個重載的構造器
    • 父類的構造器不可被子類繼承

7.類的成員之四: 代碼塊

  1. 代碼塊的做用

    • 對Java類或對象進行初始化
  2. 代碼塊的分類:

    • 一個類中代碼塊如有修飾符, 則只能被static修飾,稱爲靜態代碼塊(static block),沒有使用static修飾的,爲非靜態代碼塊
  3. 靜態代碼塊:用static修飾的代碼塊

    • 能夠有輸出語句。
    • 能夠對類的屬性、類的聲明進行初始化操做。
    • 不能夠對非靜態的屬性初始化。即:不能夠調用非靜態的屬性和方法。
    • 如有多個靜態的代碼塊,那麼按照從上到下的順序依次執行。
    • 靜態代碼塊的執行要先於非靜態代碼塊。
    • 靜態代碼塊隨着類的加載而加載,且只執行一次。
  4. 非靜態代碼塊:沒有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);
    	}
    }
  5. 程序中成員變量賦值的執行順序

G8NfGq.png

8.類的成員之五: 內部類

  1. 內部類概念
  • 當一個事物的內部,還有一個部分須要一個完整的結構進行描述,而這個內部的完整的結構又只爲外部事物提供服務,那麼整個內部的完整結構最好使用內部類。
  • 在Java中,容許一個類的定義位於另外一個類的內部,前者稱爲內部類,後者稱爲外部類
  • 內部類的名字不能與包含它的外部類類名相同;
  1. 分類
  • 成員內部類(static成員內部類和非static成員內部類)
  • 局部內部類(不談修飾符)、匿名內部類
  1. 成員內部類做爲類的成員的角色
  • 和外部類不一樣,Inner class還能夠聲明爲privateprotected
  • 能夠調用外部類的結構
  • Inner class 能夠聲明爲static的,但此時就不能再使用外層類的非static的成員變量;
  1. 成員內部類做爲類的角色
  • 能夠在內部定義屬性、方法、構造器等結構
  • 能夠聲明爲abstract類 ,所以能夠被其它的內部類繼承
  • 能夠聲明爲final
  • 編譯之後生成OuterClass$InnerClass.class字節碼文件(也適用於局部內部類)
  1. 注意
  • 非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

2020-3-31: Java基礎語法(6)-註釋

2020-3-31: Java基礎語法(7)-數組

相關文章
相關標籤/搜索