JAVA
數組
int[] name;
int name[];
-
name = new int[5];
(在已經聲明了name數組的情況下) -
int[] name = {1,2,3};
等價于int[] scores = new int[]{1,2,3};
類
- 類名 對象名=new 構造方法名();
- 成員變量與局部變量(含義、作用、作用域、初始化時是否會賦值、優先級)
- 構造方法(與類名相同):成員變量賦值
static
- 被static修飾的成員所有對象共享,又稱靜態成員/類成員,靜態成員屬于整個類,當系統第一次使用該類時,就會為其分配內存空間直到該類被卸載才會進行資源回收!
- 靜態變量
- 靜態方法:
1、靜態方法中可以直接調用同類中的靜態成員(包括屬性和方法),但不能直接調用非靜態成員;如果希望在靜態方法中調用非靜態變量,可以通過創建類的對象,然后通過對象來訪問非靜態變量
2、在普通成員方法中,則可以直接訪問同類的非靜態變量和靜態變量
靜態初始化塊
int num3;
{
num3 = 1;
}
- 在類的聲明中,可以包含多個初始化塊,當創建類的實例時,就會依次執行這些代碼塊。如果使用 static 修飾初始化塊,就稱為靜態初始化塊。
- 靜態初始化塊只在類加載時執行,且只會執行一次,同時靜態初始化塊只能給靜態變量賦值,不能初始化普通的成員變量。
- 程序運行時靜態初始化塊最先被執行,然后執行普通初始化塊,最后才執行構造方法。由于靜態初始化塊只在類加載時執行一次,所以當再次創建對象時并未執行靜態初始化塊。
封裝
- 1、修改屬性的可見性(private)
- 2、創建“get+首字母大寫的屬性名”方法
- 3、在方法里進行屬性值的過濾,賦值時調用2中所描述的方法
注意:也可以不用2中所說的方法命名方式,但這是一種編程的規范。
包
- 作用:管理java文件,解決同名文件沖突
- 定義方式:package + 包名(必須放在程序第一行。類似于php的命名空間)
- 規范:全小寫
訪問修飾符
訪問修飾符 | 本類 | 同包 | 子類 | 其他 |
---|---|---|---|---|
private | √ | |||
默認 | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
內部類
- 定義在一個類里面的類
- 作用:
1、 內部類提供了更好的封裝,可以把內部類隱藏在外部類之內,不允許同一個包中的其他類訪問該類
2、 內部類的方法可以直接訪問外部類的所有數據,包括私有的數據
3、內部類所實現的功能使用外部類同樣可以實現,只是有時使用內部類更方便
- demo
//外部類HelloWorld
public class HelloWorld {
// 內部類Inner,類Inner在類HelloWorld的內部
public class Inner {
// 內部類的方法
public void show() {
System.out.println("welcome to imooc!");
}
}
public static void main(String[] args) {
// 創建外部類對象
HelloWorld hello = new HelloWorld();
// 創建內部類對象
Inner i = hello.new Inner();
// 調用內部類對象的方法
i.show();
}
}
- 種類:成員內部類、靜態內部類、方法內部類、匿名內部類
1、成員內部類(普通內部類)
- 定義在外部類的內部,相當于外部類的一個成員變量??梢允褂萌我獾脑L問控制符。
- 內部類的方法可以訪問外部類的數據,不受訪問控制符的影響。
- 使用方式:內部類 對象名 = 外部類對象.new.內部類()
- 編譯時生成兩個.class文件,除了默認的.class文件之外,另外一個命名為:外部類$內部類.class
- 外部類不能直接使用內部類的成員和方法
- 如果外部類和內部類具有相同的成員變量或方法,內部類默認訪問自己的成員變量或方法,如果要訪問外部類的成員變量,可以使用 this 關鍵字。
- 例子:
//外部類HelloWorld
public class HelloWorld{
//外部類的私有屬性name
private String name = "imooc";
//外部類的成員屬性
int age = 20;
//成員內部類Inner
public class Inner {
String name = "愛慕課";
//內部類中的方法
public void show() {
System.out.println("外部類中的name:" + HelloWorld.this.name);
System.out.println("內部類中的name:" + name);
System.out.println("外部類中的age:" + age);
}
}
//測試成員內部類
public static void main(String[] args) {
//創建外部類的對象
HelloWorld o = new HelloWorld ();
//創建內部類的對象
Inner inn = o.new Inner();
//調用內部類對象的show方法
inn.show();
}
}
2、靜態內部類
- 靜態內部類是 static 修飾的內部類
- 靜態內部類不能直接訪問外部類的非靜態成員,但可以通過 new 外部類().成員 的方式訪問
- 如果外部類的靜態成員與內部類的成員名稱相同,可通過“類名.靜態成員”訪問外部類的靜態成員;如果外部類的靜態成員與內部類的成員名稱不相同,則可通過“成員名”直接調用外部類的靜態成員
- 創建靜態內部類的對象時,不需要外部類的對象,可以直接創建 內部類 對象名= new 內部類();
- 例子:
//外部類
public class HelloWorld {
// 外部類中的靜態變量score
private static int score = 84;
// 創建靜態內部類
public static class SInner {
// 內部類中的變量score
int score = 91;
public void show() {
System.out.println("訪問外部類中的score:" + HelloWorld.score);
System.out.println("訪問內部類中的score:" + score);
}
}
// 測試靜態內部類
public static void main(String[] args) {
// 直接創建內部類的對象
SInner si = new SInner();
// 調用show方法
si.show();
}
}
3、方法內部類
- 方法內部類就是內部類定義在外部類的方法中,方法內部類只在該方法的內部可見,即只在該方法內可以使用。
- 由于方法內部類不能在外部類的方法以外的地方使用,因此方法內部類不能使用訪問控制符和 static 修飾符。
- 例子:
//外部類
public class HelloWorld {
private String name = "愛慕課";
// 外部類中的show方法
public void show() {
// 定義方法內部類
class MInner {
int score = 83;
public int getScore() {
return score + 10;
}
}
// 創建方法內部類的對象
MInner inner = new MInner();
// 調用內部類的方法
int newScore = inner.getScore();
System.out.println("姓名:" + name + "\n加分后的成績:" + newScore);
}
// 測試方法內部類
public static void main(String[] args) {
// 創建外部類的對象
HelloWorld mo = new HelloWorld();
// 調用外部類的方法
mo.show();
}
}
4、匿名內部類