1. 程式人生 > >java----day_13(面向物件)

java----day_13(面向物件)

目錄

final

static

匿名物件

內部類

包的宣告與訪問

四種訪問修飾符

程式碼塊


  • final

    繼承可以重寫父類的成員變數和方法,但如果一個類在描述完了之後,不想被繼承或者重寫其中的某一個方法,可以用final關鍵字來解決,final是個修飾符,它可以用來修飾類,類的成員,以及區域性變數。

  •  final修飾類不可以被繼承,但是可以繼承其他類。
  • final修飾的方法不可以被覆蓋,但父類中沒有被final修飾方法,子類覆蓋後可以加final。
  • final修飾的變數稱為常量,這些變數只能賦值一次。
  • 引用型別的變數值為物件地址值,地址值不能更改,但是地址內的物件屬性值可以修改。
  • 修飾成員變數,需要在建立物件前賦值,否則報錯。
  • static

    static它是靜態修飾符,一般用來修飾類中的成員。static修飾的成員變數或方法,可以直接用類名來呼叫

  •     被static修飾的成員變數屬於類,不屬於這個類的某個物件(也就是說,多個物件在訪問或修改static修飾的成員變數時,其中一個物件將static成員變數值進行了修改,其他物件中的static成員變數值跟著改變,即多個物件共享同一個static
    成員變數)。
  • 被static修飾的成員可以並且建議通過類名直接訪問。
  • 靜態內容是優先於物件存在,只能訪問靜態,不能使用this/super。靜態修飾的內容存於靜態區。
  • 同一個類中,靜態成員只能訪問靜態成員
  • main方法為靜態方法僅僅為程式執行入口,它不屬於任何一個物件,可以定義在任意類中。
  • 開發中,我們想在類中定義一個靜態常量,通常使用public static final修飾的變數來完成定義。此時變數名用全部大寫,多個單詞使用下劃線連線。

class Company {
	public static final String COMPANY_NAME = "傳智播客";
	public static void method(){
		System.out.println("一個靜態方法");
	}
}

 

  1. 注意:
  •     介面中的每個成員變數都預設使用public static final修飾。
  •     所有介面中的成員變數已是靜態常量,由於介面沒有構造方法,所以必須顯示賦值。可以直接用介面名訪問。
  • 匿名物件

    匿名物件是指建立物件時,只有建立物件的語句,卻沒有把物件地址值賦值給某個變數。適合只需要呼叫不需要賦值的語句,如:已經存在的類:

new Person().eat()
  • 建立匿名物件直接使用,沒有變數名。
  • 匿名物件在沒有指定其引用變數時,只能使用一次。
  • 匿名物件可以作為方法接收的引數、方法返回值使用
  • 內部類

    將類寫在其他類的內部,可以寫在其他類的成員位置和區域性位置,這時寫在其他類內部的類就稱為內部類。其他類也稱為外部類。

class 汽車 { //外部類
	class 發動機 { //內部類
}
}

    在描述事物時,若一個事物內部還包含其他可能包含的事物,比如在描述汽車時,汽車中還包含這發動機,這時發動機就可以使用內部類來描述。

    內部類分為成員內部類與區域性內部類。

  • 成員內部類

定義在外部類中的成員位置。與類中的成員變數相似,可通過外部類物件進行訪問

//定義格式
class 外部類 { 
	修飾符 class 內部類 {
		//其他程式碼
    }
}

//訪問方式
外部類名.內部類名 變數名 = new 外部類名().new 內部類名();
  •  區域性內部類

定義在外部類方法中的區域性位置。與訪問方法中的區域性變數相似,可通過呼叫方法進行訪問

//定義格式
class 外部類 { 
	修飾符 返回值型別 方法名(引數) {
        class 內部類 {
//其他程式碼
        }
    }
}

//訪問方式

在外部類方法中,建立內部類物件進行訪問
  • 匿名內部類

內部類是為了應對更為複雜的類間關係。檢視原始碼中會涉及到,而在日常業務中很難遇到,這裡不做贅述。

最常用到的內部類就是匿名內部類,它是區域性內部類的一種。

定義的匿名內部類有兩個含義:

  • 臨時定義某一指定型別的子類
  • 定義後即刻建立剛剛定義的這個子類的物件

使用匿名物件的方式,將定義子類與建立子類物件兩個步驟由一個格式一次完成,。雖然是兩個步驟,但是兩個步驟是連在一起完成的。

new Person(){
	public void eat() {
		System.out.println(“我吃了”);
}
}.eat();
  • 包的宣告與訪問

    java的包,其實就是我們電腦系統中的資料夾,包裡存放的是類檔案。

當類檔案很多的時候,通常我們會採用多個包進行存放管理他們,這種方式稱為分包管理。

在專案中,我們將相同功能的類放到一個包中,方便管理。並且日常專案的分工也是以包作為邊界。

類中宣告的包必須與實際class檔案所在的資料夾情況相一致,即類宣告在a包下,則生成的.class檔案必須在a資料夾下,否則,程式執行時會找不到類。

//類中包的宣告格式: 
package 包名.包名.包名…;

//訪問
包名.包名….類名

//import導包
import 包名.類名;
import java.util.Random;
import java.util.Scanner;
  • 四種訪問修飾符

 

public

protected

default

private

同一類中

同一包中(子類與無關類)

 

不同包的子類

 

 

不同包中的無關類

 

 

 

在日常開發過程中,編寫的類、方法、成員變數的訪問

  1. 要想僅能在本類中訪問使用private修飾;
  2. 要想本包中的類都可以訪問不加修飾符即可;
  3. 要想本包中的類與其他包中的子類可以訪問使用protected修飾
  4. 要想所有包中的所有類都可以訪問使用public修飾。
  • 注意:如果類用public修飾,則類名必須與檔名相同。一個檔案中只能有一個public修飾的類。
  • 程式碼塊

  1. 以”{}”劃定的程式碼區域,此時只需要關注作用域的不同即可
  2. 方法和類都是以程式碼塊的方式劃定邊界的
  • 構造程式碼塊是定義在類中成員位置的程式碼塊
  • 特點:
  1. 優先於構造方法執行,構造程式碼塊用於執行所有物件均需要的初始化動作
  2. 每建立一個物件均會執行一次構造程式碼塊。
  • 靜態程式碼塊是定義在成員位置,使用static修飾的程式碼塊。
  • 特點:
  1. 它優先於主方法執行、優先於構造程式碼塊執行,當以任意形式第一次使用到該類時執行。
  2. 該類不管建立多少物件,靜態程式碼塊只執行一次。
  3. 可用於給靜態變數賦值,用來給類進行初始化。