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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...