最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

小議Java中final關(guān)鍵字使用時(shí)的注意點(diǎn)

 更新時(shí)間:2016年06月15日 10:43:55   作者:zeyu203  
final關(guān)鍵字代表著最后、不可改變,無(wú)論是在用final修飾類、修飾方法還是修飾變量時(shí),都要注意內(nèi)存分配的問(wèn)題.這里來(lái)小議Java中final關(guān)鍵字使用時(shí)的注意點(diǎn):

final 類
final 類不能被繼承,同時(shí),一旦用 final 修飾了類,也就意味著 final 類中的所有方法都被隱式地指定為 final 方法

final 方法
在類繼承的過(guò)程中,對(duì)于父類中的 final 方法,子類不能修改和覆蓋。
private 方法都被隱式指定為 final 方法。
有兩個(gè)原因使用 final 方法:

  • 鎖定方法,防止被子類修改其含義
  • 在早期的 java 實(shí)現(xiàn)版本中,final 方法被實(shí)現(xiàn)為內(nèi)嵌調(diào)用,可以提升性能

final 變量
final 關(guān)鍵字用來(lái)修飾變量是最常用的用法,如果修飾成員變量,則必須在定義時(shí)或者構(gòu)造方法中初始化,且一經(jīng)初始化此后不能再進(jìn)行任何賦值。
針對(duì)基本類型和類對(duì)象有著不同的含義:

  • 對(duì)于基本類型,final 變量一經(jīng)初始化,此后不能再改變?cè)撟兞康闹?/li>
  • 對(duì)于類對(duì)象,已經(jīng)初始化后,不能讓這個(gè)變量再指向另一個(gè)對(duì)象,但他指向的對(duì)象的內(nèi)容是可以改變的

static final 域稱為編譯期常量,一般全部大寫(xiě)。

示例

class Glyph {
 void draw() {
  System.out.println("Glyph.draw()");
 }
 Glyph() {
  System.out.println("Glyph() before draw()");
  draw();
  System.out.println("Glyph() after draw()");
 }
}
class RoundGlyph extends Glyph {
 private int redius = 1;
 RoundGlyph(int r) {
  radius = r;
  System.out.println("RoundGlyph.RoundGlyph(), radius = " + radius);
 }
 void draw() {
  System.out.println("RoundGlyph.draw(), radius = " + radius);
 }
}
public class RolyConstructors {
 public static void main(String[] args) {
  new RoundGlyph(5);
 }
}

輸出結(jié)果:

Glyph() before draw()
RoundGlyph.draw(), radius = 0
Glyph() after draw()
RoundGlyph.RoundGlyph(), radius = 5

上面的代碼展示了類初始化過(guò)程以及隱藏的災(zāi)難性問(wèn)題。
main 函數(shù)中以參數(shù) 5 調(diào)用 RoundGlyph 的構(gòu)造函數(shù)創(chuàng)建了 RoundGlyph 對(duì)象,在 RoundGlyph 構(gòu)造方法執(zhí)行前調(diào)用了其父類 Glyph 的構(gòu)造方法。
然而,在父類 Glyph 的構(gòu)造方法中調(diào)用了 draw 方法,由于多態(tài)性,此時(shí)實(shí)際上調(diào)用了子類的 draw 方法,然而子類的 redius 此時(shí)還沒(méi)有通過(guò)構(gòu)造器初始化,因此輸出了:

RoundGlyph.draw(), radius = 0

這顯然不是我們想要的結(jié)果,因此需要注意:

  • 用盡可能簡(jiǎn)單的方法初始化類成員
  • 在構(gòu)造器中最好只調(diào)用 final 方法

第二條的原因是 final 不會(huì)應(yīng)用多態(tài)性,因此可以保證調(diào)用的是當(dāng)前對(duì)象的相應(yīng)方法,而不是初始化工作還沒(méi)有進(jìn)行的子類的覆蓋方法。

總結(jié)final的內(nèi)存分配方式:
1.修飾變量:
通常情況下,final變量有3個(gè)地方可以賦值:直接賦值,構(gòu)造函數(shù)中,或是初始化塊中。
(1)初始化:
由于在java的語(yǔ)法中,聲明和初始化是聯(lián)系在一起的,
也就是說(shuō):如果你不顯示的初始化一個(gè)變量,系統(tǒng)會(huì)自動(dòng)用一個(gè)默認(rèn)值來(lái)對(duì)其進(jìn)行初始化。(如int就是0)
對(duì)于final變量,在聲明時(shí),如果你沒(méi)有賦值,系統(tǒng)默認(rèn)這是一個(gè)空白域,在構(gòu)造函數(shù)進(jìn)行初始化,
如果是靜態(tài)的,則可以在初始化塊。
(2)內(nèi)存:
常量(final變量)和非final變量的處理方式是不一樣的。
每一個(gè)類型在用到一個(gè)常量時(shí),都會(huì)復(fù)制一份到自己的常量池中。
常量也像類變量(static)一樣保存在方法區(qū),只不過(guò)他保存在常量池。
(可能是,類變量被所有實(shí)例共享,而常量池是每個(gè)實(shí)例獨(dú)有的。)
2.修飾方法:
保存在方法區(qū),并且可以被函數(shù)代碼直接替換,而不用等到執(zhí)行時(shí)再?zèng)Q定具體是那個(gè)函數(shù)。
3.修飾類:
保存在方法區(qū)。

相關(guān)文章

  • 了解Java多線程的可見(jiàn)性與有序性

    了解Java多線程的可見(jiàn)性與有序性

    這篇文章主要介紹了了解Java多線程的可見(jiàn)性與有序性,在Java內(nèi)存模型中,允許編譯器和處理器對(duì)指令進(jìn)行重排序,但是重排序過(guò)程不會(huì)影響到單線程程序的執(zhí)行,卻會(huì)影響到多線程并發(fā)執(zhí)行的正確性。,需要的朋友可以參考下
    2019-06-06
  • Jmeter關(guān)聯(lián)實(shí)現(xiàn)及參數(shù)化使用解析

    Jmeter關(guān)聯(lián)實(shí)現(xiàn)及參數(shù)化使用解析

    這篇文章主要介紹了Jmeter關(guān)聯(lián)實(shí)現(xiàn)及參數(shù)化使用解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java網(wǎng)絡(luò)編程基礎(chǔ)教程之Socket入門實(shí)例

    Java網(wǎng)絡(luò)編程基礎(chǔ)教程之Socket入門實(shí)例

    這篇文章主要介紹了Java網(wǎng)絡(luò)編程基礎(chǔ)教程之Socket入門實(shí)例,本文講解了創(chuàng)建Socket、Socket發(fā)送數(shù)據(jù)、Socket讀取數(shù)據(jù)、關(guān)閉Socket等內(nèi)容,都是最基礎(chǔ)的知識(shí)點(diǎn),需要的朋友可以參考下
    2014-09-09
  • Java SpringBoot使用guava過(guò)濾器

    Java SpringBoot使用guava過(guò)濾器

    這篇文章主要介紹了Java SpringBoot使用guava過(guò)濾器,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容戒殺,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • JVM入門之內(nèi)存結(jié)構(gòu)(堆、方法區(qū))

    JVM入門之內(nèi)存結(jié)構(gòu)(堆、方法區(qū))

    JVM 基本上是每家招聘公司都會(huì)問(wèn)到的問(wèn)題,它們會(huì)這么無(wú)聊問(wèn)這些不切實(shí)際的問(wèn)題嗎?很顯然不是。由 JVM 引發(fā)的故障問(wèn)題,無(wú)論在我們開(kāi)發(fā)過(guò)程中還是生產(chǎn)環(huán)境下都是非常常見(jiàn)的
    2021-06-06
  • Java上傳文件錯(cuò)誤java.lang.NoSuchMethodException的解決辦法

    Java上傳文件錯(cuò)誤java.lang.NoSuchMethodException的解決辦法

    今天小編就為大家分享一篇關(guān)于Java上傳文件錯(cuò)誤java.lang.NoSuchMethodException的解決辦法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • java?HttpURLConnection類的disconnect方法與http長(zhǎng)連接詳解

    java?HttpURLConnection類的disconnect方法與http長(zhǎng)連接詳解

    這篇文章主要介紹了java?HttpURLConnection類的disconnect方法與http長(zhǎng)連接,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Spring之Environment類的使用方式

    Spring之Environment類的使用方式

    這篇文章主要介紹了Spring之Environment類的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • MyBatis中有關(guān)int和Integer的使用方式

    MyBatis中有關(guān)int和Integer的使用方式

    這篇文章主要介紹了MyBatis中有關(guān)int和Integer的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Spring Boot基于數(shù)據(jù)庫(kù)如何實(shí)現(xiàn)簡(jiǎn)單的分布式鎖

    Spring Boot基于數(shù)據(jù)庫(kù)如何實(shí)現(xiàn)簡(jiǎn)單的分布式鎖

    這篇文章主要給大家介紹了關(guān)于Spring Boot基于數(shù)據(jù)庫(kù)如何實(shí)現(xiàn)簡(jiǎn)單的分布式鎖的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07

最新評(píng)論

滦南县| 宁都县| 黑水县| 辉县市| 民丰县| 彝良县| 柏乡县| 醴陵市| 大埔县| 永平县| 盐津县| 东乌珠穆沁旗| 广河县| 永济市| 固安县| 宝应县| 庆安县| 保康县| 法库县| 托里县| 平乡县| 隆昌县| 建宁县| 威宁| 英吉沙县| 阳东县| 绍兴市| 新龙县| 房产| 那坡县| 邢台市| 靖西县| 霍城县| 七台河市| 开远市| 濉溪县| 乌恰县| 迁西县| 柘荣县| 钦州市| 蓝田县|