變量
分類
- 實例變量(non-static 修飾)
- 類變量(static 修飾)
- 本地變量
- 參數(shù)
命名規(guī)則
- 區(qū)分大小寫
- 字母砚亭、數(shù)字旭咽、$、_
- 如果變量名包含多個單詞使用_連接單詞
- 不能以數(shù)字和$開頭
數(shù)據(jù)類型
- byte (8 bit)
- short (16 bit)
- int (默認(rèn)整數(shù)類型 32 bit Java 8 可以表示無符號數(shù))
- long (64 bit Java 8 可以表示無符號數(shù))
- float (32 bit IEEE754標(biāo)準(zhǔn))
- double (默認(rèn)浮點數(shù)類型 64 bit)
- boolean (true、false)
- char (16 bit Unicode 字符)
控制流程
switch:可以使用byte灿里、int云芦、short俯逾、char、Enum舅逸、String以及除Long之外的封裝類
修飾符權(quán)限
修飾符 | Class | Package | Subclass | World |
---|---|---|---|---|
public | ture | ture | ture | ture |
protected | ture | ture | ture | false |
default | ture | ture | false | false |
private | ture | false | false | false |
內(nèi)部類
內(nèi)部類分為:內(nèi)部類桌肴、本地類、匿名類
- 內(nèi)部類:定義在類中的類
- 本地類:定義在代碼塊中的類
- 匿名類:實現(xiàn)特定的接口類
本地類與內(nèi)部類的區(qū)別
- 都不能定義或聲明任何靜態(tài)參數(shù)
- 在靜態(tài)方法中定義的本地類 僅能訪問附屬類的靜態(tài)參數(shù)
- 本地類是非static,因為它能訪問附屬類的實例參數(shù)
- 在代碼快里面不能聲明任何接口,因為接口本質(zhì)上是static
- 在本地類不能聲明靜態(tài)初始化器或成員接口
- 本地類可以有常量(static final 修飾)
java 8之后本地內(nèi)使用的附屬類參數(shù)可以不使用final修飾包括方法參數(shù)
匿名類
- 可以訪問附屬類私有成員
- 不能訪問不是final修飾的本地變量
- 可以聲明與附屬類相同名的變量以達(dá)到數(shù)據(jù)隱藏
- 不能聲明靜態(tài)初始化器或成員接口
- 可以有常量(static final 修飾)
- 不能在匿名類聲明Fields琉历、實例變量坠七、本地類、額外的方法
- 不能聲明構(gòu)造器
什么時候使用內(nèi)部類旗笔、本地類彪置、匿名類、Lambda表達(dá)式
- 內(nèi)部類:如果需要創(chuàng)建超過一個類實例來訪問構(gòu)造函數(shù)或引入一個新的命名類型
- 本地類:如果需要聲明字段或其他方法
- Lambda表達(dá)式:1蝇恶、如果您封裝了要傳遞給其他代碼的單個行為單元拳魁。2、如果您需要一個功能接口的簡單實例撮弧,并且不適用上述條件
- 匿名類:如果您的需求類似于本地類的要求潘懊,要使類型更廣泛可用姚糊,并且不需要訪問本地變量或方法參數(shù)。靜態(tài)(對訪問沒有要求)授舟,非靜態(tài)(需要訪問一個封閉的實例非公有字段和方法)
注解
注解可以在屬性救恨、類、方法或其它元素
在Java 8之后可以在
- Class instance creation expression:
new @Interned MyObject();
- Type cast:
myString = (@NonNull String) str;
- implements clause:
class UnmodifiableList<T> implements @Readonly List<@Readonly T> { ... }
- Thrown exception declaration:
void monitorTemperature() throws @Critical TemperatureException { ... }
Java 8之后支持重復(fù)注解
定義重復(fù)注解
import java.lang.annotation.Repeatable;
@Repeatable(Schedules.class)
public @interface Schedule {
String dayOfMonth() default "first";
String dayOfWeek() default "Mon";
int hour() default 12;
}
public @interface Schedules {
Schedule[] value();
}
@Schedule(dayOfMonth="last")
@Schedule(dayOfWeek="Fri", hour="23")
public void doPeriodicCleanup() { ... }