一、權(quán)限修飾符
權(quán)限修飾符 用于約束成員變量、構(gòu)造器、方法等的訪問范圍。
權(quán)限修飾符: 有四種作用范圍由小到大 (private -> 缺省 ->protected - > public)
注: 不同包下的子類指的是,不同包下的子類對象能訪問,當(dāng)前類創(chuàng)建父類對象訪問不了。
// 模擬不同包下的子類
public class Zi extends Fu {
public static void main(String[] args) {
Fu fu = new Fu();
// fu.privateMethod(); 訪問不了
// fu.method(); 訪問不了
// fu.protectedMethod(); 訪問不了
fu.publicMethod();
Zi zi = new Zi();
zi.protectedMethod(); // 可以訪問 protected
}
}
定義成員變量、構(gòu)造器、方法等一般需滿足如下要求:
① 成員變量一般私有。
② 方法一般公開。
③ 如果該成員只希望本類訪問,使用 private 修飾。
④ 如果該成員只希望本類,同一個(gè)包下的其他類和子類訪問,使用 protected 修飾。
二、final 關(guān)鍵字
2.1 final 作用
final
關(guān)鍵字是最終的意思,可以修飾類、方法與變量。
- 修飾類: 類不能被繼承。工具類可以用 final 修飾。
- 修飾方法: 方法不能被重寫。 模板方法可以用 final。
- 修飾變量: 有且僅能被賦值一次。
2.2 final 修飾變量舉例
final 修飾 基本數(shù)據(jù)類型 的變量,其存儲(chǔ)的數(shù)據(jù)不能改變。
final 修飾 引用類型 的變量,其存儲(chǔ)的地址不能改變,但是指向的對象內(nèi)容可以改變。
舉例:final 修飾變量
public class Test {
// 修飾靜態(tài)成員變量( public static final 修飾的也稱為常量,必須一次賦完值 )
public static final String name = "idea"; // 引用類型
// 修飾實(shí)例成員變量( 必須一次賦完值,幾乎不用 )
public final String novelName = "孫悟空";
public static void main(String[] args) {
// final 修飾變量,總規(guī)則:變量有且僅能賦值一次
// 變量有兩種:局部變量;成員變量(實(shí)例成員變量、靜態(tài)成員變量)
// 局部變量
final double rate = 3.14; // 基本數(shù)據(jù)類型
// rate = 4.23; 報(bào)錯(cuò),第二次賦值
// 成員變量
// name = "dev"; // 報(bào)錯(cuò),第二次賦值
// new Test().novelName = "唐僧"; // 報(bào)錯(cuò),第二次賦值
}
}
new Test().novelName = “唐僧”;
報(bào)錯(cuò)是由于引用地址發(fā)生了變化,內(nèi)存原理是在堆內(nèi)存的常量池中存儲(chǔ)了一個(gè)“唐僧”的變量,并將引用地址賦給 novelName。
參考:Java 基礎(chǔ)入門篇(六)—— String 類詳解
舉例:final 修飾引用類型的變量
class Teacher{
private String hobby;
public Teacher(String s) {
hobby = s;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
}
public class Test {
public static void main(String[] args) {
// 注意: final修飾引用類型的變量,其地址值不能改變,但是指向的對象的內(nèi)容可以改變的。
final Teacher teacher = new Teacher("學(xué)習(xí),授課");
teacher.setHobby("打籃球");
System.out.println(teacher.getHobby()); // 打籃球
}
}
沒有報(bào)錯(cuò)的原因:雖然 teacher 對象內(nèi)部的引用數(shù)據(jù)的地址發(fā)生了變化,但是 teacher 對象的引用地址沒有發(fā)生變化。
2.3 常量
常量是 public static final
修飾的成員變量,有且僅能賦值一次。
作用:做系統(tǒng)的配置信息,方便程序維護(hù),提高可讀性。
規(guī)范:名稱全部大寫,多個(gè)單詞用下劃線連接
常量會(huì)出現(xiàn)宏替換:所以常量名的地方在編譯后都是變成真實(shí)的數(shù)據(jù)。
接口中的常量,默認(rèn)加上 public static final
修飾,不寫也有。如我們一般在項(xiàng)目中定義的常量接口:
三、枚舉
枚舉是一種特殊類型,其用來做信息的標(biāo)志和信息的分類。
3.1 枚舉的格式
3.2 枚舉的特征
反編譯后觀察枚舉的特征:
使用 javap 命令反編譯 class 文件得到如下結(jié)果:
特征如下:
① 枚舉類都是繼承了枚舉類型 java.lang.Enum。
② 枚舉都是最終類,不可以被繼承。
③ 構(gòu)造器的構(gòu)造器都是私有的,枚舉對外不能創(chuàng)建對象。(看不到)
④ 枚舉類的第一行默認(rèn)都是羅列枚舉對象的名稱的。
⑤ 枚舉類相當(dāng)于是多例模式,如上文只有四個(gè)對象。
3.3 枚舉的應(yīng)用
應(yīng)用 1:業(yè)務(wù)枚舉類與業(yè)務(wù)結(jié)果包裝類
/**
* 業(yè)務(wù)消息枚舉
*/
public enum CodeMsg {
SUCCESS(200, "操作成功"),
ERROR(110, "程序員送外賣去了"),
USERNAME_PASSWORD_ERROR(4001001, "用戶名或者密碼錯(cuò)誤!"),
USER_LOGIN_NAME_EXIST_ERROR(4001002, "用戶登陸名已經(jīng)存在!"),
USER_PHONE_EXIST_ERROR(4001003, "用戶手機(jī)號(hào)已被使用!");
public Integer code; // 業(yè)務(wù)碼
public String msg; // 業(yè)務(wù)消息
CodeMsg(Integer code, String msg){
this.code = code;
this.msg = msg;
}
}
/**
* 業(yè)務(wù)結(jié)果包裝類
* 前端需要: code msg data 這樣的數(shù)據(jù)格式
* 因此后端對數(shù)據(jù)進(jìn)行包裝
*/
@Data
public class Result {
private Integer code; //業(yè)務(wù)碼
private String msg; // 業(yè)務(wù)消息
private Object data; // 業(yè)務(wù)數(shù)據(jù)
/*
所有的業(yè)務(wù)分為兩種情況:
1. 成功:
1. 成功了沒數(shù)據(jù) 如:刪除
2. 成功了有返回?cái)?shù)據(jù) 如:查詢
2. 失?。? 失敗時(shí)沒有數(shù)據(jù),返回失敗原因
*/
/**
* 成功沒有數(shù)據(jù)
*/
public Result(){
this.code = CodeMsg.SUCCESS.code;
this.msg = CodeMsg.SUCCESS.msg;
}
/**
* 成功有數(shù)據(jù)
*/
public Result(Object data){
this();
this.data = data;
}
/**
* 失敗時(shí)沒有數(shù)據(jù),返回失敗原因
*/
public Result(CodeMsg codeMsg){
this.code = codeMsg.code;
this.msg = codeMsg.msg;
}
/**
* 兼容異常信息
* 因?yàn)楫惓V?code 和 msg
* @param businessException
*/
public Result(BusinessException businessException){
this.code = businessException.getCode();
this.msg = businessException.getMessage();
}
}
應(yīng)用 2:switch 兼容枚舉類文章來源:http://www.zghlxwxcb.cn/news/detail-431210.html
public void showSeason(Season s){
switch (s){
case SPRING: // 不用寫成 s.SPRING, switch 兼容枚舉
break;
case SUMMER:
break;
case AUTUMN:
break;
case WINTER:
break;
default:
break;
}
}
文章參考:Java入門基礎(chǔ)視頻教程,java零基礎(chǔ)自學(xué)就選黑馬程序員Java入門教程(含Java項(xiàng)目和Java真題)文章來源地址http://www.zghlxwxcb.cn/news/detail-431210.html
到了這里,關(guān)于Java 基礎(chǔ)進(jìn)階篇(三)—— 權(quán)限修飾符、final 關(guān)鍵字與枚舉的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!