代碼塊的執行順序:靜態代碼塊–>構造代碼塊–>構造方法塊。
public class A{
static{
System.out.println("靜態代碼塊!");
}
{
System.out.println("構造代碼塊!");
}
A(){
System.out.println("構造方法塊!");
}
}//輸出結果:靜態代碼塊!-->構造代碼塊!-->構造方法塊!(這個書寫的順序無關)
final修飾局部變量的問題:
1)基本類型:基本類型的值不能夠發生改變;
2)引用類型:引用類型的地址不能發生改變,但是該對象的堆內存的值是可以進行改變。
`public class Person(){
final int age = 10;
Person(){}
public static void main(String[] args){
age = 100;//此處編譯通不過,final變量不能進行改變
final Person p = new Person();
p.setAge(100);//引用中的值是能夠改變
p = new Person();//編譯通不過,因爲引用地址不能改變
}
}`
final修飾的變量只能賦值一次。
抽象類有構造方法,它不是具體的,不能實例化,但是有構造方法,構造方法是用於子類訪問父類數據的初始化。抽象類不一定有抽象方法,但是有抽象方法的一定是抽象類。
- 一個類沒有抽象方法,可以定義爲抽象類,這樣定義的意義就是不讓創建對象。
- abstract不能和final、privatet同時使用(private 和fiinal都不能夠被重寫)、static()(抽象方法是沒有方法體的,而靜態方法是可以通過類名直接調用的,組合在一起使用,沒有意義)
接口
接口成員特點:
1)成員變量:在接口中成員變量只能是常量,並且是靜態的,可以直接通過接口 去訪問。相當於public static final int num = 3;
2)構造方法:接口沒有構造方法,所有的類都默認繼承Object類
3) 成員方法:只能是抽象方法,默認修飾符public abstract。
接口內部類
形式參數:基本類型和引用類型。
類的修飾符不能爲private、protected、static。
內部類訪問特點:
- 內部類可以直接訪問外部類的成員,包括私有;
- 外部類要訪問內部類,必須要創建對象;
成員內部類如何直接訪問內部類的成員:
外部類名.內部類名 對象名 = 外部類對象.內部類對象
Outer.Inner oi = new Outer().new Inner();
成員內部類的修飾符:private爲了保證數據的安全性
static :內部類用static修飾可以看出是外部類的成員,靜態內部類訪問的外部類的數據必須用靜態修改。
成員內部類被靜態修飾後的訪問方式是:
外部類名.內部類名 對象名 = new 外部類名.內部類名()
Outer.Inner oi = new Outer().Inner();
String s1 = new String(“hello”)和 String s2 = “hello”的區別
前者創建兩個對象,而後者是創建一個對象。
s1 == s2是false (s1的引用地址是0001,s2的引用地址是001)
s1.equal(s2)是true,他麼指向的內容都是hello