2溜腐、默認(rèn) ArrayList 的長度是 10 個(gè)译株,擴(kuò)充一次是擴(kuò)充為原來的 1.5 倍。
3挺益、靜態(tài)常量static final 和常量final的區(qū)別:
(1)static+final
靜態(tài)常量歉糜,編譯期常量,編譯時(shí)就確定值望众。(Java代碼執(zhí)行順序匪补,先編譯為class文件,在用虛擬機(jī)加載class文件執(zhí)行)
放于方法區(qū)中的靜態(tài)常量池烂翰。
在編譯階段存入調(diào)用類的常量池中
如果調(diào)用此常量的類不是定義常量的類夯缺,那么不會(huì)初始化定義常量的類,因?yàn)樵诰幾g階段通過常量傳播優(yōu)化甘耿,已經(jīng)將常量存到調(diào)用類的常量池中了
(2)final
常量踊兜,類加載時(shí)確定或者更靠后。
當(dāng)用final作用于類的成員變量時(shí)佳恬,成員變量(注意是類的成員變量捏境,局部變量只需要保證在使用之前被初始化賦值即可)必須在定義時(shí)或者構(gòu)造器中進(jìn)行初始化賦值
對(duì)于一個(gè)final變量,如果是基本數(shù)據(jù)類型的變量殿怜,則其數(shù)值一旦在初始化之后便不能更改典蝌;
如果是引用類型的變量曙砂,則在對(duì)其初始化之后便不能再讓其指向另一個(gè)對(duì)象头谜。但是它指向的對(duì)象的內(nèi)容是可變的
4、一個(gè)類不能同時(shí)被 abstract 和 final 修飾鸠澈。
5柱告、注意抽象方法不加大括號(hào)截驮,如 abstract void playMusic();
6、Java里面static一般用來修飾成員變量或函數(shù)际度。但有一種特殊用法是用static修飾內(nèi)部類葵袭,普通類是不允許聲明為靜態(tài)的,只有內(nèi)部類才可以乖菱。被static修飾的內(nèi)部類可以直接作為一個(gè)普通類來使用坡锡,而不需實(shí)例一個(gè)外部類(見如下代碼)
public class OuterClass {
public static class InnerClass{
InnerClass(){
System.out.println("============= 我是一個(gè)內(nèi)部類'InnerClass' =============");
}
}
}
public class TestStaticClass {
public static void main(String[] args) {
// 不需要new一個(gè)OutClass
new OuterClass.InnerClass();
}
}
同樣的,也可以修飾內(nèi)部接口
class A{
static interface B{
}
}
7窒所、static不能修飾局部變量p睦铡!吵取!
8禽额、Java中的成員變量為什么不能先聲明,再賦值皮官?
答案:成員變量在類的范圍內(nèi)脯倒,存在于堆內(nèi)存中,會(huì)有默認(rèn)的初始值捺氢,在聲明的同時(shí)已經(jīng)給變量賦值了藻丢。再次”賦值“實(shí)際是使用了語句,而類體里面只能出現(xiàn)變量和方法,不能出現(xiàn)語句摄乒。
9郁岩、final修飾的成員變量的初始化方式:
//-----------------成員變量------------------//
//初始化方式一,在定義變量時(shí)直接賦值
private final int i = 3;
//初始化方式二,聲明完變量后在構(gòu)造方法中為其賦值
//如果采用用這種方式缺狠,那么每個(gè)構(gòu)造方法中都要有j賦值的語句
private final int j;
public FinalTest() {
j = 3;
}
//如果取消該構(gòu)造方法的注釋问慎,程序就會(huì)報(bào)錯(cuò),因此它沒有為j賦值
/*public FinalTest1(String str) {
}*/
//為了方便我們可以這樣寫
public FinalTest(String str) {
this(); //調(diào)用無參構(gòu)造器
}
//下面的代碼同樣會(huì)報(bào)錯(cuò)挤茄,因?yàn)閷?duì)j重復(fù)賦值
/*public FinalTest1(String str1, String str2) {
this();
j = 3;
}*/
//初始化方式三如叼,聲明完變量后在構(gòu)造代碼塊中為其賦值
//如果采用此方式,就不能在構(gòu)造方法中再次為其賦值
//構(gòu)造代碼塊中的代碼會(huì)在構(gòu)造函數(shù)之前執(zhí)行穷劈,如果在構(gòu)造函數(shù)中再次賦值笼恰,
//就會(huì)造成final變量的重復(fù)賦值
private final int k;
{
k = 4;
}
//-----------------類變量(靜態(tài)變量)------------------//
//初始化方式一,在定義類變量時(shí)直接賦值
public final static int p = 3;
//初始化方式二歇终,在靜態(tài)代碼塊中賦值
//成員變量可以在構(gòu)造函數(shù)中賦值社证,但是類變量卻不可以。
//因此成員變量屬于對(duì)象獨(dú)有评凝,每個(gè)對(duì)象創(chuàng)建時(shí)只會(huì)調(diào)用一次構(gòu)造函數(shù)追葡,
//因此可以保證該成員變量只被初始化一次;
//而類變量是該類的所有對(duì)象共有,每個(gè)對(duì)象創(chuàng)建時(shí)都會(huì)對(duì)該變量賦值
//這樣就會(huì)造成變量的重復(fù)賦值宜肉。
public final static int q;
static {
q = 3;
}