標籤:需要 http idt 修飾符 舉例 this關鍵字 並且 set 成員
1.JavaBean的特點:
- private 成員屬性
- public成員方法
- 有get/set方法對成員變數進行賦值/取值
- 有空構造方法
符合這些條件的稱為標準的JavaBean。
2.構造方法(也叫構造器)
構造方法(也叫構造器)是一種特殊的方法,定義的位置是在類中,成員方法外,和成員變數,成員方法是平級關係,定義構造方法和定義一般的成員方法很像,它的特點是與類同名,但是沒有傳回值,其文法格式如下:
[修飾符] 構造方法名(形參列表){
//零到多條可執行語句組成構造方法的執行體
}
3.構造方法定義時注意事項:
1.構造方法必須和類同名
2.構造方法沒有傳回值,也不能使用void,一旦加了傳回值或者void,那麼這個方法就是一個成員方法,而不是構造方法了
4.預設的構造方法
當定義一個類的時候,如果沒有顯式的定義任何構造方法,就像之前的例子,都沒有定義構造方法,這時,系統會給這個類加上一個預設的無參構造方法,並且構造方法裡沒有任何語句。
例如:
class Demo{
//public Demo(){}
//如果沒有定義任何構造方法的話,系統自動加上一個空參構造方法
public void show(){
System.out.println("hello world");
}
}
一旦有自訂構造方法,系統就不會加上任何構造方法了
class Demo{
public Demo(int id){
System.out.println("這是有一個參數的構造方法");
}
}
5.構造方法的使用
實際上,在程式中使用new關鍵字建立一個類的執行個體化對象的時候,就是去調用該類的相應的構造方法,
此時應注意,根據構造方法的形參列表的不同來調用不同的構造方法,調用不存在的構造方法肯定編譯報錯
6.this關鍵字
this關鍵字用來指向當前對象,根據this關鍵字出現的位置不同,this作為對象的引用有兩種情況:
- 在構造方法中引用該構造方法正在初始化的對象
- 在方法中引用正在調用該方法的對象
this關鍵字的使用情境之一,就是讓類中的一個方法去訪問類中的另一個執行個體方法或變數,例如,定義了一個Person類,其中定義了兩個方法,一個叫sayHi()方法,另一個speak()方法,在speak()方法中需要先調用sayHi()方法,該如何定義Person類?
看下面的範例程式碼:
class Person{
public Person(){}
//打招呼方法
public void sayHi(){
System.out.println("Hello");
}
//談話方法
public void speak(String content){
//想要使用到Person類的sayHi方法,先建立一個對象,然後再調用這個對象的執行個體方法
Person p = new Person();
p.sayHi();
System.out.println("我想說的是:" + content);
}
}
class PersonTest{
public static void main(String[] args){
Person per = new Person();
per.speak();
}
}
7.在測試類別中首先執行個體化一個Person對象per,然後調用這個對象的speak方法,但是在這個方法被調用的時候,
又建立了一個Person對象p,然後調用了對象p的sayHi方法,所以,在程式啟動並執行過程中,實際上是產生了兩個Person執行個體對象。
這個程式可以實現方法的調用,但是這樣做好嗎?程式在speak方法裡建立的Person對象目的其實很簡單,就是為了調用一次這個對象的sayHi方法。
8.static關鍵字
static 關鍵字的字面直譯是“靜態”,實際上這個說法十分模糊,根本無法說明static的真正作用。
static的真正作用就是用於區分成員變數,方法,內部類,初始化塊(後面講)這四種成員是屬於類本身還是屬於這個類的執行個體。
在類定義中,static相當於一個標誌,有static修飾的成員屬於類本身,沒有static修飾的成員屬於該類的執行個體對象。
所以,為了區分這兩種不同的成員變數,凡是有static修飾的成員變數/成員方法,稱為類變數/類方法,沒有static修飾的成員變數/成員方法稱為執行個體變數/執行個體方法
為Java中變數的分類圖:
9.static修飾類的成員變數和成員方法(即:類變數,類方法)
靜態成員變數(類變數)屬於類,可用類名或對象名兩種方式進行訪問
靜態成員方法(類方法)屬於類,可用類名或對象名兩種方式進行訪問
只要類存在,程式中就可以訪問到類變數,類變數訪問的文法
類名.類變數 Student.name
只要執行個體存在,程式中就可以訪問到該執行個體的執行個體變數,訪問執行個體變數的文法
執行個體名.執行個體變數 s.id
當然,類變數也可以通過該類的執行個體來訪問,通過執行個體訪問類變數的文法
執行個體名.類變數 Student.name/s.name
10.static關鍵字的特點
被static關鍵字修飾的部分,有如下特點
- 隨著類的載入而載入
- 優先於對象存在(因為類的載入優先於對象的建立)
- 被類的所有執行個體對象共用(存在於方法區中的靜態區,如果是一個類變數的話,任何一個對象對該變數進行修改,都會在其他對象中得到體現),這也是我們在定義一個類時,判斷是否使用靜態關鍵字的標準
- 可以通過類名訪問(類名.靜態變數名/類名.靜態方法名),也可以使用對象名來訪問,推薦使用類名調用,因為靜態變數/方法是屬於類的
11.什麼時候使用static關鍵字?使用static關鍵字的標準
當一個變數或者方法屬於一個類,而不是屬於這個類的執行個體對象時,就可以使用static來修飾,這樣就可以使用類名.成員(變數/方法)的方式訪問這個static變數/方法。
所有這個類的執行個體對象都能看到對靜態變數(類變數)的更改
12.static方法重點注意事項
- 靜態方法(類方法)中不能使用this關鍵字,this關鍵字代表的是當前對象的引用,但是static關鍵字修飾的方法是屬於類的,隨著類的載入而存在,但當類進行載入時,此時執行個體對象還沒有被建立出來,這時是無法使用this關鍵字的
- 靜態方法只能訪問靜態成員變數和靜態成員方法
13.static記憶體配置圖
被static修飾的變數或者方法存在方法區中的靜態區
14.static關鍵字注意事項
static關鍵字注意事項
A:在靜態方法中不能使用this關鍵字
如何理解呢?
靜態是隨著類的載入而載入,this是隨著對象的建立而存在。
由於類比對象優先存在,所以靜態比對象先存在。
B:靜態方法只能訪問靜態成員變數和靜態成員方法
靜態方法訪問的是:
成員變數:只能訪問靜態變數
成員方法:只能訪問靜態成員方法
非靜態方法訪問的是:
成員變數:可以是靜態(因為類已經載入了,成員方法當然可以調用),也可以是非靜態
成員方法:可是是靜態成員方法(因為類已經載入了),也可以是非靜態成員方法。
簡單記:
靜態只能訪問靜態。
15.靜態變數和執行個體變數的區別
所屬不同
- 靜態變數屬於類,所以也稱為為類變數
- 執行個體變數屬於執行個體對象,所以也稱為執行個體變數
記憶體中位置不同
- 靜態變數儲存於方法區中的靜態區
- 執行個體變數儲存於堆記憶體
在記憶體出現的時間不同
- 靜態變數隨著類的載入而載入,隨著類的消失而消失
- 執行個體變數隨著對象的建立而存在,隨著對象的消失而消失
調用方式不同
- 靜態變數可以通過類名調用,也可以通過對象調用
- 執行個體變數只能通過對象名調用
|
所屬 |
記憶體位置 |
出現時間 |
調用 |
靜態變數 |
類 |
方法區的靜態區 |
隨類載入而載入 |
類名調用,對象名調用 |
執行個體變數 |
對象 |
堆記憶體 |
隨對象建立而存在 |
對象名調用 |
16.執行個體變數和局部變數的區別
在類中的位置不同
執行個體變數 在類中,並且在方法外
局部變數 方法內或者方法聲明上(形參)
在記憶體中的位置不同
執行個體變數 堆記憶體
局部變數 棧內
生命週期不同
執行個體變數 隨著對象的存在而存在,隨著對象的消失而消失
局部變數 隨著方法的調用而存在,隨著方法的調用完畢而消失
初始化值不同
執行個體變數 有預設的初始化值
局部變數 沒有預設的初始化值,必須先定義,賦值,才能使用。
|
聲明位置 |
記憶體位置 |
生命週期 |
初始值 |
局部變數 |
方法內,形參上 |
棧記憶體 |
隨方法調用而存在 |
必須先定義,賦值再使用 |
執行個體變數 |
類內,方法外 |
堆記憶體 |
隨對象建立而存在 |
有預設初始值 |
17. main方法是靜態
public static void main(String[] args) {}
public 被jvm調用,存取權限足夠大。
static 被jvm調用,不用建立對象,直接類名訪問
void被jvm調用,不需要給jvm傳回值
main 一個通用的名稱,雖然不是關鍵字,但是被jvm識別
String[] args 以前用於接收鍵盤錄入的
18.main方法的格式講解:
public static void main(String[] args) {...}
public:公用的,存取權限是最大的。由於main方法是被jvm調用,所以許可權要夠大。
static:靜態,不需要建立對象,通過類名就可以。方便jvm的調用。
void:因為我們曾經說過,方法的傳回值是返回給調用者,而main方法是被jvm調用。返回內容給jvm沒有意義。
main:是一個常見的方法入口。我見過的語言都是以main作為入口。
String[] args:這是一個字串數組。
這個東西為了接收鍵盤錄入的資料的。
格式是:
java MainDemo hello world java
19.如何使用API文檔
點擊顯示,找到索引,看到輸入框
以Scanner舉例
在輸入框裡面輸入Scanner,然後斷行符號
看包
java.lang包下的類不需要匯入,其他的全部需要匯入。
要匯入:
import java.util.Scanner;
再簡單的看看類的解釋和說明
看類的結構
成員變數 欄位摘要
構造方法 構造方法摘要
成員方法 方法摘要
學習構造方法
A:有構造方法 就建立對象
B:沒有構造方法 成員可能都是靜態,這樣的類也不需要構造方法,直接用類名就行
看成員方法
A:左邊
是否靜態:如果靜態,可以通過類名調用
傳回值類型:人家返回什麼,你就用什麼接收。
B:右邊
看方法名:方法名稱不要寫錯
參數列表:人家要什麼,你就給什麼;人家要幾個,你就給幾個
大資料JAVA基礎第九天