国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

final static 深度解析

2019-11-15 00:48:37
字體:
來源:轉載
供稿:網友
final static 深度解析
  function test(){    var a = b = 10;  }  test( );  alert(b);

由上一篇博客說起,最后輸出的是10。引起歧義的原因是全局變量和局部變量的關系。順著這個話題,說說java中的這塊兒。總--分--總結構來敘述一下。

參考博客:

  static 詳細分析

  實例構造器是不是靜態方法

總:java中沒有全局變量這個概念,只有局部變量和成員變量兩個說法。

java中沒有“全局變量”的概念。而是有“靜態”這個概念。1.static 修飾成員變量。2.static 修飾成員方法。3.static 修飾靜態代碼塊。被static修飾的成員變量和成員方法獨立于該類的任何對象。即它不依賴于類的實例,被類的所有實例共享。只要這個類被加載,Java虛擬機就能根據類名在運行時數據區的方法區內找到他們。因此,static對象可以在它的任何對象之前訪問,無需應用任何對象。a.

接下來,對比final。

Java.lang.String類不可以被繼承,由于它被final所修飾。1.final 修飾類;2.final 修飾方法;3.final 修飾變量(成員變量和局部變量)。final修飾類,類不能夠被繼承,String類就是這種情況。final修飾方法,把方法鎖定,防止繼承它的類來修改它的含義。final修飾變量,分為修飾基本數據類型變量和應用類型變量。基本數據類型的變量修飾之后不能改值;引用類型的變量初始化之后不能再指向另外一個對象,但是可以改變當前對象的內容。

眾說紛紜:

1. (全民財富)在static方法內部不能調用非靜態方法,反過來是可以的。

2. static目的是,方便在沒有創建對象的情況下來進行調用(方法/變量)。被static關鍵字修飾的方法或者變量不需要依賴于對象來進行訪問,只要類被加載了,就可以通過類名去進行訪問。

3.對于靜態方法來說,是沒有this的,因為它不依附于任何對象,既然都沒有對象,就談不上this了。

4.在靜態方法中不能訪問類的非靜態成員變量和非靜態成員方法,因為非靜態成員方法/變量都是必須依賴具體的對象才能夠被調用。

5.在靜態方法中不能訪問非靜態成員方法和非靜態成員變量,但是在非靜態成員方法中是可以訪問靜態成員方法/變量的。

6.即使沒有顯示地聲明為static,類的構造器實際上也是靜態方法。但是為什么構造方法中?還可以用this來訪問成員變量呢??博客

  補充:靜態成員變量雖然獨立于對象,但是不代表不可以通過對象去訪問,所有的靜態方法和靜態變量都可以通過對象訪問(只要訪問權限足夠)。

7.靜態變量和非靜態變量的區別是:靜態變量被所有的對象所共享,在內存中只有一份兒,它當且僅當在類初次加載時會被初始化,由JVM對它初始化。而非靜態變量是對象所擁有的,在創建對象的時候被初始化,存在多份兒,各個對象擁有的份兒互不影響。

8. static代碼塊,用來優化程序的性能。當類初次被加載的時候,會按照static塊的順序來執行每個static塊,并且只會執行一次。(只會在類加載的時候執行一次)

9.在Java中切記:static是不允許用來修飾局部變量。不要問為什么,這是Java語法的規定。

10.Java中的String類就是一個final類。

11.當用final修飾一個類時,表明這個類不能被繼承。要注意final類中的所有成員方法都會被隱式地指定為final方法。

12.對于一個final變量,如果是基本數據類型的變量,則其數值一旦在初始化之后便不能更改;如果是引用類型的變量,則在對其初始化之后便不能再讓其指向另一個對象。

13.被final修飾的引用變量一旦初始化賦值之后就不能再指向其他的對象,那么該引用變量指向的對象的內容是可變的。

14.很多時候會容易把static和final關鍵字混淆,static作用于成員變量用來表示只保存一份兒,而final的作用是用來保證變量不可變。

public class Test {    public static void main(String[] args)  {        MyClass myClass1 = new MyClass();        MyClass myClass2 = new MyClass();        System.out.PRintln(myClass1.i);        System.out.println(myClass1.j);        System.out.println(myClass2.i);        System.out.println(myClass2.j);     }} class MyClass {    public final double i = Math.random();    public static double j = Math.random();}  運行這段代碼就會發現,每次打印的兩個j值都是一樣的,而i的值卻是不同的。從這里就可以知道final和static變量的區別了。

Java基礎:

Java內部類

HashMap詳解

算法:

排序算法匯總

改進的字符串匹配算法KMP


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 富裕县| 古交市| 杭锦后旗| 辽宁省| 石棉县| 肥东县| 洞头县| 保靖县| 沛县| 高台县| 荥阳市| 梧州市| 敦煌市| 广东省| 盘山县| 武冈市| 鹰潭市| 拉萨市| 云林县| 都匀市| 紫云| 张北县| 嘉兴市| 抚顺市| 镇远县| 离岛区| 克拉玛依市| 达州市| 海城市| 鹿泉市| 怀宁县| 辽中县| 朝阳区| 凤城市| 无棣县| 大姚县| 峡江县| 淮安市| 高安市| 弥渡县| 山西省|