【幻化萬千戲紅塵】qianfengDay07-java基礎學習:static、設計模式之單例模式

課程回顧:java

 

面向對象:是一種思想設計模式

類:方法和屬性,抽象的、模板、概念上的定義安全

對象:類的實例化,實實在在的具體的實例學習

thisthis

1、表明本類對象spa

2、能夠調用構造方法線程

 

屬性的封裝設計

1、私有的屬性對象

2、而且提供公有的getset方法繼承

 

 

 

今日內容:

方法的參數傳遞

1、基本數據類型:傳遞的是數據的自己

2、引用數據類型:傳遞的是對象的地址

 

總而言之:參數傳遞的是棧內存中記錄的內容

只是基本數據類型棧內存記錄的數據的自己

而引用類型棧內存中記錄的是對象的地址

 

構造代碼塊(空代碼塊)

格式:{代碼塊}

構造代碼塊的執行會根據建立對象的時候執行

並且先於構造方法執行

 

 

static:關鍵字 靜態

1、修飾屬性:靜態屬性

能夠經過類名.屬性名直接使用

注意:靜態屬性爲類屬性,全部對象共享

類被加載的時候,被初始化

2、修飾方法:靜態方法

能夠經過類名.方法名直接調用

注意:能夠直接使用靜態屬性,不能直接使用非靜態屬性

 

在靜態方法中不能直接使用非靜態的屬性和方法

可是在非靜態方法中,可使用靜態的屬性和方法

 

3、修飾代碼塊:靜態代碼塊

經常被用來初始化靜態屬性

格式:static{代碼塊}

類被加載的時候執行,只執行一次

 

對象第一次建立時:

先執行靜態代碼塊

再執行構造代碼塊

最後執行構造方法

 

4、修飾內部類

 

 

類中能夠出現的:

1、屬性[0,n]

2、靜態屬性[0,n]

3、方法[0,n]

4、靜態方法[0,n]

5、構造方法[0,n]

6、構造代碼塊[0,n]

7、靜態代碼塊[0,n]

8、成員內部類[0,n]

9、靜態內部類[0,n]

10、內部接口[0,n]

 

package com.qianfeng.demo2;

 

public class TestMain01 {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

Animal animal=new Animal();

animal.price=10;

animal.type="";

//靜態屬性,能夠經過類名.屬性名直接使用

Animal.type="";

System.out.println("類型:"+animal.type+",價格:"+animal.price);

 

Animal animal2=new Animal();

System.out.println("類型:"+animal2.type+",價格:"+animal2.price);

}

 

}

package com.qianfeng.demo2;

 

public class Animal {

 

//1static修飾屬性,類屬性,全部對象共享

public static String type;//類型

public int price;//價格

 

//構造代碼塊

{

System.out.println("我是構造代碼塊");

}

public static void show() {

type="";//靜態屬性能夠直接被使用在靜態方法中

// new Animal().price=12;

}

public void test() {

type="";//在非靜態方法中,咱們能夠直接使用靜態屬性

show();

 

}

}

 

 

思考:如何保證一個類的惟一實例

設計模式之單例模式:

保證類的惟一實例

規則:

1、私有的構造方法

2、私有的靜態本類對象

3、公有的靜態方法

單例模式的實現方式:

1、懶漢式:不安全(線程不一樣步)

在聲明本類的對象的時候沒有實例化

2、餓漢式:安全

在聲明本類對象的時候就完成實例化

 

 

練習:請本身動手體會static關鍵字的用法

 

 

 

包:就是存放java源文件的文件夾

包的做用:

1、避免類名衝突

2、隱藏類

3、經過合適的包名錶達不一樣的意思

 

包名要求不能有大寫,多級關係使用.鏈接

包名中的.其實就是至關於一層目錄

 

package:聲明包,必須出如今源文件的第一行

格式:package 包名;

說明對應的類屬於當前聲明的包

使用命令進行編譯帶包的源文件:

編譯:javac -d . 文件名.java

執行:java 包名.類名

 

import:導入包,必須出如今類聲明的上方

 

JDK5.0以後,支持靜態導包

格式:import static 包名.類名.方法名/屬性名

只能導入靜態方法或靜態屬性

 

因爲java.lang包,平常開發使用最爲頻繁,全部官方默認導入該包

 

 

思考:一個類怎麼擁有另外一類的信息?

1、聚合關係

就是將另外一個類的對象做爲本類的一個屬性

2、繼承

父類:超類---被繼承的類

子類:基類、派生類---實現繼承的類

子類能夠擁有父類的部分(所有)屬性和方法

構造方法不能被繼承

java只能單繼承,也就是說:一個類只能繼承一個類

可是java容許繼承的傳遞性

 

extends:實現繼承關係

格式:[修飾符] class 子類名稱 extends 父類名稱

{

屬性

方法

}

一個父類能夠有多個子類,可是一個子類只能擁有一個父類

 

練習:本身建立有繼承關係的類並體會繼承的做用

 

 

package com.qianfeng.demo5;

 

public class Father {

 

public String name;//名字

public int age;//年齡

private int money;

 

public void showInfo() {

System.out.println("名字:"+name+",今年:"+age+"");

}

}

package com.qianfeng.demo5;

 

//繼承Father

public class Son extends Father{

 

public String like;//愛好

 

 

}

package com.qianfeng.demo5;

 

public class TestMain01 {

 

public static void main(String[] args) {

//建立子類對象

Son son=new Son();

son.name="兒子";

son.age=12;

son.like="LOL";

//son.money=120;//子類只能擁有父類非私有的屬性和方法

son.showInfo();

//建立父類對象

Father father=new Father();

father.name="";

father.age=32;

//father.like="學習";//父類不能擁有子類新增的屬性或方法

 

//

Grill grill=new Grill();

grill.age=18;

grill.showInfo();

}

 

}

 

 

父類中:

靜態代碼塊

構造代碼塊

構造方法

 

子類中:

靜態代碼塊

構造代碼塊

構造方法

 

在第一次建立子類對象的時候,執行過程:

父類靜態代碼塊

子類靜態代碼塊

父類構造代碼塊

父類構造方法

子類構造代碼塊

子類構造方法

 

類加載的條件:

1、第一次調用靜態屬性

2、第一次調用靜態方法

3、第一次建立類的對象

 

super:關鍵字 應用在子類中

用法:

1、調用父類中的屬性或方法

2、調用父類中的構造方法

要求:必須在子類的構造方法中,並且只能是第一行

super不能出如今static方法中

 

thissuper的區別?

this:

用在本類中

能夠指代本類對象

能夠調用屬性和方法

能夠調用本身的構造方法

super:

用在子類中

調用父類中的屬性和方法

能夠調用父類的構造方法

 

thissuper都不能出如今static方法中

 

 

 

明天內容:

訪問修飾符

重寫

Object

抽象類

遞歸

 

設計模式之單例模式:

懶漢式、餓漢式

 

思考:如何保證一個類的惟一實例

設計模式之單例模式:

保證類的惟一實例

規則:

1、私有的構造方法

2、私有的靜態本類對象

3、公有的靜態方法

單例模式的實現方式:

1、懶漢式:不安全(線程不一樣步)

在聲明本類的對象的時候沒有實例化

2、餓漢式:安全

在聲明本類對象的時候就完成實例化

 

 

 

包:

cmd中如何編譯運行帶帶包的源文件

 

 

 

 

如何導進第三方的包:看下面;

 

 

 

 

 

 

 

 

如何把本身的包導出來,,原來是這樣:

相關文章
相關標籤/搜索