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