static与final关键字
在Java中,final關鍵字可以用來修飾類、方法和變量(包括成員變量和局部變量)。
1、修飾類: ?當用final修飾一個類時,表明這個類是最終類,不能被繼承。如果一個類你不想讓它被繼承,就可以用final進行修飾。
2、修飾方法:使用final修飾的方法不能被子類重寫。(最終方法)
3、修飾變量: 對于一個final變量,如果是基本數據類型的變量,則其數值一旦在初始化之后便不能更改;如果是引用類型的變量,則在對其初始化之后便不能再讓其指向另一個對象。
由final修飾的變量,是常量,一旦初始化后,它的值不能被修改,即不能被重新賦值,主要是項目中應用的常量的抽取:比如URL常量、路徑常量、數字常量等.不能讓人輕易修改。
?
注意: 當final作用于類的成員變量時,成員變量(注意是類的成員變量,局部變量只需要保證在使用之前被初始化賦值即可)必須在定義時或者構造器中進行初始化賦值,而且final變量一旦被初始化賦值之后,就不能再被賦值了。
public static final String URL_GET = "/Api/GetMaintenanceType.html";//保養列表
————————————————————————————————>
Static關鍵字: ?只能用于修飾成員變量和成員方法。
Static修飾的成員變量就成了類變量,隨著類的加載而加載,生命周期和類一樣。
Static修飾的成員方法變成了類方法,可以直接通過類名調用。和.class一樣存在于方法區。
非靜態的成員方法與成員變量的調用,只能通過創建對象調用。類名.方法名等;而靜態的成員可以通過類名和創建對象調用(盡量用類名調用,不要創建對象)。
?
被修飾的成員有以下特點:
1)隨著類的加載而加載、
2)優先于對象存在、
3)被所有對象所共享(比較節約空間)、(可以用代碼證明)
4)可以直接被類名調用, Constant.BASE_URL、NetManager.getData();
?
注意事項:
1)靜態方法只能訪問靜態的成員變量,不能訪問非靜態的成員變量。 為什么?因為靜態成員先于對象存在,比對象先創建。當靜態成員存在時,對象還沒有創建。他們的生命周期不一樣。但是非靜態的可以訪問靜態的。
2)靜態方法中不可用this/super關鍵字。為什么:this指向調用本方法的對象的引用(對象還沒有創建呢)
由static修飾的成員變量、成員方法和類同時進行加載到內存,所以優先于對象存在。
?
一般在工具類中使用靜態、static;
類是什么時候加載到內存的? ?對象是什么時候加載到內存的?
?
內存分區圖:
堆內存: ?用于存儲對象
棧內存: ?用于存儲基本類型變量區,使用完成后,所占空間會自動釋放。
方法區:?
1.又叫靜態區,跟堆一樣,被所有的線程共享。方法區包含所有的class和static變量。?
2.方法區中包含的都是在整個程序中永遠唯一的元素,如class,static變量。
靜態成員與非靜態成員的區別:
生命周期:
靜態成員隨著類的加載而加載,隨著類的消失而消失,生命周期長;
普通成員隨著對象的存在而存在,隨著對象的消失而消失。
存放位置:靜態成員存在于方法區中,非靜態成員存在于堆中。
static對性能的影響:
為什么說static塊可以用來優化程序性能,是因為它的特性:只會在類加載的時候執行一次。
static?final用來修飾成員變量和成員方法,可簡單理解為“全局常量”! ?常量必須要加static關鍵字修飾?
static就是靜態變量,聲明為static的變量實質上就是全局變量,如果一個成員被聲明為static,它就能夠在它的類的任何對象創建之前被訪問,而不必引用任何對象!
內部類 viewHolder需要加static,下面這種寫法影響性能 class ViewHolder {TextView item_by_text1,item_by_text2;}沒有必要時請不用使用靜態變量,生命周期比較長,不能被回收,占用內存。
總結
以上是生活随笔為你收集整理的static与final关键字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 普洱学院java教务系统_2020年普洱
- 下一篇: 矩阵分析及应用(1-2章)