Java編程基礎篇第六章
構造方法
一:概念:
給對象的數據(屬性)進行初始化
二:特點:
a.方法名與類同名(字母大小寫也要一樣)
b.沒有返回值類型
c.沒有具體的返回值 return
三:構造方法重載:
方法名相同,與返回值類型無關(因為構造方法沒有返回值),只看參數列表
註:如果沒有寫出構造方法,系統自動提供一個無參的構造方法,如果我們給出了構造方法,
系統不再提供構造方法。
1 class Student{ 2 //下面是構造方法 3 public Student{ 4 //無參構造方法 5 } 6 public Person(String name,int age){ 7 //有參構造方法 8 } 9 }
成員變量
一:賦值
A.通過setxxx()方法
B.通過構造方法
例子:學生類
class Student{ private String name; private int age; //下面是構造方法 public Student(String name,int age){ //構造方法賦值 //this.name = name; //this.age = age; } public void setName(String name){ this.name = name; } public void setAge(int age){this.age = age; } }
創建對象的步驟
Student s = new Student();
1,Student.class加載進內存
2,聲明一個Student類型引用s
3,在堆內存創建對象,
4,給對象中屬性默認初始化值
5,屬性進行顯示初始化
6,構造方法進棧,對對象中的屬性賦值,構造方法彈棧
7,將對象的地址值賦值給s
static關鍵字
一:概念:
static用於修飾類的成員,如成員變量,成員方法,代碼塊,被static
修飾的成員具備一些特殊性。
二:特殊性
a:隨著類的加載而加載
b:優先於對象存在
c:被類的所有對象共享
舉例:咱們班級的學生應該共用同一個班級編號。其實這個特點也
是在告訴我們什麽時候使用靜態?
如果某個成員變量是被所有對象共享的,那麽它就應該定義為靜態
的。
舉例:
飲水機(用靜態修飾)
水杯(不能用靜態修飾)
共性用靜態,特性用非靜態
d:可以通過類名調用
其實它本身也可以通過對象名調用。
推薦使用類名調用。
靜態修飾的內容一般我們稱其為:與類相關的,類成員
三:註意事項
a:在靜態方法中是沒有this關鍵字的
如何理解呢?
靜態是隨著類的加載而加載,this是隨著對象的創建而存在。
靜態比對象先存在。
b:靜態方法只能訪問靜態的成員變量和靜態的成員方法
靜態方法:
成員變量:只能訪問靜態變量
成員方法:只能訪問靜態成員方法
非靜態方法:
成員變量:可以是靜態的,也可以是非靜態的
成員方法:可是是靜態的成員方法,也可以是非靜態的成員方法。
簡單記:
靜態只能訪問靜態。
四:列子
class Student{ static String name; //靜態變量 static{ System.out.println("這是靜態代碼塊"); } public static void sayHello() { System.out.println("這是靜態方法"); } }
五:靜態變量和成員變量的區別
A:所屬不同
* 靜態變量屬於類,所以也稱為為類變量
* 成員變量屬於對象,所以也稱為實例變量(對象變量)
B:內存中位置不同
* 靜態變量存儲於方法區的靜態區
* 成員變量存儲於堆內存
C:內存出現時間不同
* 靜態變量隨著類的加載而加載,隨著類的消失而消失
* 成員變量隨著對象的創建而存在,隨著對象的消失而消失
D:調用不同
* 靜態變量可以通過類名調用,也可以通過對象調用
* 成員變量只能通過對 象名調用
main方法的格式詳細解釋
A:格式
* public static void main(String[] args) {}
B:針對格式的解釋
* public 被jvm調用,訪問權限足夠大。
* static 被jvm調用,不用創建對象,直接類名訪問
* void被jvm調用,不需要給jvm返回值
* main 一個通用的名稱,雖然不是關鍵字,但是被jvm識別
* String[] args 以前用於接收鍵盤錄入的
使用JDK提供的幫助文檔
A:找到文檔,打開文檔
B:點擊顯示,找到索引,出現輸入框
C:你應該知道你找誰?舉例:Scanner
D:看這個類的結構(需不需要導包)
* 成員變量 字段
* 構造方法 構造方法
* 成員方法 方法
Math類
一:概念:
類包含用於執行基本數學運算的方法
二:獲取隨機數的方法:
public static double random():返回帶正號的 double 值,該值大於等於 0.0
且小於 1.0。
童鞋們可以自行驗證一下。
代碼塊
代碼塊概述:
* 在Java中,使用{}括起來的代碼被稱為代碼塊。
代碼塊分類:
* 根據其位置和聲明的不同,可以分為局部代碼塊,構造代碼塊,靜態代碼
塊,同步代碼塊(多線程講解)。
常見代碼塊:
* a:局部代碼塊
在方法中出現;限定變量生命周期,及早釋放,提高內存利用率
* b:構造代碼塊 (初始化塊)
在類中方法外出現;多個構造方法方法中相同的代碼存放到一起,每次調
用構造都執行,並且在構造方法前執行
* c:靜態代碼塊
在類中方法外出現,並加上static 修飾;用於給類進行初始化,在加載的
時候就執行,並且只執行一次。
一般用於加載驅動
class Text { static { System.out.println("靜態代碼塊"); } { System.out.println("構造代碼塊"); } public Text() { System.out.println("構造方法"); } } public class Demo {
static { System.out.println("Demo 靜態代碼塊"); } public static void main(String[] args) {
System.out.println("我是 main 方法"); Text s1 = new Text();
Text s2 = new Text(); } }
運行結果:
可以看出,執行順序 靜態代碼塊>構造代碼塊>構造函數
面向對象之繼承
繼承(extends)概念:
讓類與類之間產生關系,子父類關系
繼承的好處:
* a:提高了代碼的復用性
* b:提高了代碼的維護性
* c:讓類與類之間產生了關系,是多態的前提
繼承的弊端:
* 類的耦合性增強了。
* 開發的原則:高內聚,低耦合。
* 耦合:類與類的關系
* 內聚:就是自己完成某件事情的能力
繼承的特點:
* a:Java只支持單繼承,不支持多繼承。(一個兒子只能有一個爹)
* 有些語言是支持多繼承,格式:extends 類1,類2,...
* b:Java支持多層繼承(繼承體系) * 如果想用這個體系的所有功能用
最底層的類創建對象
* 如果想看這個體系的共性功能,看最頂層的類
繼承的註意事項:
* a:子類只能繼承父類所有非私有的成員(成員方法和成員變量)
*b:子類不能繼承父類的構造方法,但是可以通過super(馬上講)關鍵字去訪
問父類構造方法。
* c:不要為了部分功能而去繼承
什麽時候使用繼承:
* 繼承其實體現的是一種關系:"isa"。如果有兩個類A,B。
只有他們符合 A是B的一種,或者B是A的一種,就可以考慮使用繼承
this和super的區別和應用:
this和super的用法很相似。
this代表本類對象的引用。
super代表父類的內存空間的標識。
this和super的使用區別:
* a:調用成員變量
*this.成員變量 調用本類的成員變量,也可以調用父類的成員變量
*super.成員變量 調用父類的成員變量
b:調用構造方法
*this(...) 調用本類的構造方法
*super(...) 調用父類的構造方法
* c:調用成員方法
*this.成員方法 調用本類的成員方法,也可以調用父類的方法
*super.成員方法 調用父類的成員方法
final關鍵字
final修飾特點
1,final修飾的類是一個最終類,不能在派生子類。
2,final修飾的方法是最終方法,不可以給重寫。
3,final 修飾的變量是一個常量,只能被賦值一次。 被 final 修飾的常量名
所有的字母都是大寫的。如果由多個單詞組成單詞間通過 _ 連接。
4,可以通過構造代碼塊或者構造函數賦值一次。
* 基本類型,是值不能被改變
* 引用類型,是地址值不能被改變,對象中的屬性可以改變
Java編程基礎篇第六章