一.內容簡介
1.初始化與清理
2.訪問權限
3.繼承概要
4.final,static
5.練習一
二.內容梳理
1.初始化與清理
丹鳳網站建設公司成都創新互聯,丹鳳網站設計制作,有大型網站制作公司豐富經驗。已為丹鳳近1000家提供企業網站建設服務。企業網站搭建\成都外貿網站制作要多少錢,請找那個售后服務好的丹鳳做網站的公司定做!
1.1構造函數
構造函數:用來初始化成員變量的函數,沒有返回值,函數名與類名一致。
默認構造器:沒有參數的構造函數。類中如果沒有構造器,編譯器會自動創建
默認構造
器。
構造函數的嵌套:可以在構造器中調用被重載的其他構造器,用
this(parameter
)調用。且只可以調用一個并放在起始處。
繼承中的構造函數:構造函數不會被繼承,子類的構造函數自動調用父類的默認構造函數,如果父類沒有默認構造函數,則手動調用父類的構造函數。super(parameter).
1.2重載
重載:
方法名相同,參數列表不同。與返回值無關,返回值無法區分,如果返回值不同,方法名相同,參數列表相同,編譯出錯。
重載的參數
匹配:對應類型對應匹配。如果匹配不到:
(常數與char
)當做int用來
匹配,其他的數據類型逐漸提升數據類型來匹配
。
重寫的返回類型必須一樣或協變,否則編譯錯誤。
1.3初始化
局部變量不初始化會報錯,成員變量有默認的初始化。
初始化順序:靜態優于非靜態,父類優先子類,變量優先于代碼塊優先于構造器。
靜態數據的初始化:靜態數據屬于類,只占用一份存儲區域,有標準的初值。靜態數據的初始化時間是(靜態數據被訪問或對象被創建時)
1.4清理
垃圾回收機制只釋放new的內存
類內定義finalize()方法,當垃圾回收發生時,finalize()被調用
(5)可變參數列表
例子:
點擊( 此處 )折疊或打開
static void printArray(Object[] args){
}
printArray(1, 2, 3);
printArray((Object[])new integer[](1, 2, 3));
——構造函數使用可變參數列表會與默認構造函數弄混
2.訪問權限
1.1
|
類內 |
包內(子類與非子類) |
包外子類 |
包外非子類 |
Public |
√ |
√ |
√ |
√ |
Protected |
√ |
√ |
√ |
× |
默認 |
√ |
√ |
× |
× |
private |
√ |
× |
× |
× |
1.2修飾類只有public和默認
3.繼承概要
extends指明繼承關系,未說明隱式繼承Object.
向上轉型:子類可以作為實參傳入父類作為形參的方法。
this.value先找自己的成員,找不到去父類找的.
構造方法不會被繼承
4.final,static
1.1
final強調不變。static強調跟隨類。
1.2final
類不希望被繼承
方法不希望被重寫
變量不希望被改變
final修飾的值不一定是常量還是變量,DJ反編譯看。
1.3static
靜態變量
靜態方法:
不能訪問非靜態成員方法和非靜態成員變量
靜態代碼塊
static不允許修飾局部變量;
5.練習一
(1)需求
——汽車銷售人員銷售汽車,款式有凱越,君威
——汽車與款式和編號,款式編號不可修改
——汽車銷售人員有姓名
——銷售人員按車型及數量銷售
(2)代碼
AutoType.java
點擊( 此處 )折疊或打開
package biz ;
public class AutoType {
public static final String KAI_YUE = "凱越" ;
public static final String JUB_WEI = "君威" ;
}
Auto.java
點擊( 此處 )折疊或打開
package biz ;
public class Auto {
private String autoType ; // 款式
private String autoNumber ; // 編號
private boolean isSelled ;
Auto ( String autoType , String autoNumber ) {
this . autoType = autoType ;
this . autoNumber = autoNumber ;
this . isSelled = false ; // 默認未銷售
}
public String getAutoType ( ) {
return autoType ;
}
public String getAutoNumber ( ) {
return autoNumber ;
}
public boolean isSelled ( ) {
return isSelled ;
}
public void setSelled ( boolean isSelled ) {
this . isSelled = isSelled ;
}
}
seller.java
點擊( 此處 )折疊或打開
package biz ;
public class Seller {
private String name ;
Seller ( String name ) {
this . name = name ;
}
/**
*
* @param autos 所用的車
* @param autoType 要銷售的類型
* @param num 要銷售的數量
*/
public void sell ( Auto [ ] autos , String autoType , int num ) {
// if(auto == null || autoType == null || num < 0) {
//
// }
int selledNum = 0 ;
for ( Auto curAuto : autos ) {
int i = 0 ;
i + + ;
if ( ! curAuto . isSelled ( ) & & curAuto . getAutoType ( ) . equals ( autoType )
& & selledNum < num ) {
curAuto . setSelled ( true ) ;
System . out . println ( "準備售出-" + curAuto . getAutoType ( ) + "-"
+ curAuto . getAutoNumber ( ) ) ;
selledNum + + ;
}
}
if ( selledNum < num ) {
System . out . println ( "庫存不夠。" + "只可售出" + selledNum + "輛" + autoType ) ;
}
}
public String getName ( ) {
return name ;
}
public void setName ( String name ) {
this . name = name ;
}
public static void main ( String [ ] args ) {
Seller s1 = new Seller ( "小明" ) ;
Auto auto1 = new Auto ( AutoType . JUB_WEI , "001" ) ;
Auto auto2 = new Auto ( AutoType . JUB_WEI , "002" ) ;
Auto [ ] autos = new Auto [ 2 ] ;
autos [ ] = auto1 ;
autos [ 1 ] = auto2 ;
s1 . sell ( autos , AutoType . JUB_WEI , 3 ) ;
}
}
三.總結與隨筆
(1)entity層:只有屬性沒有方法,主要用于數據跨層傳輸
(2)同一塊作用域,局部變量優先于成員變量。
(3)char 類型可以' + ', ' - '
(4)方法傳參:基本類型傳值,函數內改變參數值對函數外無影響。引用類型傳引用,函數內改變參數值對函數外有影響。
(5)刪掉set方法,private修飾的成員變量只讀