實例變量:指每一個對象獨立的,修改其中一個對象的實例變量,不會影響其餘實例變量的值,變量值無 static 關鍵字修飾;java
類變量:是指全部對象共享的,其中一個對象把該變量的值修改了,那麼全部對象的該變量的值都修改了,使用 static 關鍵字修飾,通常使用 「類名.屬性」 來訪問;編程
靜態方法:是指使用 static 關鍵字修飾修飾的方法,通常使用 「類名.方法」 來訪問,也能夠經過 「對象.方法」 來訪問,可是不建議這樣寫!靜態方法中只能調用靜態方法和使用靜態成員,由於靜態成員和靜態方法會隨着類的加載而加載,非靜態成員或者方法的加載晚於靜態的成員和方法,故靜態方法不能調用非靜態的方法和非靜態的成員,即靜態的對靜態的;微信
非靜態方法:是指沒有使用 static 關鍵字修飾修飾的方法,通常使用 「對象.方法」 來訪問,非靜態方法中便可調用非靜態方法和使用非靜態成員也能夠調用靜態方法和使用靜態成員;app
在 Java 中,包的聲明通常寫在文件的第一行,使用關鍵字 package + 包名,其做用有:①避免重名,例如咱們有時候在調用某個類的某個方法時會發現會有相同類名的方法,這時候你就要導入你要調用的類所在的包或者使用全類名調用便可,這樣避免了重名;②用於權限控制,在同一個包下的類是能夠相互調用的,若是調用其餘包下的類,就必需要導入調用類所在的包,這樣能夠避免外部的非法調用,另外還能夠合理的使用訪問控制權限的關鍵字 public、protected、private 來進行訪問權限的設置(更多各關鍵字權限控制參考附表1);③劃分項目結構層次,使得文件管理更有條理,例如MVC、MVP模式分包;ide
靜態導入是 JDK1.5 引入的新特性,通常狀況下,咱們調用某個類中的靜態成員或靜態方法使用 「類名.屬性」 來調用,而靜態導入能夠把某個類下的靜態成員(方法和變量)使用相似導包的方式導入進來,便可以直接導入到類的成員級別(方法和變量),這樣可使被導入類的靜態變量和靜態方法在當前類直接可見,使用這些靜態成員無需使用 「類名.屬性」 的方式來調用,直接調用方法名或者屬性,像調用本身類中的方法和屬性同樣簡單。函數
靜態導入的語法是:佈局
注意導入的是靜態成員變量和方法名,另外也可導入某個類下的全部靜態成員:this
*號表明通配全部。spa
通常狀況下咱們能夠適度的使用靜態導入,不建議大量濫用,由於咱們知道 Java 是面向對象的語言,使用靜態導入調用時,缺乏了類名,即弱化了類的描述,有時候咱們不知道調用的是哪一個類的成員,可能還會思考一番,弱化了面向對象思想,致使類和類之間的調用關係不清晰!線程
在 Java 中,當建立一個對象後,Java 虛擬機就會爲其分配一個指向對象自己的指針,這個指針就是 ** this** 。this 的使用場景:①當方法的佈局變量和與實例變量重名時,須要使用 this 關鍵字來區分,若是不重名也可使用,一般不重名的狀況下不寫 this;②使用 this.方法名(參數); 來調用類的成員方法,通常狀況下不寫 this,直接調用;③使用 this(參數1…); 來調用本類中的其餘構造方法,例如在 Android 中自定義一個 View,通常都會寫 3 個重載的構造方法,單參數的構造方法中使用 this(參數1, 參數2); 來調用雙參數的構造方法,雙參數的構造方法中調用三個參數的構造方法;④ this 做爲參數傳遞,在 Android 的 Activity 中,常常會使用 this 來做爲參數傳遞;⑤在內部類或者匿名內部類中調用外部類的方法,若是在內部類中使用 this,這裏的 this 表明的是當前類自己,即內部類,要想調用外部類中的方法必須使用 外部類名.this.方法名(); 來調用;
另外使用this關鍵字要注意一下幾點:
在 Java 中,全部類的父類都是 Object,若是一個類沒有使用 extends 關鍵字來繼承父類,那麼它默認繼承的是 Object 類,子類不會繼承父類的構造方法,可是必定會調用父類的構造方法,若是沒有調用,必需要手動去調用,不然會編譯報錯;
重載即 Overload,在同一個類中,方法名相同參數列表不一樣的幾個方法稱爲重載方法;
重寫即 Override,在子父類中,子類與父類方法名稱相同,參數列表必須相同;對於返回值類型子類要麼和父類的一致,要麼是父類返回值類型的子類;對於權限修飾符,子類的權限修飾符要麼和父類的相同,要麼比父類的權限修飾符更寬泛;若是有異常拋出,子類的異常捕獲範圍要麼和父類的相同要麼比父類的異常範圍更小,即子類的異常是父類異常的子類;
關係操做符 「==」 生成的是一個boolean結果,它們計算的是操做數的值之間的關係,若是是基本數據類型,它比較的是他們值的自己,若是是引用數據類型,則比較的是對象在內存中的地址;
equals 方法是基類 Object 中的方法,全部類都直接或間接繼承於 Object類,所以全部類中都有該方法,若是沒有重寫 equals() 方法,調用 equals() 方法和使用 == 的效果同樣,也是比較的內存中的地址值;在 Java 提供的大多數類中,如 String,Double,Date,Integer等,都對equals 方法進行了重寫,用來比較指向的對象所存儲的內容是否相等,若是是咱們本身的定義的類,若是沒有重寫 equals 方法,使用 equals 默認比較的是對象在內存中的地址,要比較內容,就必需要重寫 equals 方法。
類是對一類事物的抽象描述,對象是類的實例,能夠理解爲類是汽車設計圖,對象是實實在在的生產出來的汽車,一張設計圖(類)能夠生產出來多個汽車(對象),類中包含屬性和方法,屬性描述了類所具備的特性,方法描述了類的具體功能,這樣咱們在設計類的時候就會更加註重某個類中的功能及特性,將他們抽象分裝到類中,外部在調用的時候不須要關心類中的具體實現,這樣就能夠更多的考慮類與類之間的相互關係了,這樣帶來的好處就是能夠提升對象的複用性,下降開發難度,多以所Java是面向對象的編程,即Everything is object. 對於面向對象的開發,通常來說分爲三個步驟:OOA(面向對象分析)、OOD(面向對象設計)、OOP(面向對象編程)。OOA 即根據具體的功能分析有哪些特性或者方法,OOD 即根據特性和方法抽象設計出具體的類;OOP 即創建類和類之間的相互調用的關聯關係。
變量是內存中的一塊存儲區域,它的值是變化的,不是固定的;
Java中的內存通常分爲Java虛擬機棧和堆內存,棧中通常存放的是基本數據類型和引用類型的引用變量,堆內存中存放的是對象實例,Java堆是 Java 虛擬機所管理的內存中最大的一塊,它是被全部線程共享的一塊內存區域,在虛擬機啓動時建立,能夠不是物理上的連續區域,只要邏輯上連續便可;另外還有方法區、靜態常量池、程序計數器、本地方法棧等內存分配區域的概念;
垃圾:指的是沒有任何引用所指向的對象(一塊堆內存空間),這塊空間就是垃圾,全部的垃圾都會等待GC(垃圾收集器)不按期的回收(釋放內存空間)。
更多幹貨文章關注個人微信公衆號: