Java 學習(09)--方法過載/建構函式/static 變數
Java 學習(09)--方法過載/建構函式
1 、方法
方法是一組為了實現特定功能的程式碼塊的集合。方法在語法上的功能主要有以下兩個:
①:結構化程式碼
將程式碼按照功能進行組織, 使程式碼的結構比較清晰, 容易閱讀和修改, 也就是程式的可維護性強。
②:減少程式碼重複
一個固定的功能, 可能會在程式中多次使用, 在使用時只需要呼叫寫好的方法, 而不用重複書寫對應的功能程式碼。
方法在書寫時需要注意以下兩點:
①:邏輯嚴謹
方法實現的一個完整的功能, 所以在書寫時要考慮到各種可能的情況, 並對每種情況做出恰當的處理。
②:通用性強(可重複利用)
方法實現的是一種功能, 在實際實現時, 可以根據需要, 使方法具備一定的通用性,除非必要,否則不要寫專用的方法。在 Java 語言中,恰當的使用方法,將使程式更加優雅,便於閱讀和使用。
我的總結:
方法:一段可重複使用的程式碼段;
程式中完成獨立功能的一段程式碼的集合
格式:
修飾符返回值型別方法名 (引數型別引數名 1,引數型別引數名 2...) { 方 法 體 語 句 ; return 返回值 ;
}
修飾符:目前就用 public static 。後面再詳細講解其他修飾符返回值型別:就是功能結果的資料型別
方法名:就是起了一個名字,方便我們呼叫該方法。引數型別:就是引數的資料型別
引數名:就是變數引數分類:
實參:實際參與運算的資料
形參:方法上定義的,用於接收實際引數的變數方法體語句:就是完成功能的程式碼塊
return :結束方法
返回值:就是功能的結果,由 return 帶給呼叫者。
兩個明確:
返回值型別:結果的資料型別
引數列表:引數的個數及對應的資料型別
方法的注意事項
A:方法不呼叫不執行 B:方法之間是平級關係,不能巢狀定義 C:方法定義的時候,引數是用,隔開的
D:方法在呼叫的時候,不用在傳遞資料型別 E:如果方法有明確的返回值型別,就必須有 return 語句返回。
示例:
輸出:11 (將a,b寫固定了,不推薦)
輸出:30
(方法過載 overload:在一個類中方法同名不同參----1.方法名相同 2.引數列表不同:數量、型別、順序不同)
不能根據返回值型別判斷方法過載
2.private 關鍵字
(1)私有的意義,可以修飾成員變數和成員方法
(2)特點: 被 private修飾的後的成員只能在本類中被訪問
(3)private 的應用: 以後再寫一個類的時候:把所有的成員變數給 private 了 提供對應的 getXxx()/setXxx() 方法
輸出:null
輸出:林青霞
3.this關鍵字
(1)代表當前類的引用物件 (哪個物件呼叫方法,該方法內部的 this 就代表那個物件)
(2)this 的應用場景: A:解決了區域性變數隱藏成員變數的問題
當變數一個是成員變數,一個是區域性變數時,變數可以重名,就近原則
this 表示該類的一個物件的引用(那個物件呼叫這個方法,this 就表示那個方法)
this 作用:1.當區域性變數和成員變數同名時,通過 this 關鍵字 呼叫成員變數
this 作用2:通過 this(),用於構造方法的第一行,用來呼叫其他構造方法
示例:
輸出:null 0
輸出:zs 18
4.構造方法
(1)作用:1.用來建立物件 2.用於對物件的成員變數進行資料的初始化
(2)格式: A:方法名和類名相同(包括大小寫) B:沒有返回值型別,連 void 都不能有,也沒有返回值
C:不能通過物件 . 方法名的方式進行呼叫,而是通過 new 關鍵字進行呼叫 new 物件()
思考題:構造方法中可不可以有 return語句呢 ?
可以。而是我們寫成這個樣子就 OK 了:return; 其實,在任何的 void 型別的方法的最後你都可以寫上: return;
(3)構造方法的注意事項
A:如果我們沒寫構造方法,系統將提供一個預設的無參構造方法
B:如果我們給出了構造方法,系統將不再提供預設構造方法 如果這個時候,我們要使用無參構造方法,就必須自己給出。
C:建構函式也可以過載
推薦:永遠手動提供一個無引數的構造方法。
(4)給成員變數賦值的方式(3個) A:定義成員變數時賦值(不常用) B:通過set方法賦值 C:帶參構造方法
示例:
輸出:林青霞 40
建立一個物件時 (Student s = new Student()),都做了那些事
1.將 Student.class 載入到記憶體(只有第一次建立時才載入)
2.在棧記憶體中為變數 s 開闢空間
3.在棧記憶體中為學生變數開闢空間
4.給學生的成員變數進行預設初始化 null 0
5.給學生類的成員變數進行顯示的初始化
6.通過構造方法給成員變數進行初始化
7.物件構造完畢,將物件地址(引用)賦值給 s 變數
(5)標準案例
class Student {
private String name;
private int age;
public Student(){}
public Student(String name,int age) {
this.name = name; this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
成員變數賦值的方式:
class StudentDemo {
public static void main(String[] args) {
//方式 1
Student s1 = new Student();
s1.setName("小明");
s1.setAge(18);
System.out.println(s1.getName()+"---"+s1.getAge());
//方式 2
Student s2 = new Student("小剛",19);
System.out.println(s2.getName()+"---"+s2.getAge());
}
}
執行:
4.程式碼塊
(1)用{} 括起來的程式碼。
(2)分類: A:區域性程式碼塊 用於限定變數的生命週期,及早釋放,提高記憶體利用率。 B:構造程式碼塊 把多個構造方法中相同的程式碼可以放到這裡, 每個構造方法執行前, 首先執行構造程式碼塊。 C:靜態程式碼塊 對類的資料進行初始化,僅僅只執行一次。
(3)靜態程式碼塊 ,構造程式碼塊 ,構造方法的順序問題 ? 靜態程式碼塊 > 構造程式碼塊 > 構造方法
static : 靜態的意思,可以修飾成員變數和成員方法
特點:1.談過static 變數修飾的變數是靜態變數,所有的該類的物件共享靜態變數
2.靜態變數隨著類的載入而載入(.class)優先於物件而存在的
3.靜態的變數和靜態的方法可以不用建立該類的物件,直接通過類名通過類名 . 變數名或 類名 . 方法名(實參列表)
4.不能在靜態的方法中訪問非靜態的變數,在非靜態的方法中可以訪問靜態的變數
特點2.靜態變數隨著類的載入而載入(.class)優先於物件而存在的
static 變數修飾的變數不放在棧中,放在靜態編碼區
特點3:靜態的變數和靜態的方法可以不用建立該類的物件,直接通過類名通過類名 . 變數名或 類名 . 方法名(實參列表)
報錯(age)
特點 4.不能在靜態的方法中訪問非靜態的變數,在非靜態的方法中可以訪問靜態的變數
報錯(age)
輸出:50 (需要定義變數)
輸出:楊過
相關文章
- Java static變數、作用域、建構函式初始化順序Java變數函式
- static變數,static程式碼塊,建構函式,程式碼塊等的載入順序變數C程式函式
- 預設建構函式學習函式
- 關於python建構函式的過載Python函式
- Sanic static() 方法/函式函式
- 預設建構函式、引數化建構函式、複製建構函式、解構函式函式
- c++ 的學習 建構函式1C++函式
- js變數與函式常識學習JS變數函式
- Java建構函式詳解Java函式
- Java泛型建構函式Java泛型函式
- static程式碼塊、構造程式碼塊、建構函式以及Java類初始化順序C程式函式Java
- 【GO學習二】包,函式,常量和變數Go函式變數
- golang學習之路之函式可變引數Golang函式
- PHP 手冊 (類與物件) 學習筆記五:建構函式和解構函式PHP物件筆記函式
- C# 建構函式 (初始化成員變數的角色)C#函式變數
- 工廠方法、建構函式、原型物件——JS基礎學習筆記(四)函式原型物件JS筆記
- C++學習筆記-----類和建構函式C++筆記函式
- EXTJS 建構函式帶引數JS函式
- 過載運算子、解構函式函式
- JS基礎難點總結(函式作用域,變數提升,物件,建構函式,this)全!!!JS函式變數物件
- 建構函式與解構函式函式
- Solidity語言學習筆記————30、函式過載Solid筆記函式
- C++_預設建構函式和過載以及設計模式C++函式設計模式
- ## 建構函式函式
- java學習筆記day07 成員變數與區域性變數、形式引數、匿名物件、封裝、private、this、構造方法、類詳細講解、staticJava筆記變數物件封裝構造方法
- java8新特性之函式式介面、lambda表示式、介面的預設方法、方法和建構函式的引用Java函式
- C++行內函數、函式過載與函式預設引數C++函數函式
- C++ 建構函式和解構函式C++函式
- 類的建構函式和解構函式函式
- 學習Scala 方法與函式函式
- Golang建立建構函式的方法詳解Golang函式
- Java建構函式的繼承問題Java函式繼承
- Java學習隨筆(函式式介面)Java函式
- 從建構函式得到引數型別函式型別
- JavaScript 建構函式JavaScript函式
- 如何透過建構函式和JPQL生成DTO?函式
- (十六)Python學習之內建函式Python函式
- 3.3.2 函式的預設引數和佔位引數 函式過載函式