Java final與泛型詳細(xì)解析
一、final關(guān)鍵字
為什么會(huì)有final關(guān)鍵字?答:確保它們不會(huì)在子類中改變語義。
特點(diǎn):
(1)修飾常量:必須賦值的操作,且只能被賦值一次,之后不可修改;
a.當(dāng)final修飾屬性時(shí)(必須手動(dòng)賦值,系統(tǒng)不會(huì)自動(dòng)賦值):
·所有對象共同用一個(gè)常量時(shí)--可顯示初始化賦值,可代碼塊中初始化;
·當(dāng)每個(gè)對象使用不同值時(shí)->可以構(gòu)造器中初始化。
b.當(dāng)final修飾局部變量時(shí):
·由final修飾變量只可復(fù)制一次,所以final修飾形參后,調(diào)用方法給常量實(shí)參后,在方法體內(nèi)不可重新賦值;
c.當(dāng)final修飾引用類型變量時(shí):
·不可以賦予其新對象(新地址),但是對象中的內(nèi)部信息可以更改。
(2)修飾方法:final修飾的方法不能被重寫;
(3)修飾類:final修飾的類不能被繼承,String就是final修飾的類。
(4)static final修飾屬性->全局常量:
·聲明在方法區(qū)中,可以節(jié)省空間,無需使創(chuàng)建一次對象新建一次
二、泛型<>——泛指一切類型
相關(guān)知識(shí):棧是一種滿足數(shù)據(jù)先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu)。
示例代碼:
//入棧操作↓
void push(int value){
top++;
arr[top]=value;
}
//出棧操作↓
void pop(){
println(arr[top]);
top--;
}關(guān)于鏈表的刪除:計(jì)算機(jī)中沒有真正意義上的刪除,只需原來指向某一對象對應(yīng)地址的指針跳過該對象,此對象不被使用之后就會(huì)被回收,完成鏈表的“刪除”。
public class Stack<哈基米>{
private 哈基米 arr[];
private int top;
public Stack(int size){
arr=(哈基米[])new Object[size];//強(qiáng)轉(zhuǎn)換
top=-1;
}
public void push(哈基米 value){
if(top==arr.length-1){
System.out.println("棧已滿")
return;
}
arr[++top]=value;
}
public void pop(){
if(top==-1){
System.out.println("棧已空");
return;
}
}
System.out.println(arr[top--]);
}概念:泛型就是把“類型”當(dāng)成“參數(shù)”來傳,一份代碼能適用多種類型。
public static void main(String[] args){
//整形
Stack<Integer> stack=new Stack<>(size:10);
stack.push(value:1);
stack.push(value:2);
stack.push(value:3);
stack.push(value:4);
stack.pop();
stack.pop();
//字符串
Stack<String>stack1=new Stack<>(size:10);
stack1.push(value:"張三");
stack1.push(value:"李四");
stack1.push(value:"王五");
stack1.pop();
stack1.pop();
//浮點(diǎn)型
Stack<Double> stack2=new Stack<>(size:10);
stack2.push(value:1.1);
stack2.push(value:1.1);
stack2.pop();
}
}
//輸出為 4
3
2
王五
李四
2.2三、包裝類
Java說萬物皆對象,為什么有包裝類?
答:基本數(shù)據(jù)類型不能有對象屬性,基本數(shù)據(jù)類型不能方法的調(diào)用。
基本數(shù)據(jù)類型對應(yīng)的包裝類:
| 基本數(shù)據(jù)類型 | int | double | boolean | char | long | float | short |
| 包裝類 | Integer | Double | Boolean | Character | Long | Float | Short |
面試題:128陷阱
public static Integer valueOf(int i){
if(i>=IntegerCache.low&&i<=IntegerCache.high)
return IntegerCache.cache[i+(-IntegerCache.low)];
return new Integer(i);
}Integer i=127; Integer j=127; System.out.println(i==j);//true Integer k=128; Integer l=128; System.out.println(k==l);//false
包裝類的自動(dòng)拆裝箱:因?yàn)橛凶詣?dòng)拆裝箱的存在,所以包裝定義的數(shù)據(jù)和基本數(shù)據(jù)類型可以相互轉(zhuǎn)換。

i、j、k、l在內(nèi)存圖中的具體表現(xiàn)是如何的呢?
堆內(nèi)存中有Cache數(shù)組(-128~127),首先main方法入棧,i入?yún)?27在-128~127之間,則返回了127的地址值,同理,j入?yún)?27在-128~127之間,則返回了127的地址值,它們指向同一個(gè)地址,所以返回true。而k和l呢?k入?yún)⒘?28,并不在-128~127之間,所以會(huì)重新創(chuàng)建了新對象,返回新的地址,l入?yún)⒘?28,并不在-128~127之間,所以會(huì)重新創(chuàng)建了新對象,返回新的地址,但是它們創(chuàng)建的新地址并不相同,所以返回false。
總結(jié):我們使用Integer定義的數(shù)據(jù)會(huì)自動(dòng)進(jìn)行裝箱,自動(dòng)裝箱調(diào)用valueOf()方法,該方法會(huì)判斷我們?nèi)雲(yún)⑹欠裨?128~127之間,如果愛這之間,則會(huì)返回一個(gè)已存在的對象的地址(該對象在Cache數(shù)組中,Cache數(shù)組是一個(gè)從-128~127的數(shù)組),則不會(huì)創(chuàng)建新對象,反之則重新創(chuàng)建對象。
自動(dòng)裝箱:基本數(shù)據(jù)類型->包裝類
自動(dòng)拆箱:包裝類->基本數(shù)據(jù)類型
基本數(shù)據(jù)類型和引用數(shù)據(jù)類型用==做輸出的時(shí)候會(huì)自動(dòng)拆裝箱,例如Integer型和int型做==輸出會(huì)自動(dòng)拆箱到int型,兩個(gè)數(shù)比較數(shù)值,相同則返回true,反之則返回false。但是兩個(gè)相同數(shù)據(jù)類型的則不會(huì)進(jìn)行自動(dòng)拆裝箱,例如Integer和Integer進(jìn)行==輸出。
到此這篇關(guān)于Java final與泛型詳細(xì)解析的文章就介紹到這了,更多相關(guān)Java final與泛型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文帶你深入了解SpringBoot配置文件的優(yōu)先級(jí)
這篇文章主要為大家詳細(xì)介紹了SpringBoot中配置文件的優(yōu)先級(jí)以及實(shí)際應(yīng)用建議,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2026-04-04
Java中報(bào)錯(cuò)org.springframework.jdbc.UncategorizedSQLException的多種
本文主要介紹了Java中報(bào)錯(cuò)org.springframework.jdbc.UncategorizedSQLException的多種解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
使用Springboot實(shí)現(xiàn)word在線編輯保存
PageOffice目前支持的Web編程語言及架構(gòu)有:Java(JSP、SSH、MVC等),ASP.NET(C#、VB.NET、MVC、Razor等),PHP,ASP,本篇文章就帶你使用Springboot整合PageOffice實(shí)現(xiàn)word在線編輯保存2021-08-08
SpringMVC空指針異常NullPointerException解決及原理解析
這篇文章主要介紹了SpringMVC空指針異常NullPointerException解決及原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
Java對象簡單實(shí)用案例之計(jì)算器實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了Java對象簡單實(shí)用案例之計(jì)算器實(shí)現(xiàn)代碼2016-11-11
Java面向?qū)ο蠡A(chǔ)之多態(tài)性,抽象類和接口
這篇文章主要介紹了Java面向?qū)ο蠡A(chǔ):多態(tài)性,抽象類和接口,文中代碼可以幫助各位更好的理解學(xué)習(xí),有需求的小伙伴可以參考下2020-05-05
Spring?Boot?3中一套可以直接用于生產(chǎn)環(huán)境的Log4J2日志配置詳解
Log4J2是Apache Log4j的升級(jí)版,參考了logback的一些優(yōu)秀的設(shè)計(jì),并且修復(fù)了一些問題,因此帶來了一些重大的提升,這篇文章主要介紹了Spring?Boot?3中一套可以直接用于生產(chǎn)環(huán)境的Log4J2日志配置,需要的朋友可以參考下2023-12-12

