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