Java關(guān)鍵字詳解之final static this super的用法
final,static,this,super 關(guān)鍵字總結(jié)
正文開(kāi)始@Assassin
1. final 關(guān)鍵字:
final 關(guān)鍵字,意思是最終的、不可改變的,初始化之后就不能再次修改 ,用來(lái)修飾類(lèi)、方法和變量,具有以下特點(diǎn):
final修飾的類(lèi)不能被繼承,final類(lèi)中的所有成員方法都會(huì)被隱式的指定為 final 方法;final修飾的方法不能被重寫(xiě);final修飾的變量是常量,如果是基本數(shù)據(jù)類(lèi)型的變量,則其數(shù)值一旦在初始化之后便不能更改;如果是引用類(lèi)型的變量,則在對(duì)其初始化之后便不能讓其指向另一個(gè)對(duì)象;
final的使用場(chǎng)景:使用 final 方法的原因有兩個(gè)。第一個(gè)原因是把方法鎖定,以防任何繼承類(lèi)修改它的含義;第二個(gè)原因是效率。在早期的 Java 實(shí)現(xiàn)版本中,會(huì)將 final 方法轉(zhuǎn)為內(nèi)嵌調(diào)用。但是如果方法過(guò)于龐大,可能看不到內(nèi)嵌調(diào)用帶來(lái)的任何性能提升(現(xiàn)在的 Java 版本已經(jīng)不需要使用 final 方法進(jìn)行這些優(yōu)化了)。類(lèi)中所有的 private 方法都隱式地指定為 final。
2. static 關(guān)鍵字:
static 關(guān)鍵字主要有以下四種使用場(chǎng)景:
- 修飾成員變量和成員方法: 被
static修飾的成員屬于類(lèi),不屬于單個(gè)這個(gè)類(lèi)的某個(gè)對(duì)象,也就是說(shuō)被類(lèi)中所有對(duì)象共享,可以并且建議通過(guò)類(lèi)名調(diào)用(創(chuàng)建對(duì)象來(lái)調(diào)用也不報(bào)錯(cuò),不建議 )。被static聲明的成員變量屬于靜態(tài)成員變量,靜態(tài)變量 存放在Java內(nèi)存區(qū)域的方法區(qū)。調(diào)用格式:類(lèi)名.靜態(tài)變量名,類(lèi)名.靜態(tài)方法名() - 靜態(tài)代碼塊: 靜態(tài)代碼塊定義在類(lèi)中方法外, 靜態(tài)代碼塊在非靜態(tài)代碼塊之前執(zhí)行(靜態(tài)代碼塊—>非靜態(tài)代碼塊—>構(gòu)造方法)。 該類(lèi)不管創(chuàng)建多少對(duì)象,靜態(tài)代碼塊只執(zhí)行一次;
- 靜態(tài)內(nèi)部類(lèi)(static 修飾類(lèi)的話只能修飾內(nèi)部類(lèi)): 靜態(tài)內(nèi)部類(lèi)與非靜態(tài)內(nèi)部類(lèi)之間存在一個(gè)最大的區(qū)別: 非靜態(tài)內(nèi)部類(lèi)在編譯完成之后會(huì)隱含地保存著一個(gè)引用,該引用是指向創(chuàng)建它的外圍類(lèi),但是靜態(tài)內(nèi)部類(lèi)卻沒(méi)有。沒(méi)有這個(gè)引用就意味著:1. 它的創(chuàng)建是不需要依賴(lài)外圍類(lèi)的創(chuàng)建。2. 它不能使用任何外圍類(lèi)的非 static 成員變量和方法。
- 靜態(tài)導(dǎo)包(用來(lái)導(dǎo)入類(lèi)中的靜態(tài)資源,1.5 之后的新特性): 格式為:
import,static這兩個(gè)關(guān)鍵字連用可以指定導(dǎo)入某個(gè)類(lèi)中的指定靜態(tài)資源,并且不需要使用類(lèi)名調(diào)用類(lèi)中靜態(tài)成員,可以直接使用類(lèi)中靜態(tài)成員變量和成員方法。
3. this 關(guān)鍵字:
this 是自身的一個(gè)對(duì)象的引用,可以簡(jiǎn)單地理解為代表對(duì)象本身,(本質(zhì)上this是一個(gè)變量,存儲(chǔ)的是當(dāng)前對(duì)象的地址)。站在內(nèi)存的角度,也就是說(shuō):this是指向?qū)ο蟊旧淼囊粋€(gè)指針。
this 的用法在 Java 中大體可以分為3種:
- 普通的直接引用
this是當(dāng)前對(duì)象的一個(gè)引用,相當(dāng)于是指向當(dāng)前對(duì)象本身。
- 形參與成員名字重名,用 this 來(lái)區(qū)分:
class Person {
private int age = 10;
public Person(){
System.out.println("初始化年齡:"+age);
}
public int getAge(int age){
this.age = age;
return this.age;
}
}
public class TestDemo {
public static void main(String[] args) {
Person assassin = new Person();
System.out.println("assassin's age is " + assassin .getAge(12));
}
}
運(yùn)行結(jié)果:


可以看到,這里 age 是 getAge 成員方法的形參,this.age 是 Person 類(lèi)的成員變量。
- 引用構(gòu)造函數(shù)
下面與super一起講,this跟super很像,都是對(duì)象的引用;
4. super 關(guān)鍵字:
super可以理解為是指向自己父(超/基)類(lèi)對(duì)象的一個(gè)指針,指向的是離自己最近的一個(gè)父類(lèi)。
super 也有三種用法:
- 普通的直接引用
與this 類(lèi)似,super 相當(dāng)于是指向當(dāng)前對(duì)象的父類(lèi),這樣就可以用 super.xxx 來(lái)引用父類(lèi)的成員。
- 子類(lèi)中的成員變量或方法與父類(lèi)中的成員變量或方法同名
實(shí)例:
package com.test;
class Country {
String name;
void value() {
name = "China";
}
}
class City extends Country {
String name;
void value() {
name = "Shanghai";
super.value(); //調(diào)用父類(lèi)的方法
System.out.println(name);
System.out.println(super.name);
}
public static void main(String[] args) {
City c=new City();
c.value();
}
}
運(yùn)行結(jié)果:


可以看到,這里既調(diào)用了父類(lèi)的方法,也調(diào)用了父類(lèi)的變量。若不調(diào)用父類(lèi)方法 value(),只調(diào)用父類(lèi)變量 name 的話,則父類(lèi) name 值為默認(rèn)值 null。
- 引用構(gòu)造函數(shù)
super(參數(shù)):調(diào)用父類(lèi)中的某一個(gè)構(gòu)造函數(shù)(應(yīng)該為構(gòu)造函數(shù)中的第一條語(yǔ)句)。
this(參數(shù)):調(diào)用本類(lèi)中另一種形式的構(gòu)造函數(shù)(應(yīng)該為構(gòu)造函數(shù)中的第一條語(yǔ)句)。
使用 this 和 super 要注意的問(wèn)題:
- 在構(gòu)造器中使用
super()調(diào)用父類(lèi)中的其他構(gòu)造方法時(shí),該語(yǔ)句必須處于構(gòu)造器的首行,否則編譯器會(huì)報(bào)錯(cuò)。另外,this調(diào)用本類(lèi)中的其他構(gòu)造方法時(shí),也要放在首行。-this、super不能用在static方法中。
簡(jiǎn)單解釋一下:
被 static 修飾的成員屬于類(lèi),不屬于單個(gè)這個(gè)類(lèi)的某個(gè)對(duì)象,被類(lèi)中所有對(duì)象共享。而 this 代表對(duì)本類(lèi)對(duì)象的引用,指向本類(lèi)對(duì)象;而 super 代表對(duì)父類(lèi)對(duì)象的引用,指向父類(lèi)對(duì)象;所以, this 和 super 是屬于對(duì)象范疇的東西,而靜態(tài)方法是屬于類(lèi)范疇的東西。
到此這篇關(guān)于Java關(guān)鍵字詳解之final static this super的用法的文章就介紹到這了,更多相關(guān)Java final 用法 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解Java編程中static關(guān)鍵字和final關(guān)鍵字的使用
- java 中的static關(guān)鍵字和final關(guān)鍵字的不同之處
- java多線程關(guān)鍵字final和static詳解
- Java中final、static關(guān)鍵字與方法的重寫(xiě)和繼承易錯(cuò)點(diǎn)整理
- Java中的static和final關(guān)鍵字的使用詳解
- Java關(guān)鍵字final、static使用總結(jié)
- 學(xué)習(xí)Java的static與final關(guān)鍵字
- Java static 與 final關(guān)鍵字實(shí)例詳解
- Java中static與final關(guān)鍵字詳解(簡(jiǎn)單易懂)
相關(guān)文章
java實(shí)現(xiàn)簡(jiǎn)單的圖書(shū)借閱系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單的圖書(shū)借閱系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
Java中將多個(gè)PDF文件合并為一個(gè)PDF的方法步驟
這篇文章主要給大家介紹了關(guān)于Java中將多個(gè)PDF文件合并為一個(gè)PDF的方法步驟, Java PDF合并是指將多個(gè)PDF文件合并成一個(gè)PDF文件的過(guò)程,需要的朋友可以參考下2023-09-09
Java從控制臺(tái)接受輸入字符的簡(jiǎn)單方法
這篇文章主要介紹了Java從控制臺(tái)接受輸入字符的簡(jiǎn)單方法,需要的朋友可以參考下2014-02-02
SpringBoot使用mybatis-plus分頁(yè)查詢(xún)無(wú)效的問(wèn)題解決
MyBatis-Plus提供了很多便捷的功能,包括分頁(yè)查詢(xún),本文主要介紹了SpringBoot使用mybatis-plus分頁(yè)查詢(xún)無(wú)效的問(wèn)題解決,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12
簡(jiǎn)單的java圖片處理類(lèi)(圖片水印 圖片縮放)
本圖片處理類(lèi)功能非常之強(qiáng)大可以實(shí)現(xiàn)幾乎所有WEB開(kāi)發(fā)中對(duì)圖像的處理功能都集成了,包括有縮放圖像、切割圖像、圖像類(lèi)型轉(zhuǎn)換、彩色轉(zhuǎn)黑白、文字水印、圖片水印等功能2013-11-11
SpringBoot配置MongoDB多數(shù)據(jù)源的方法步驟
這篇文章主要介紹了SpringBoot配置MongoDB多數(shù)據(jù)源的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
Spring ApplicationContextAware 接口的作用及使用方式
Spring提供了許多回調(diào)接口,用于Bean生命周期中執(zhí)行特定的操作,通過(guò)實(shí)現(xiàn)ApplicationContextAware接口,Spring提供了一種便捷的方式讓 Bean獲取對(duì)Spring容器的引用,本文介紹ApplicationContextAware接口的作用、使用方式,以及在實(shí)際應(yīng)用中的常見(jiàn)場(chǎng)景,感興趣的朋友一起看看吧2024-01-01
使用kotlin集成springboot開(kāi)發(fā)的超詳細(xì)教程
目前大多數(shù)都在使用java集成 springboot進(jìn)行開(kāi)發(fā),本文演示僅僅將 java換成 kotlin,其他不變的情況下進(jìn)行開(kāi)發(fā),需要的朋友可以參考下2021-09-09

