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

java關(guān)鍵字static學(xué)習(xí)心得

 更新時(shí)間:2018年01月20日 16:35:05   作者:銅雀春深鎖二喬  
本篇文章給大家分享一篇關(guān)于java關(guān)鍵字static的學(xué)習(xí)心得,有這方面需要的朋友學(xué)習(xí)下吧。

static是java中又一重要的關(guān)鍵字,在一定環(huán)境下使用,可以提高程序的運(yùn)行性能,優(yōu)化程序的結(jié)構(gòu)。其主要應(yīng)用有以下幾方面:

1.static修飾的成員變量,稱(chēng)為類(lèi)變量/靜態(tài)變量,以實(shí)現(xiàn)所有對(duì)象對(duì)該成員的共享。

2.static修飾的成員方法,稱(chēng)為類(lèi)方法/靜態(tài)方法,可直接通過(guò)類(lèi)名調(diào)用,無(wú)需創(chuàng)建對(duì)象。

3.形成靜態(tài)代碼塊,優(yōu)化程序性能。

4.靜態(tài)導(dǎo)包,一般將類(lèi)的方法直接導(dǎo)入到當(dāng)前類(lèi)中,從而直接使用方法名即可調(diào)用類(lèi)方法,更加方便。

5.修飾內(nèi)部類(lèi),無(wú)需實(shí)例化外部類(lèi)就可以調(diào)用內(nèi)部類(lèi)。

下面一附代碼說(shuō)明:

public class Student {
    String name;
    static int age;
    public String toString() {
      return "Name:" + name + ", Age:" + age;
    }
    public static void main(String[] args) {
     Student s1 = new Student();
      s1.name="張三";
      s1.age=20;
      Student s2 = new Student();
      s2.name="李四";
      s2.age=10;
      System.out.println(s1);
      System.out.println(s2);
    }
}
/**輸出結(jié)果
Name:張三, Age:10
Name:李四, Age:10
*/

如上述代碼,s1和s2兩個(gè)對(duì)象分別存儲(chǔ)在內(nèi)存中堆區(qū)域的不同地址中,所以他們之間相互不會(huì)干擾。然而static關(guān)鍵字修飾了成員變量age,讓其變成類(lèi)的所屬,而不是對(duì)象的所屬,任何該類(lèi)實(shí)例的對(duì)象都可以共享使用它。所以,輸出的age均是最終賦給的10。如果去掉static,顯然對(duì)象之間互不影響,輸出如下:

Name:張三, Age:20
Name:李四, Age:10

如上述代碼,out1調(diào)用out2時(shí)出錯(cuò)。由此代碼可得,靜態(tài)方法不能調(diào)用非靜態(tài)的成員變量和成員方法。非靜態(tài)方法可以調(diào)用靜態(tài)的成員變量和成員方法。注意,static不影響成員的訪問(wèn)權(quán)限,Java中能夠影響到訪問(wèn)權(quán)限的關(guān)鍵詞是private、public、protected,default。

public class Test extends Base{
  static{
    System.out.println("static靜態(tài)塊1");
  }
  public Test(){
    System.out.println("test構(gòu)造器");
  }  
  public static void main(String[] args) {
    new Test();
  }
} 
class Base{
  static{
    System.out.println("static靜態(tài)塊2");
  }
  public Base(){
    System.out.println("base構(gòu)造器");
  }
}

如上述代碼,記住兩句話,static代碼塊隨類(lèi)的加載一起加載。static修飾的變量方法比其他變量方法優(yōu)先加載,且只加載一次。加載子類(lèi)時(shí),會(huì)首先加載父類(lèi)。由此可以分析:在執(zhí)行開(kāi)始,先要尋找到main方法,因?yàn)閙ain方法是程序的入口,但是在執(zhí)行main方法之前,必須先加載Test類(lèi),而在加載Test類(lèi)的時(shí)候發(fā)現(xiàn)Test類(lèi)繼承自Base類(lèi),因此會(huì)轉(zhuǎn)去先加載Base類(lèi),在加載Base類(lèi)的時(shí)候,發(fā)現(xiàn)有static塊,便執(zhí)行了static塊。在Base類(lèi)加載完成之后,便繼續(xù)加載Test類(lèi),然后發(fā)現(xiàn)Test類(lèi)中也有static塊,便執(zhí)行static塊。在加載完所需的類(lèi)之后,便開(kāi)始執(zhí)行main方法。在main方法中執(zhí)行new Test()的時(shí)候會(huì)先調(diào)用父類(lèi)的構(gòu)造器,然后再調(diào)用自身的構(gòu)造器。因此,運(yùn)行結(jié)果如下:

static靜態(tài)塊2
static靜態(tài)塊1
base構(gòu)造器
test構(gòu)造器
/* A.java文件 */
package com.dogo.test;
public class A {
  public static void outWord(Object o){
    System.out.println(o);
  }
}
/* B.java文件 */
import static com.dogo.test.A.*;
public class B
{
  public static void main( String[] args )
  {
    outWord("Hello World!");
  }
  /**輸出
   * Hello World!
   */
}

如上述代碼,A.java中包含一個(gè)簡(jiǎn)單的靜態(tài)方法,在B.java中我們用static關(guān)鍵字將A類(lèi)導(dǎo)入,由此,便無(wú)需使用“類(lèi)名.方法名”的方法去調(diào)用類(lèi)方法了,直接可以采用"方法名"去調(diào)用類(lèi)方法,就好像是該類(lèi)自己的方法一樣。

/*Outer.java*/
public class Outer {
  static {
    System.out.println("Outer靜態(tài)塊");
  }
  public Outer(){
    System.out.println("Outer構(gòu)造器");
  }
  static class Inner{
    static{
      System.out.println("Inner靜態(tài)塊");
    }
    
    public Inner(){
      System.out.println("Inner構(gòu)造器");
    }
  }
}
/*Test.java*/
public class Test{
  public static void main(String[] args) {
    new Outer.Inner();
  }
}

如上述代碼,記住,用static修飾內(nèi)部類(lèi),外部類(lèi)可以直接調(diào)用內(nèi)部類(lèi),因?yàn)閟tatic修飾的的內(nèi)部類(lèi)是在加載外部類(lèi)的同時(shí)加載的,所以,并不要實(shí)例化外部類(lèi)就能直接調(diào)用靜態(tài)內(nèi)部類(lèi)。例子中,在進(jìn)入Test的main方法之前,加載Test類(lèi),然后執(zhí)行new Outer.Inner();這里需要注意:因?yàn)镮nner是靜態(tài)的,所以這里并不需要加載外部類(lèi)和實(shí)例化外部類(lèi),可以直接加載Inner并實(shí)例化。運(yùn)行結(jié)果如下:

Inner靜態(tài)塊
Inner構(gòu)造器

大喬注:static另一個(gè)很重要的應(yīng)用就是實(shí)現(xiàn)單例設(shè)計(jì)模式。單利模式的特點(diǎn)是該類(lèi)只能有一個(gè)實(shí)例,為了實(shí)現(xiàn)這一功能,必須隱藏類(lèi)的構(gòu)造函數(shù),即把構(gòu)造函數(shù)聲明為private,并提供一個(gè)創(chuàng)建對(duì)象的方法,由于構(gòu)造對(duì)象被聲明為private,外界無(wú)法直接創(chuàng)建這個(gè)類(lèi)型的對(duì)象,只能通過(guò)該類(lèi)提供的方法來(lái)獲取類(lèi)的對(duì)象,于是只能把創(chuàng)建對(duì)象的方法聲明為static,程序?qū)嵗缦拢?/p>

class SingleDemo{ 
    private static SingleDemo ins=null; 
    private SingleDemo(){} 
    public static SingleDemo getIns(){ 
      if(ins==null){ 
        ins=new SingleDemo(); 
      } 
      return ins; 
    } 
  }

相關(guān)文章

  • 詳解MongoDB和Spring整合的實(shí)例代碼

    詳解MongoDB和Spring整合的實(shí)例代碼

    這篇文章主要介紹了詳解MongoDB和Spring整合的實(shí)例代碼,Spring提供了MongoTemplate這樣一個(gè)模板類(lèi)的實(shí)現(xiàn)方法,簡(jiǎn)化了具體操作。有興趣的可以了解一下
    2017-07-07
  • Java OpenCV圖像處理之仿射變換,透視變換,旋轉(zhuǎn)詳解

    Java OpenCV圖像處理之仿射變換,透視變換,旋轉(zhuǎn)詳解

    這篇文章主要為大家詳細(xì)介紹了Java OpenCV圖像處理中仿射變換,透視變換,旋轉(zhuǎn)的實(shí)現(xiàn),文中的示例代碼講解詳細(xì),快跟隨小編一起學(xué)習(xí)一下
    2022-10-10
  • JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)劃分原理詳解

    JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)劃分原理詳解

    這篇文章主要介紹了JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)劃分原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java如何判斷整數(shù)溢出,溢出后怎么得到提示

    Java如何判斷整數(shù)溢出,溢出后怎么得到提示

    這篇文章主要介紹了Java如何判斷整數(shù)溢出,溢出后怎么得到提示,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 一文詳解前端和后端的數(shù)據(jù)是如何連接的(基于Spring?Boot、Django或Node.js)

    一文詳解前端和后端的數(shù)據(jù)是如何連接的(基于Spring?Boot、Django或Node.js)

    這篇文章主要介紹了前端和后端的數(shù)據(jù)是如何連接的相關(guān)資料,文中通過(guò)示例介紹的非常詳細(xì),舉例講解的是基于Spring?Boot、Django或Node.js,需要的朋友可以參考下
    2025-01-01
  • java開(kāi)發(fā)微信公眾號(hào)支付

    java開(kāi)發(fā)微信公眾號(hào)支付

    這篇文章主要給大家結(jié)合微信支付接口開(kāi)發(fā)的實(shí)踐,從獲取用戶授權(quán)到各主要接口的使用方法等方面介紹微信支付的關(guān)鍵點(diǎn)技術(shù),有需要的小伙伴可以參考下
    2015-08-08
  • java字符串拼接與性能分析詳解

    java字符串拼接與性能分析詳解

    在JAVA中拼接兩個(gè)字符串的最簡(jiǎn)便的方式就是使用操作符”+”。如果你用”+”來(lái)連接固定長(zhǎng)度的字符串,可能性能上會(huì)稍受影響,但是如果你是在循環(huán)中來(lái)”+”多個(gè)串的話,性能將指數(shù)倍的下降,下面我們分析一下JAVA字符串拼接的性能
    2014-01-01
  • SpringBoot擴(kuò)展外部化配置的原理解析

    SpringBoot擴(kuò)展外部化配置的原理解析

    這篇文章主要介紹了SpringBoot擴(kuò)展外部化配置的原理解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • SpringBoot整合RocketMq實(shí)現(xiàn)分布式事務(wù)

    SpringBoot整合RocketMq實(shí)現(xiàn)分布式事務(wù)

    這篇文章主要為大家詳細(xì)介紹了SpringBoot整合RocketMq實(shí)現(xiàn)分布式事務(wù)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下
    2024-11-11
  • java書(shū)店系統(tǒng)畢業(yè)設(shè)計(jì) 用戶模塊(3)

    java書(shū)店系統(tǒng)畢業(yè)設(shè)計(jì) 用戶模塊(3)

    這篇文章主要介紹了java書(shū)店系統(tǒng)畢業(yè)設(shè)計(jì),第三步系統(tǒng)總體設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10

最新評(píng)論

靖远县| 屏山县| 浙江省| 株洲市| 灵石县| 南岸区| 永济市| 景洪市| 苏尼特左旗| 抚州市| 加查县| 潞城市| 项城市| 榆社县| 锦州市| 蒙阴县| 双桥区| 金川县| 息烽县| 白朗县| 哈密市| 佳木斯市| 基隆市| 固阳县| 东辽县| 新营市| 揭东县| 凤庆县| 姜堰市| 巩义市| 图木舒克市| 麟游县| 连江县| 内江市| 宣化县| 当阳市| 龙江县| 岳池县| 苗栗市| 建瓯市| 蕲春县|