課程回顧:java
面向對象:是一種思想設計模式
類:方法和屬性,抽象的、模板、概念上的定義安全
對象:類的實例化,實實在在的具體的實例學習
this:this
1、表明本類對象spa
2、能夠調用構造方法線程
屬性的封裝設計
1、私有的屬性對象
2、而且提供公有的get和set方法繼承
今日內容:
方法的參數傳遞
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 {
//1、static修飾屬性,類屬性,全部對象共享
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方法中
this和super的區別?
this:
用在本類中
能夠指代本類對象
能夠調用屬性和方法
能夠調用本身的構造方法
super:
用在子類中
調用父類中的屬性和方法
能夠調用父類的構造方法
this和super都不能出如今static方法中
明天內容:
訪問修飾符
重寫
Object
抽象類
遞歸
設計模式之單例模式:
懶漢式、餓漢式
思考:如何保證一個類的惟一實例
設計模式之單例模式:
保證類的惟一實例
規則:
1、私有的構造方法
2、私有的靜態本類對象
3、公有的靜態方法
單例模式的實現方式:
1、懶漢式:不安全(線程不一樣步)
在聲明本類的對象的時候沒有實例化
2、餓漢式:安全
在聲明本類對象的時候就完成實例化
包:
在cmd中如何編譯運行帶帶包的源文件
如何導進第三方的包:看下面;
如何把本身的包導出來,,原來是這樣: