05.Java面向對象

一.面向對象基本概念

面向對象的特徵

  • 封裝

封裝是指利用抽象數據類型將數據(屬性)和對數據的操做(方法)包裝起來,把對象的屬性和動做結合成一個獨立的單位,並儘量隱蔽對象的內部處理細節。java

  • 繼承

一個類擁有另外一個類的全部屬性和行爲時,就稱爲繼承。被繼承類爲父類,繼承類爲子類。併發

  • 多態

經過子類對父類方法的重寫實現多態異步

同一類中同名方法實現多態(重載方法需定義不一樣參數列表)函數

二.類的定義

Java類邏輯結構

在Java語言中,有一個頂層的類Object,它是Java中全部類的父類,在Java中稱爲基類this

訪問修飾控制符

類型 private 無或者(friendly) protected public
同一類
同一包中子類
同一包中非子類
不一樣包中子類
不一樣包中非子類

每一個源文件只能有一個public類,且類名也是源文件名。命令行

一個源文件能夠不含有公有類,此時文件名能夠任取。code

類的定義

[public][abstract | final] class Name[extends SuperName][implements InterfaceNameList]{
	//成員變量的聲明
	//成員方法的定義
}

abstract//抽象類說明符。抽象類不能直接生成對象
final//終級類說明符。終級類不能被繼承

成員變量

[public | private | protected][static][final][transient][volatile] DataType variableName[  = initializationValue]
 
final//聲明一個終極變量(即常量)
static//聲明一個靜態變量(類變量)
transient//聲明一個暫時性變量,提示Java虛擬機忽略保存
volatile//異步保護,維護變量在併發進程的先後一致性

三.方法

方法的定義

[public | private | protected][abstract]|[final][static][native][synchronized] returnDataType | void methodName(parametersList) throws exceptionList{
	//方法內變量
    //方法內主體代碼
}
native//本地化
synchronized//同步
throws exceptionList//定義方法拋出的異常對象的列表

四.對象

對象的定義

className ObjectName = new className(parameter);

匿名對象

new className(parameter)

對象的引用

引用是一個地址,指明瞭對象的的變量和方法的儲存位置。當把一個對象賦值給一個對象變量或者做爲方法的參數時,使用的並非對象自己,也不是它的拷貝,而是它的地址。對象

Student stu1 = new Student();
Student stu2 = stu1;
//stu2和stu1引用一樣的對象,stu2不是stu1的拷貝,stu2並無分配內存空間

五.實例成員和類成員

實例成員

實例成員是指在訪問成員變量和成員方法時,須要經過new建立一個實例對象,而後經過" . "操做符去引用類的成員繼承

實例成員不用static修飾進程

類成員

  • 類變量

用static修飾的變量

  • 類方法

咱們知道,無論是類方法與實例方法,都是以代碼塊的方式存在,當類的字節碼文件加載到內存時,它們在內存中均只有一個備份。但類方法與實例方法不相同的是:

(1)對類的實例方法, 當類加載到內存時,不分配人口地址。當該類建立對象後,類中的實例方法纔會被分配人口地址,從而實例方法能夠被類建立的任何對象調用執行,這我的口地址也是被全部對象共享的。

(2)對類的類方法,在該類被加載到內存時,就分配了相應的人口地址,固然這個地址在整個類中也是共享的,從而類方法不只能夠被類建立的任何對象調用執行,也能夠直接經過類名調用。

那麼Java應用程序類中的main( )方法爲何必須聲明爲static呢?這是由於只有類方法,當類加載到內存後就能夠得到該方法的人口地址,從而能夠由Java虛擬機調用執行,成爲整個應用程序的執行人口。若是把main( )方法聲明爲實例方法,這個main( )方法就沒法在類加載到內存時被Java虛擬機直接調用。

初始化器

初始化器是一段不在方法以內的程序代碼,這段代碼用{ }包圍起來。

實例初始化器:無修飾符static,在對象生成時初始化變量(通常不會使用,沒有實際意義)

靜態初始化器:有修飾符static,在被類加載入內存時只執行一次.

public class Demo {
    // constructor             構造函數
    public Demo() {
        System.out.println("constructor");
    }
    // static initializer     靜態初始化器
    static {
        System.out.println("static");
    }
    public static void main(String[] args) {
        new Demo();
    }
}
//輸出
static
constructor

實例代碼的初始化在構造方法中完成,類變量的初始化應在靜態初始化器中完成,使代碼更容易維護和閱讀。

六.命令行參數

命令行參數使用格式

//格式一
Java className parameter1 parameter2 parameter3
//格式二(當參數中包含空格時)
Java className "parameter1" "parameter2" "parameter3"
//混合使用(包含空格參數用雙引號括起來,沒空格沒必要括起來)
Java className "this is" "a command" "line parameter"

命令行參數的接收

public static void main(String [] args)
相關文章
相關標籤/搜索