【文章內容簡介】
ff。 long l = max + max + 2。 ( l )。// 0eg2:二進制運算(拼接與拆分)int b1 = 192。 int b2 = 168。 int b3 = 1。 int b4 = 10。 int color = 0xD87455。int ip = (b124) + (b216) + (b38) + b4。 // 或者ip = (b124) | (b216) | (b38) | b4。int b = coloramp。0xff。 // 85 int g = (color 8)amp。0xff。 // 116 int r = (color 16)amp。0xff。// 216 Java基礎其他注意事項v Java程序嚴格區(qū)分大小寫。v 類名,每個單詞首字母必須大寫(公司規(guī)范!)。v 一個Java應用程序,有且只有一個main方法,作為程序的入口點。v 每一條Java語句必須以分號結束。v 類定義關鍵字class前面可以有修飾符(如public),如果前面的修飾符是public,該類的類名必須要與這個類所在的源文件名稱相同。v 注意程序的縮進。v double a[] = new double[2]。 //語法可以,但企業(yè)中一定不要這么寫,Java中[]建議放前面。v Java中所有范圍參數(shù)都是包含0,不包含結束,如int n = (26)。 //生成0到26范圍內的隨機數(shù),不包括26。v 任何數(shù)據(jù)在內存中都是2進制的數(shù)據(jù),內存中沒有10進制16進制。v int n = (str)。//將字符串 int 整數(shù)。v ((maxL))。 。v 程序:數(shù)據(jù)+算法 數(shù)據(jù)即為變量,算法為數(shù)據(jù)的操作步驟,如:順序、選擇、循環(huán)。v 字符串按編碼大小排序。面向對象Object:對象,東西,一切皆對象 = = 啥都是東西面向對象核心:封裝、繼承、多態(tài)。1) 是同類型東西的概念,是對現(xiàn)實生活中事物的描述,映射到Java中描述就是class定義的類。類是對象的模板、圖紙,是對象的數(shù)據(jù)結構定義。簡單說就是“名詞”。2) 其實定義類,就是在描述事物,就是在定義屬性(變量)和方法(函數(shù))。3) 類中可以聲明:屬性,方法,構造器;屬性(變量)分為:實例變量,局部變量;實例變量:用于聲明對象的結構的,在創(chuàng)建對象時候分配內存,每個對象有一份!實例變量(對象屬性)在堆中分配,并作用于整個類中,實例變量有默認值,不初始化也能參與運算;局部變量在棧中分配,作用于方法或語句中,必須初始化,有值才能運算。4) 類與類之間的關系:①關聯(lián):一個類作為另一個類的成員變量:需要另一個類來共同完成。class A { pulic B b } class B {} ②繼承:class B extends A {} class A {} ③依賴:個別方法和另一個類相關。class A { public void f(B b) {}//參數(shù)里有B public B g() {}//返回值里有B } class B {}5)null與空指針異常:引用類型變量用于存放對象的地址,可以給引用類型賦值為null,表示不指向任何對象。當某個引用類型變量為null時無法對對象實施訪問(因為它沒有指向任何對象)。此時,如果通過引用訪問成員變量或調用方法,會產生NullPointerException空指針異常。u 注意事項:除了8中基本類型,其他都是引用類型變量(也叫句柄)。是這類事物實實在在存在的個體!利用類做為模板創(chuàng)建的個體實例,本質是數(shù)據(jù)。匿名對象:使用方式一:當對對象的方法只調用一次時,可用匿名對象來完成,這樣比較簡化。如果對一個對象進行多個成員調用,則必須給這個對象起個名字。 使用方式二:可以將匿名對象作為實際參數(shù)進行傳遞。1) 包名必須是小寫,多個單詞用“.”隔開。在同一個包中,不能有同名的類!2) 只要在同一個包中,則可直接用extends(類型互知道在哪),若不在同一個包中,則用import導入。是用于對當前對象數(shù)據(jù)進行算法計算,實現(xiàn)業(yè)務功能。方法是對象的功能,對象的動作,對象的行為??傊莿釉~!方法名沒有規(guī)定,建議首單詞為小寫動詞,其他單詞首字母大寫。必須定義返回值!可有無參數(shù)方法。方法調用只有兩種方式:①對象引用調用②類名調用(即靜態(tài)類時)。是對個體的標識名稱。1)是代詞,是對象的引用,就像拴著對象的繩子。2)引用本身不是對象!引用指代了對象!3)引用的值是對象的地址值(或叫句柄),通過地址值引用了對象。4)引用的值不是對象!u 注意事項:“.”叫取成員運算,可以理解為“的”。(封裝)封裝:將數(shù)據(jù)封裝到類的內部,將算法封裝到方法中。1)封裝原則:將不需要對外提供的內容都隱藏起來,把屬性都隱藏,提供公共方法對其訪問,通常有兩種訪問方式:set 設置,get 獲取。2)封裝結果:存在但是不可見。3)public:任何位置可見,可以修飾:類、成員屬性、成員方法、內部類、跨包訪問類(需要使用import語句導入),成員屬性 = = 成員變量。4)protected:當前包中可見,子類中可見。可以修飾:成員屬性、成員方法、內部類(只能在類體中使用,不能修飾類)。5)默認的:當前包內部可見,就是沒有任何修飾詞,可以修飾:類、成員屬性、成員方法、內部類,但在實際項目中很少使用。默認類(包內類)的訪問范圍:當前包內部可見,不能在其他包中訪問類,訪問受限!main方法若定在默認類中JVM將找不到,無法執(zhí)行,因此必定在public類中。6)private:僅僅在類內部可見??梢孕揎棧撼蓡T屬性、成員方法、內部類(只能在類體中使用,不能修飾類)。私有的方法不能繼承,也不能重寫。u 注意事項:在企業(yè)項目中建議:所有類都是公用類。封裝的類使用內部類!用于創(chuàng)建對象并初始化對象屬性的方法,叫“構造方法”,也叫“構造器”;構造器在類中定義。1) 構造器的名稱必須與類名同名,包括大小寫。2) 構造器沒有返回值,但也不能寫void,也不能寫return。3) 構造器的參數(shù):一般是初始化對象的前提條件。4) 用new調用!且對象一建立,構造器就運行且僅運行一次。一般方法可被調用多次。5) 類一定有構造器!這是真的,不需要質疑!6) 如果類沒有聲明(定義)任何的構造器,Java編譯器會自動插入默認構造器!7) 默認構造是無參數(shù),方法體是空的構造器,且默認構造器的訪問權限隨著所屬類的訪問權限變化而變化。如,若類被public修飾,則默認構造器也帶public修飾符。8) 默認構造器是看不到的,一旦自己寫上構造器則默認構造器就沒有了,自己寫的叫自定義構造器,即便自己寫的是空參數(shù)的構造器,也是自定義構造器,而不是默認構造器。9) 如果類聲明了構造器,Java編譯器將不再提供默認構造器。若沒手動寫出無參構造器,但卻調用了無參構造器,將會報錯!eg:默認構造器 public class Demo { public static void main(String[] args) { Foo foo = new Foo()。//調用了javac自動添加的默認構造器! //Koo koo = new Koo()。//編譯錯誤,沒有Koo()構造器 Koo koo = new Koo(8)。 } } class Foo { } //Foo有構造器,有無參數(shù)的默認構造器! class Koo { public Koo(int a) { //聲明了有參數(shù)構造器 (Call Koo(int))。 } }10) 構造器是可以重載的,重載的目的是為了使用方便,重載規(guī)則與方法重載規(guī)則相同。 11) 構造器是不能繼承的!雖說是叫構造方法,但實際上它不是常說的一般方法。 12) 子類繼承父類,那么子類型構造器默認調用父類型的無參數(shù)構造器。13) 子類構造器一定要調用父類構造器,如果父類沒有無參數(shù)構造器,則必須使用super(有參數(shù)的),來調用父類有參的構造器。 那么,為什么子類一定要訪問父類的構造器?因為父類中的數(shù)據(jù)子類可以直接獲取。所以子類對象在建立時,需要先查看父類是如何對這些數(shù)據(jù)進行初始化的,所以子類在對象初始化時,要先訪問一下父類中的構造器。總之,子類中至少會有一個構造器會訪問父類中的構造器,且子類中每一個構造函數(shù)內的第一行都有一句隱式super()。 super()、super.和 this()、this.1) this:在運行期間,哪個對象在調用this所在的方法,this就代表哪個對象,隱含綁定到當前“這個對象”。2) super():調用父類無參構造器,一定在子類構造器第一行使用!如果沒有則是默認存在super()的!這是Java默認添加的super()。3) super.是訪問父類對象,父類對象的引用,與this.用法一致4) this():調用本類的其他構造器,按照參數(shù)調用構造器,必須在構造器中使用,必須在第一行使用,this() 與 super() 互斥,不能同時存在5) this.是訪問當前對象,本類對象的引用,在能區(qū)別實例變量和局部變量時,this可省略,否則一定不能?。?) 如果子父類中出現(xiàn)非私有的同名成員變量時,子類要訪問本類中的變量用this. ;子類要訪問父類中的同名變量用super. 。eg1:方法參數(shù)傳遞原理 與 this關鍵字eg2:this. 和 this() Cell c = new Cell()。 ( + ,+)。 class Cell { int x。 int y。 public Cell() { this(1,1)。//調用本類的其他構造器 } public Cell( int x, int y) { = x 。 = y。 } }eg3:super() class Xoo{ public Xoo(int s) { (Call Xoo(int))。 } } //super()用于在子類構造器中調用父類的構造器 class Yoo extends Xoo{ //public Yoo() {}//編譯錯誤,子類調用不到父類型無參數(shù)構造器 public Yoo(){//super()。//編譯錯誤,子類調用不到父類型無參數(shù)構造器 super(100)。//super(100) 調用了父類 Xoo(int) 構造器 } }1)重寫:通過類的繼承關系,由于父類中的方法不能滿足新的要求,因此需要在子類中修改從父類中繼承的方法叫重寫(覆蓋)。①方法名、參數(shù)列表、返回值類型與父類的一模一樣,但方法的實現(xiàn)不同。若方法名、參數(shù)列表相同,但返回值類型不同會有變異錯誤!若方法名、返回值類型相同,參數(shù)列表不同,則不叫重寫了。 ②子類若繼承了抽象類或實現(xiàn)了接口,則必須重寫全部的抽象方法。若沒有全部實現(xiàn)抽象方法,則子類仍是一個抽象類!③子類重寫抽象類中的抽象方法或接口的方法時,訪問權限修飾符一定要大于或等于被重寫的抽象方法的訪問權限修飾符?、莒o態(tài)方法只能重寫靜態(tài)方法!2)重載:方法名一樣,參數(shù)列表不同的方法構成重載的方法(多態(tài)的一種形式)。①調用方法:根據(jù)參數(shù)列表和方法名調用不同方法。②與返回值類型無關。③重載遵循所謂“編譯期綁定”,即在編譯時根據(jù)參數(shù)變量的類型判斷應調用哪個方法。 eg:重載 int[] ary1 = {39。A39。,39。B39。,39。C39。}。 char[] ary2 = {39。A39。, 39。B39。, 39。C39。}。 (ary1)。//println(Object)//按對象調用,結果為地址值,沒有println(int[]) (ary2)。//println(char[]) ABC (39。中39。)。//println(char) 中 ((int)39。中39。)。//println(int) 20013父子概念的繼承:圓繼承于圖形,圓是子概念(子類型 Sub class)圖形是父類型(Super Class也叫超類),繼承在語法方面的好處:子類共享了父類的屬性和方法的定義,子類復用了父類的屬性和方法,節(jié)省了代碼。1) 繼承是is a :“是”我中的一種,一種所屬關系。2) 子類型對象可以賦值給父類型變量(多態(tài)的一種形式),變量是代詞,父類型代詞可以引用子類型東西。3) 繼承只能是單繼承,即直接繼承,而非間接繼承。因為多繼承容易帶來安全隱患,當多個父類中定義了相同功能,當功能內容不同時,子類無法確定要運行哪一個。4) 父類不能強轉成子類,會造型異常!子類向父類轉化是隱式的。5) 只有變量的類型定義的屬性和方法才能被訪問!見下例。6) 重寫遵循所謂“運行期綁定”,即在運行的時候根據(jù)引用變量指向的實際對象類型調用方法。eg:Shape s,s只能訪問Shape上聲明的屬性和方法 Circle c = new Circle(3,4,5)。 Shape s = c。//父類型變量s引用了子類型實例 //s 和 c引用了同一個對象new Circle(3,4,5) ()。 ()。 (