標籤:java基礎編程 黑馬程式員 java
黑馬程式員--java基礎學習筆記6 一、筆記內容概述: 物件導向(概述&舉例)、類與對象的之間的關係、類與對象體現&細節、對象的記憶體體現、成員變數和局部變數的區別、類型別參數、匿名對象、基礎資料型別 (Elementary Data Type)參數傳遞圖解、引用資料類型參數傳遞圖解、封裝&程式碼範例、物件導向(封裝&思想)、二維數組&定義方式&記憶體配置圖解&另一種定義方式&應用情境。 二、常用內容介紹: 1.物件導向的特徵: a.封裝:將具體動作封裝起來,方便調用,提高了代碼的複用性和安全性。 b.繼承:繼承某個類後,可以直接調用父類的方法,或者是覆寫父類的方法,以提高類的功能拓展性。 c.多態:一個類以多種形式存在。比如說等邊直角三角形,既屬於直角三角形,又屬於等腰三角形,但是指的 都是同一個事物。 2.類與對象的關係: java中描述事物通過類的形式體現,類是具體事物的抽象,概念上的定義。 對象即是該類事物實實在在存在的個體。 3.成員變數和局部變數的區別: 成員變數: a.成員變數定義在類中,在整個類中都可以被訪問。 b.成員變數隨著對象的建立而建立,隨著對象的消失而消失,存在於對象所在的 堆記憶體當中。 c.成員變數有預設初始化值。 局部變數: a.局部變數只定義在局部範圍內,如:函數內,語句內等,只在所屬的地區有效。 b.局部變數存在於棧記憶體中,作用的範圍結束,變數空間就會自動釋放。 c.局部變數沒有預設初始化值。 4.new關鍵字: 只要是通過new操作符定義的實體就會在堆記憶體中開闢一個新的空間, 並且每個對象都有一份屬於自己的屬性,所以後期出現單例設計模式 模式,保證記憶體中只存在一個該實體物件,以提高效能,節省記憶體空間。 5.先有類?還是先有對象?java中通過類new來建立一個對象,所以先有類,後有對象。 6.double資料類型預設值是0.0,int資料類型的預設值是0,引用資料類型的預設值為null。 三、經典樣本及講解: 1.二維數組的定義:
package com.date6;/** *理解這種二維數組的模式 */public class Test1 {public static void main(String[] args) {int[][] arr = new int[][]{{1,2,3},{4,5,6}};for(int i=0;i<2;i++){for(int j=0;j<3;j++){System.out.print(arr[i][j]+"\t");}System.out.println();}}} 輸出效果:
2.二維數組的一些屬性:
package com.date6;public class Test2 {public static void main(String[] args) {int[][] arr = new int[3][];System.out.println(arr);System.out.println(arr[0]);//輸出null,因為沒有對它進行初始化System.out.println(arr[0][0]);//由於arr[0]數組為空白,如果再查一位元組的元素,//肯定會報null 指標NullPointerException異常}} 輸出效果:
3.理解鎖裝的表現:
package com.date6;/** *封裝:是指隱藏對象的屬性和實現細節,僅對外提供公用的訪問方式。 * *好處: *將變化隔離,便於使用,提高重用性,提高安全性。 * *封裝原則: *1.將不需要對外提供的內容都隱藏起來。 *2.把屬性都隱藏,提供公用方法對其訪問。如,getXXX,setXXX。 * *1.私人僅僅是封裝的一種體現而已。 *2.private關鍵字:是一個許可權修飾符,用於修飾成員(成員變數和成員函數),被私人化的成員只在本類中有效。 *3.常用情境之一:將成員變數私人化,對外提供對應的set、get方法對其進行訪問,提高對資料的安全性 * java中最小的封裝體就是函數,類、架構也是封裝體。 */class Person{//private:私人,是一個許可權修飾符,用於修飾//不希望別人直接存取賦值,需要通過私人化把屬性進行隱藏private int age;//提供set、get公用方法對其訪問public void setAge(int a){//在set方法內可以對屬性的賦值進行限制if(a>0 && a<130){age = a;}else{System.out.println("錯誤的資料");}}public int getAge(){return age;}void speak(){System.out.println("age="+age);}}public class Test8 {public static void main(String[] args) {Person p = new Person();//通過其他方式訪問p.setAge(20);p.speak();//賦值不合法,set方法就不允許成功賦值p.setAge(-20);}} 4.匿名對象的使用:
package com.date6;/** * 匿名對象兩種使用方式: * 1.當對對象方法僅進行一次調用時。 * 2.匿名對象可以作為實際參數進行傳遞。 */class Car{static String color = "red";static int num = 4;public static void run(){System.out.println("function run is running");}public static void show(){System.out.println(num+"..."+color);}}public class Test5 {public static void main(String[] args) {//對對象方法僅進行一次調用時,就可以使用匿名對象new Car().show();//匿名對象可以作為實際參數進行傳遞show(new Car());}public static void show(Car car) {car.color = "black";car.num = 3;System.out.println("function show is running!");System.out.println(car.num+"..."+car.color);}} 5.基礎資料型別 (Elementary Data Type)參數在函數中傳遞的特點:
package com.date6;/** *基礎資料型別 (Elementary Data Type)參數傳遞 *1.jvm調用main方法,main方法入棧。 *2.將x變數值設定為3。 *3.main方法調用show方法,3作為基礎資料型別 (Elementary Data Type)參數賦值給show方法參數x, *也就是說,此時show方法的參數x值為3。 *4.show方法執行x = 4後,show方法的參數x值變成4。 *5.show方法執行結束,show方法出棧。show方法參數x也隨之出棧。 *6.main方法列印x的值。此時x指的是main方法中的x變數的值(show方法 *中的參數x已經隨show方法一塊出棧了)。所以,列印出來的x值為3而不是4。 *7.main方法執行結束,出棧。 */public class Test6 {public static void main(String[] args) {int x = 3;show(x);System.out.println("x="+x);}///下面兩種方式列印的x值都是3//方式一public static int show(int x){x = 4;return x;}//方式二public static void show1(int x){x = 4;}} 6.引用資料類型參數在函數中傳遞的特點:
package com.date6;//引用資料類型參數傳遞/** *執行過程說明: * 1.jvm調用main方法,main方法入棧。 * 2.建立一個Test7對象d(在堆記憶體中建立,d作為引用變數,指向堆記憶體中建立的實體物件),並 * 將d指向的實體物件中的屬性x的值設定為9. * 3.main方法調用show方法,d作為引用資料類型參數賦值給show方法參數t,也就是說,此時 * show方法的參數t和main方法中的變數d同時指向了堆記憶體中的同一個實體物件。 * 4.通過t.x調用堆記憶體當中的屬性,並修改其值為4。 * 5.show方法結束,t的生命週期結束,show方法出棧,但是實際上它已經將堆記憶體當中的屬性值改變了, * 同時由於main方法的變數d依然引用著堆記憶體中的實體物件,因此堆記憶體中的實體物件不會被記憶體回收行程清除。 * 6.main方法列印d.x的值,此時d指向堆記憶體當中的那個被修改的對象的引用變數x,明顯輸出結果為4,而不是9。 * 7.main方法結束,出棧,同時如果堆記憶體中的那個對象沒有被調用,將會被jvm的記憶體回收行程 * 回收。 * * 總結: * 在java中,方法參數的傳遞永遠都是傳值,而這個值,對於基礎資料型別 (Elementary Data Type),值就是你賦給變數的那個值。 * 而對於引用資料類型,這個值是對象的引用,而不是這個對象本身。 */public class Test7 {int x = 3;public static void main(String[] args){Test7 d = new Test7();d.x = 9;show(d);System.out.println(d.x);}//下面兩種方式列印x的結果都是4//方式一public static void show(Test7 t){t.x = 4;}//方式二public static int show1(Test7 t){t.x = 4;return t.x;}}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
黑馬程式員--java基礎學習筆記6