封裝、構造方法、private、Static與this關鍵字、main()_Day07
1:成員變量和局部變量的區別(理解)
(1)定義位置區別:
成員變量:定義在類中,方法外。
局部變量:定義在方法中,或者方法聲明上。
(2)初始化值的區別:
成員變量:都有默認初始化值。
局部變量:沒有默認初始化值。要想使用,必須先賦值。
(3)存儲位置區別:
成員變量:存儲在堆中。
局部變量:存儲在棧中。
(4)生命周期區別:
成員變量:隨著對象的創建而存在。隨著對象的消失而消失。
局部變量:隨著方法的調用而存在,隨著方法調用完畢而消失。更嚴謹地說當局部變量的作用域結束時,即被銷毀。
(5)就近原則:局部變量有,就用局部變量,局部變量沒有,就找成員變量。如果成員變量也沒有就報錯
(6)成員變量與局部變量的區別:有所屬關系,使用成員變量,否則使用局部變量,詳細見下面的例子:
/* 成員變量與局部變量的使用區別,有所屬關系,使用成員變量,否則使用局部變量 */ class Demo3 { public static void main(String[] args) { GetSumTool gst = new GetSumTool(); System.out.println(gst.getSum(View Code2,3)); Rec rec = new Rec(); rec.height = 10; rec.width = 20; System.out.println("周長為:"+rec.getZhouChang()); System.out.println("面積為:"+rec.getMianJi()); } } //求兩個數的和的工具,第二種好,因為a與b不是這個工具必須有的屬性!沒有所屬關系! class GetSumTool { //方式一 //int a; //int b;//public int getSum(){ // return a+b; //} //方式二 public int getSum(int a,int b) { return a+b; } } //定義長方形類,求周長與面積 class Rec { //方式一 int height; int width; public int getZhouChang(){ return 2*(height+width); } public int getMianJi(){ return height*width; } //方式二 //public int getZhouChang(int height,int width){ // return 2*(height+width); //} //public int getMianJi(int height,int width){ // return height*width; //} }
2、匿名對象
(1)匿名對象是對象的簡化形式,即沒有名字直接創建的對象。
Person p=new Person; //有名字的對象,對象為p
new Person(); //沒有名字的對象
(2)匿名對象的使用:
對象方法只調用一次時。
作為實際參數傳遞時。
作為返回值返回時。
3:封裝(理解)
(1)隱藏實現的細節,提供公共的訪問方式。 類,方法等其實都是封裝的具體體現。
(2)private關鍵字
A:用於修飾成員變量和成員方法。
B:被修飾的內容在其他類中是不可以被訪問的。
(3)常見的應用:(掌握)
類中的所有成員變量私有,給出對應的get/set方法。其他的方法用Public修飾。代碼體現:
class Student { private String name; private int age; public Student(){} public Student(String name,int age) { this.name = name; this.age = age; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } }View Code
(4)定義一個封裝類的步驟:
a. 私有成員屬性
b. 至少一個空參的構造方法
c. 普通方法
d. 公共的get/set方法通常手動放在最後
(5)創建對象使用對象的步驟:
a. 定義引用類型變量用來引用對象
b.使用new關鍵字與構造方法完成對象創建
c. 在構造方法的同時對成員變量賦值
d. 使用get/set方法操作成員變量
e. 使用對象名.方法名(參數)調用對象函數
(6)創建對象時JVM所作動作:
A:棧內存開辟空間存儲引用變量
B:使用new創建內存空間
C:調用構造方法
D:成員變量默認初始化
E:成員變量顯示初始化
F:構造函數初始化
H:對象創建結束,將地址賦值給引用變量
具體過程:對象內存圖
(7)為成員變量賦值的方式:
A:使用構造方法
B:使用set方法
註意:
構造方法與set方法均能為成員變量賦值,並不沖突。
構造方法只在創建對象時進行成員變量初始化。
對象創建後由set方法依據需求修改成員變量值。
4:構造方法(掌握)
定義: 用來創建實例對象時調用的方法。
作用之一: 創建同時可以給屬性賦值
(1)格式及特點
格式:
訪問權限修飾符 類名(參數...){}
訪問權限修飾符:
public,private,一般用public
特點:
A:方法名和類名相同
B:沒有返回值類型
C:沒有具體的返回值
(2)註意事項:
A:如果你不給構造方法,jvm會自動給你一個無參構造方法。多個構造方法使用重載的方式給出。
B:如果你給出了構造方法,那麽,jvm將不再提供無參構造方法。
這個時候,你如果要使用無參構造方法:只能自己提供
推薦:永遠手動給出無參構造方法。
5:this關鍵字(掌握)
(1)是一個關鍵字。代表當前對象的引用。
//簡單記:在方法中,哪個對象調用方法,this就代表誰。
(2)應用場景:
a.解決局部變量隱藏成員變量問題,this關鍵字調用成員變量。
例子:
class Person(){ private name; //成員變量 public void eat(String name){ //局部變量 this.name=name; } } b.在構造方法中調用其他的構造方法(必須寫在第一行) this(); 例子: //定義了一個空參的構造方法 public Person(){ System.out.println("我是空參的構造方法!"); } //定義了一個有參的構造方法 public Person(String name){ this.name = name; System.out.println("我是有一個參數的構造方法!"); } //定義了兩個參數的構造方法 public Person(String name,int age) { this(name); //必須放在第一行 //this.name = name; this.age = age; System.out.println("我是有兩個參數的構造方法!"); } c.在其他方法中可以使用this.普通方法名()調用普通方法 public void showMe(){ System.out.println("name:"+this.getName()+" age:"+this.getAge()); }View Code
6:static關鍵字(理解)
(1)是一個關鍵字。可以修飾成員變量和成員方法。
(2)靜態的特點:
A:隨著類的加載而加載
B:優先於對象存在
C:被類的所有對象共享
D:可以通過類名調用
(3)靜態的註意事項:
A:在靜態方法中是沒有this關鍵字的。因為this關鍵字是對象的引用,隨對象的創建而生,而靜態方法隨著類的加載而加載,早於對象的創建。
B:靜態方法只能訪問靜態的成員變量和靜態的成員方法。因為非靜態的可能還沒有創建。
(4)靜態內容的調用:
A:被對象調用
B:被類名調用
推薦被類名調用。
(5)什麽時候該用static呢?
如果某個內容是所有對象共享的,就用靜態修飾。
(6)靜態關鍵字的內存圖:
8:主函數main()
主函數是靜態的 public static void main(String[] args){}
A.static為固定修飾,與對象無關是JVM的入口
B.public公共訪問權限允許外界調用
C.無返回值,定義返回值類型沒有意義
D.參數為String數組類型,用來接收字符串參數
E.函數名main()為JVM固定查找的字符串不能修改
F.形參名可以修改並使用
封裝、構造方法、private、Static與this關鍵字、main()_Day07