將人類語言中存在細(xì)微差別的概念“映射”到程序設(shè)計(jì)語言中,問題隨之而生拘鞋。在目標(biāo)生活中砚蓬,相同的詞可以表達(dá)不同的含義-——它們被重載了,特別是含義之間的差別很小時(shí)掐禁,這種方式非常有用怜械。
這段話的技術(shù)點(diǎn)并沒有很多,重要的是對于面向?qū)ο蟮睦斫飧凳隆N覀冎?code>Java是面向OOP
的缕允,它的語言特性都是從生活中抽象而來,我們生活中有洗菜蹭越、洗車障本、洗頭等行為。這些行為都是用液體來對某種事物進(jìn)行清理工作。我們設(shè)計(jì)程序功能的時(shí)候肯定要考慮到這種情況驾霜。而重載就是為這種情況考慮的案训。
如果傳入的基本數(shù)據(jù)類型(實(shí)際參數(shù)類型)小于方法中聲明的形式參數(shù)類型,實(shí)際數(shù)據(jù)類型就會被提升粪糙。
char
型略有不同强霎,如果無法找到恰好接受char
參數(shù)的方法,就會把char
直接提升至int
型蓉冈。
這也很符合面向?qū)ο蟮奶攸c(diǎn)城舞。參數(shù)類型比實(shí)際參數(shù)類型范圍大,就不會造成數(shù)據(jù)丟失寞酿。而為了方法能夠正常運(yùn)行家夺,就會把其轉(zhuǎn)成范圍更大的類型。
可以使用構(gòu)造器來初始化伐弹,在運(yùn)行時(shí)刻拉馋,可以調(diào)用方法或執(zhí)行某些動作來確定初始值,這為變成帶來更大的靈活性惨好。但要牢記:無法阻止自動初始化的進(jìn)行煌茴,它在構(gòu)造器執(zhí)行之前發(fā)生。
這部分說的初始化就是我們的成員變量的初始化是在構(gòu)造器之前進(jìn)行的昧狮。而靜態(tài)變量的初始化是在類加載過程中進(jìn)行的景馁。這也很好理解,如果構(gòu)造器是在成員變量初始化之前對其賦值逗鸣,那構(gòu)造器就沒有任何意義了,我們在構(gòu)造器傳入的任何參數(shù)都不能夠影響到最終的變量值绰精。
靜態(tài)數(shù)據(jù)的初始化看下面這部分代碼并能夠正確得到答案就行了撒璧。
class Bowl {
Bowl(int maker) {
System.out.println("Bowl(" + maker + ")");
}
void f1(int maker) {
System.out.println("f1(" + maker + ")");
}
}
class Table {
static Bowl bowl1 = new Bowl(1);
Table() {
System.out.println("Table");
bowl2.f1(1);
}
void f2(int maker) {
System.out.println("f2(" + maker + ")");
}
static Bowl bowl2 = new Bowl(2);
}
class Cupboard {
Bowl bowl3 = new Bowl(3);
static Bowl bowl4 = new Bowl(4);
Cupboard() {
System.out.println("Cupboard");
bowl4.f1(2);
}
void f3(int maker) {
System.out.println("f3(" + maker + ")");
}
static Bowl bowl5 = new Bowl(5);
}
/**
* StaticInitialization
*/
public class StaticInitialization {
public static void main(String[] args) {
System.out.println("Creating new Cupboard() in main");
new Cupboard();
System.out.println("Creating new Cupboard() in main");
new Cupboard();
table.f2(1);
cupboard.f3(1);
}
static Table table = new Table();
static Cupboard cupboard = new Cupboard();
}
輸出為:
Bowl(1)
Bowl(2)
Table
f1(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard
f1(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard
f1(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard
f1(2)
f2(1)
f3(1)
說說前面分析需要注意的幾點(diǎn)吧:
- 先執(zhí)行靜態(tài)初始化,再執(zhí)行普通的初始化
- 構(gòu)造器是晚于屬性變量的初始化的
- 類變量的初始化只會在需要使用這個(gè)類的時(shí)候才會進(jìn)行笨使,而且只會進(jìn)行一次卿樱。初始化的結(jié)果存儲在方法去中。