重寫(Override)和重載(Overload)java
重寫:子類對父類的容許訪問的方法的實現過程進行從新編寫, 返回值和形參都不能改變。ide
重載:方法名必須相同。形式參數個數不一樣或者參數類型不一樣。url
構造器spa
一、方法名和類名相同,且無返回值.net
二、構造器能重載,不能重寫。3d
成員訪問修飾符對象
多態blog
BaseClass b = new SubClass(); //父類對象調用子類實例繼承
形成現象的緣由:由於子類是一種特殊的父類,所以java容許把一個子類對象直接賦給一個父類引用變量。無須任何類型轉換,或者被稱爲向上轉型,向上轉型由系統自動完成。get
if(b instanceof BaseClass ){
((SubClass) b).bark(); //向上轉型後的對象只能訪問子類繼承父類的方法,非繼承方法須要經過向下轉型後才能訪問。
}
多態:相同類型的變量、調用同一個方法時呈現出多種不一樣的行爲特徵,這就是多態。
引用變量的強制類型轉換
- 基本類型之間的轉換隻能在數值類型之間進行,數值類型和布爾類型除外。
- 引用類型之間的轉換隻能在具備繼承關係的兩個類型之間進行,若是兩個沒有任何繼承關係的類型進行類型轉換。則會引起ClassCastException異常。
instanceof是Java的一個二元操做符(運算符),它的做用是判斷其左邊對象是否爲其右邊類的實例,返回的是boolean類型的數據。用它來判斷某個對象是不是某個Class類的實例。
用法:boolean result = object instanceof class ; // object是子類,class是父類。
AA a = new BB() ;
if (a instanceof BB){ //判斷前面的對象是不是後面的類的子類、實現類的實例。
BB b = (AA)a ; //將AA類強轉爲BB類
}
b.speak ; //調用的是BB類中的方法
初始化代碼塊
與構造器不一樣,初始化塊是一段固定的代碼,不能接受任何參數。基於這個原理,不難發現初始化塊的用法,若是有一段初始化處理的代碼對全部對象徹底相同,且無須接受任何參數,就能夠將這段代碼提取到代碼塊中。
初始化代碼塊老是在構造器執行以前執行。
初始化塊的修飾符只能是static
與構造器相似,建立一個java對象時,不只會執行該類的普通初始化塊和構造器,並且系統會一直上溯到java.lang.Object類。先執行java.lang.Object類的初始化,開始執行java.lang.Object的構造器,依次向下執行其父類的初始化塊,開始執行其父類的構造器,最後才執行該類的初始化塊和構造器,返回該類的對象。
靜態代碼塊
若是定義初始化塊時使用了static修飾符,則這個初始化塊就變成了靜態初始化塊,也被稱爲類初始化塊(普通初始化塊負責對對象執行初始化,類初始化則負責對類進行初始化)。靜態初始化塊是類相關的,系統將在類初始化階段執行靜態初始化塊,而不是在建立對象是才執行,所以靜態初始化塊老是比普通初始化塊先執行。
與普通初始化塊相似,系統在類初始化階段執行靜態初始化時,不只會執行本類的靜態初始化塊,還會一直上溯到Object類,先執行Object類的靜態初始化塊,而後執行其父類的靜態初始塊,最後才執行該類的靜態初始化塊。
JVM會在第一次使用某個類時,執行類初始化代碼或者聲明類成員變量時指定的初始化,它們的執行順序與源代碼中的排列順序相同。
總結:靜態代碼塊和靜態成員變量是JVM在類加載的時候就運行了,而初始化代碼塊是在對象實例化時運行,且在構造器前面運行。
NullAccessStatic nas = null;//
nas.test(); //test()方法爲類的靜態方法。即便nas實例爲null,也能夠訪問。
java四種整數數據類型的取值範圍
byte的取值範圍爲-128~127,佔用1個字節(-2的7次方到2的7次方-1)
byte佔一個字節空間,最高位是符號位,剩餘7位能表示0-127,加上符號位的正負,就是-127至+127,但負0不必,爲充分利用,就用負零表示-128(即原碼1000,0000)。(計算機轉補碼後存儲)
short的取值範圍爲-32768~32767,佔用2個字節(-2的15次方到2的15次方-1)
int的取值範圍爲(-2147483648~2147483647),佔用4個字節(-2的31次方到2的31次方-1)
long的取值範圍爲(-9223372036854774808~9223372036854774807),佔用8個字節(-2的63次方到2的63次方-1)
單例(Singleton)類
經過自定義控制,使類只產生一個對象。
final修飾符
final 修飾的實例變量,要麼在定義該實例變量時指定初始化,要麼在普通初始化塊或者構造器中爲該實例變量指定初始化。