Java學習筆記十七:Java中static使用方法

来源:https://www.cnblogs.com/qiaoyifan/archive/2018/06/06/9147641.html
-Advertisement-
Play Games

Java中static使用方法一:Java中的static使用之靜態變數;二:Java中的static使用之靜態方法;三:Java中的static使用之靜態初始化快; ...


 

Java中static使用方法

 

 

一:Java中的static使用之靜態變數;

  我們都知道,我們可以基於一個類創建多個該類的對象,每個對象都擁有自己的成員,互相獨立。然而在某些時候,我們更希望該類所有的對象共用同一個成員。此時就是 static 大顯身手的時候了!!

  Java 中被 static 修飾的成員稱為靜態成員或類成員。它屬於整個類所有,而不是某個對象所有,即被類的所有對象所共用。靜態成員可以使用類名直接訪問,也可以使用對象名進行訪問。當然,鑒於他作用的特殊性更推薦用類名訪問~~

使用 static 可以修飾變數、方法和代碼塊。

我們先認識一下靜態變數。

例如,我們在類中定義了一個 靜態變數 hobby

代碼如下所示:

public class HelloWorld {
    //static修飾的變數為靜態變數,所有的類的對象共用hobby
    static String hobby ="cnblogs";
    
    public static void main(String[]args){
        //靜態變數可以直接使用類名來訪問,無需創建類的對象
        System.out.println("通過類名訪問hobby:"+HelloWorld.hobby);
        //創建類的對象
        HelloWorld hello = new HelloWorld();
        //使用對象名來訪問靜態變數
        System.out.println("通過對象名訪問hobby:"+hello.hobby);
        //使用對象名的形式修改靜態變數的值
        hello.hobby="博客園";
        //再次使用類名訪問靜態變數,值已被修改
        System.out.println("通過類名訪問hobby:"+HelloWorld.hobby);
    }
}

運行結果為:

 

 

 

註:靜態成員屬於整個類,當系統第一次使用該類時,就會為其分配記憶體空間直到該類被卸載才會進行資源回收!

 

二:Java中的static使用之靜態方法;

  與靜態變數一樣,我們也可以使用 static 修飾方法,稱為靜態方法或類方法。其實之前我們一直寫的 main 方法就是靜態方法。靜態方法的使用如:

public class HelloWorld {
        //使用static關鍵字聲明靜態方法
        public static void print(){
        System.out.println("歡迎您:博客園!");
        }
        public static void main(String[]args){
            //直接使用類名調用靜態方法
            HelloWorld.print();
            
            //也可以通過對象名調用
            HelloWorld demo = new HelloWorld();
            demo.print();
        }
}

運行結果為:

註:1、 靜態方法中可以直接調用同類中的靜態成員,但不能直接調用非靜態成員。如:

  如果希望在靜態方法中調用非靜態變數,可以通過創建類的對象,然後通過對象來訪問非靜態變數。如:

2、 在普通成員方法中,則可以直接訪問同類的非靜態變數和靜態變數,如下所示:

3、 靜態方法中不能直接調用非靜態方法,需要通過對象來訪問非靜態方法。如:

代碼如下:

 

public class HelloWorld {
        
    String name = "博客園";//非靜態變數name
    static String hobby = "cnblogs";//靜態變數hobby
    
    //普通成員方法
    public void show(){
        
        System.out.println("welcome to cnblogs");
            
    }
    //靜態方法
    public static void print(){
        System.out.println("歡迎來到博客園");
    }
    public static void main(String[]args){
        //普通成員方法必須通過對象來調用
        HelloWorld hello = new HelloWorld();
        hello.show();
        //可以直接調用靜態方法
        print();
    }
}

三:Java中的static使用之靜態初始化快;

Java 中可以通過初始化塊進行數據賦值。如:

  在類的聲明中,可以包含多個初始化塊,當創建類的實例時,就會依次執行這些代碼塊。如果使用 static 修飾初始化塊,就稱為靜態初始化塊。

  需要特別註意:靜態初始化塊只在類載入時執行,且只會執行一次,同時靜態初始化塊只能給靜態變數賦值,不能初始化普通的成員變數。

我們來看一段代碼:

 

public class HelloWorld {
    
    int num1;//聲明變數num1
    int num2;//聲明變數num2
    static int num3;//聲明靜態變數num3
    public HelloWorld(){
        num1 = 91;
        System.out.println("通過構造方法為變數num賦值");
    }
    {//初始化快
        num2 = 74;
        System.out.println("通過初始化塊為變數num2賦值");
        
    }
    static{//靜態初始化快
        num3 = 83;
        System.out.println("通過靜態初始化塊為靜態變數num3賦值");
    }public static void main(String[]args){
        HelloWorld hello = new HelloWorld();//創建類的對象hello
        System.out.println("num1:"+hello.num1);
        System.out.println("num2:"+hello.num2);
        System.out.println("num3:"+num3);
        HelloWorld hello2 = new HelloWorld();//創建類的對象hello2
    }
}

運行結果為:

  通過輸出結果,我們可以看到,程式運行時靜態初始化塊最先被執行,然後執行普通初始化塊,最後才執行構造方法。由於靜態初始化塊只在類載入時執行一次,所以當再次創建對象 hello2 時並未執行靜態初始化塊。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Java開源生鮮電商平臺-商品價格的設計與架構(源碼可下載) 說明:Java開源生鮮電商平臺-商品價格的設計與架構,主要是對商品的價格進行研究與系統架構. 一、常見的電商價格 市場價(List Price):這個價格僅是用於顯示,用於襯托網站銷售價格的優惠程度; 銷售價(Sales Price):亦 ...
  • Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2677 Accepted Submission(s): 1208 Problem Descrip ...
  • 發奮忘食,樂以忘優,不知老之將至。———《論語》 前面幾篇已經介紹了關於線程安全和同步的相關知識,那麼有了這些概念,我們就可以開始著手設計線程安全的類。本文將介紹構建線程安全類的幾個方法,並說明他的區別。 我要講的這幾個構建線程安全類的方式是: 另外,在設計線程安全類的過程中,我們需要考慮下麵三個基 ...
  • 題目描述 計算積分 結果保留至小數點後6位。 數據保證計算過程中分母不為0且積分能夠收斂。 輸入輸出格式 輸入格式: 一行,包含6個實數a,b,c,d,L,R 輸出格式: 一行,積分值,保留至小數點後6位。 輸入輸出樣例 輸入樣例#1: 複製 1 2 3 4 5 6 輸出樣例#1: 複製 2.732 ...
  • 當我們談論到應用程式的架構的時候,經常會問到一個經典的問題,那就是“這段代碼應該放在哪裡比較好”。 因為 Laravel 是一個相當靈活的框架,所以要回答這個問題其實沒那麼容易。我應該把我的業務邏輯寫在 Model 層,還是 Controller 層,或者是其他地方? 當你的應用程式僅有一個接入點, ...
  • 繼上一篇自己動手寫Java String類之後,今晚10點鐘下班,感覺稍早,於是手癢癢就想自己動手來寫StringBulder,畢竟程式員啥都講究自己動手才能豐衣足食嘛!StringBuilder與String類的區別是String的變數內容是放在final char[]裡面的,而StringBui... ...
  • java 類修飾符:通常情況下使用 public 修飾,此時,java 強制要求 .java 文件名需與該 public 修飾類名一致,否則無法編譯通過。如若沒有加修飾符,文件名與類名可無任何關聯。 .java 文件建議僅聲明單個類,不要在同一個類文件,創建多個類。 PATH 添加時,可旋轉在當前 ...
  • 1 import java.io.File; 2 import java.text.DateFormat; 3 import java.util.Date; 4 5 public class FileDemo { 6 public static void main(String[] args) th... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...