Java連載43-訪問靜態方法其他註意事項、static關鍵字

来源:https://www.cnblogs.com/ruigege0000/archive/2019/10/21/11711213.html
-Advertisement-
Play Games

一、其他註意點 1.對於帶有static的方法,我們講過需要用“類名.”的方式進行訪問,但是其實我們使用“引用.”的方式也是可以進行訪問這個方法的舉例。 2.對於上面的特性,為什麼這樣,我想用下麵這個更進一步的例子,也許可以知曉一二了,我們之前講過空指針異常。 這個空指針異常,是指空引用訪問實例相關 ...


一、其他註意點

1.對於帶有static的方法,我們講過需要用“類名.”的方式進行訪問,但是其實我們使用“引用.”的方式也是可以進行訪問這個方法的舉例。

 

package com.bjpowernode.java_learning;

​

public class D43_ {

  public static void main(String[] args) {

    Test3.test3();

    Test3 t1 = new Test3();

    t1.test3();

  }

}

class Test3{

  String name;

  public Test3() {}

  public static void test3(){

    System.out.println("我可以執行");

  }

}

 

2.對於上面的特性,為什麼這樣,我想用下麵這個更進一步的例子,也許可以知曉一二了,我們之前講過空指針異常。

這個空指針異常,是指空引用訪問實例相關的數據就是對象相關的數據,這些數據在訪問的時候,必須有對象的參與,當空引用的時候,對象是不存在的,訪問這些數據就會出現空指針異常。

我們在緊接著上面的程式,再加一段執行程式

 

    t1 = null;

    t1.test3();

 

我們可以看到,即使是空指針,也照樣可以執行並沒有出現空指針異常,這說明瞭這裡的t1這個對象,我們根本就沒用到它,在執行的時候,系統依然會改寫為Test3.test3()這樣進行執行。

但是這種方式不推薦,雖能執行但不合我們的邏輯。

二、靜態變數

1.首先看一段對象創建的代碼

 

package com.bjpowernode.java_learning;

​

public class D43_2_static_keyword {

  public static void main(String[] args) {

    Chinese c1 = new Chinese("zhangsan",32,"China");

    Chinese c1 = new Chinese("lisi",34,"China");   

  }

}

class Chinese{

  String name;

  int id;

  String country;

  public Chinese(String name,int id,String country) {

    this.name = name;

    this.id = id;

    this.country = country;

  }

}

 

 

解釋:我們創建了兩個Chinese對象,他們的國籍都是中國,但是這樣我們每次創建都得寫一次China,這樣就造成了代碼的冗餘,當我們去掉這個實例變數的時候,場景不合理,還需要這樣的屬性值,因此我們對於這種對象都共有的屬性,引出靜態變數的概念。

2.靜態變數,也就是在類的代碼中,對於實例變數,我們加一個static關鍵字,代表這個屬性是所有創建出來的該對象共有的屬性

(1)靜態變數在類載入的時候進行初始化,不需要創建對象了,記憶體就開闢出來了。

(2)靜態變數存儲在方法區記憶體​。

例子:

 

package com.bjpowernode.java_learning;

​

public class D43_2_static_keyword {

  public static void main(String[] args) {

    Chinese c1 = new Chinese("zhangsan",32);

    System.out.println(c1.country);

    System.out.println(Chinese.country);

    c1 = null;

    System.out.println(c1.country);

  }

}

class Chinese{

  String name;

  int id;

  static String country = "China";

  public Chinese(String name,int id) {

    this.name = name;

    this.id = id;

  }

  pubic Chinese() {}

}

個例子可以看出我們訪問這個實例變數的時候,可以用"類."訪問,也可以用"引用."訪問,都成功了,而且原理也和我們上面講述空指針類似,下麵的再幾個例子。

 

package com.bjpowernode.java_learning;

​

public class D43_2_static_keyword {

  public static void main(String[] args) {

//    Chinese c1 = new Chinese("zhangsan",32);//這樣寫報錯因為,缺一個參數,即使是提前被定義了

    Chinese c2 = new Chinese("lisi",34,"fhai");  //換個值 

    Chinese c3 = new Chinese("lisi",34,"China");

    System.out.println(c2.country);

    System.out.println(c3.country);

  }

}

class Chinese{

  String name;

  int id;

  static String country = "China";

  public Chinese(String name,int id,String country) {

    this.name = name;

    this.id = id;

    this.country = country;

  }

  pubic Chinese() {}

}

 

 ​

​解釋:說明即使我們定義了構造函數來修改這種對象裡面的country值也修改不了​。

(3)​總結:

i.static英語的那次翻譯為:靜態的;

ii.static​修飾的方法是靜態方法;

iii.static​修飾的變數是靜態的;

iv.所有的static修飾的元素都稱為靜態的,都可以使用“類名.”的方式進行訪問,當然也可以用“引用.”的方式進行訪問(但不建議這麼做)​

三、源碼:

D43_other_anouncements_of_interviewing_object.java

D43_2_static_keyword1.java

D43_2_static_keyword2.java

地址:

https://github.com/ruigege66/Java/blob/master/D43_other_anouncements_of_interviewing_object.java

https://github.com/ruigege66/Java/blob/master/D43_2_static_keyword1.java

https://github.com/ruigege66/Java/blob/master/D43_2_static_keyword2.java

2.CSDN:https://blog.csdn.net/weixin_44630050(心悅君兮君不知-睿)

3.博客園:https://www.cnblogs.com/ruigege0000/

4.歡迎關註微信公眾號:傅里葉變換,個人公眾號,僅用於學習交流,後臺回覆”禮包“,獲取大數據學習資料

 


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

-Advertisement-
Play Games
更多相關文章
  • 表單內容: form 表單 input 輸入框 name屬性:標簽的名字 value屬性:設置輸入框的預設內容 checked屬性:設置單選或多選的預設項 type屬性:用於確定輸入框的類型 type屬性的屬性值: text:單行文本 password:密碼 email:郵箱 radio:單選 ch ...
  • 前言 在上一篇初識Vue核心中,我們已經熟悉了vue的兩大核心,理解了Vue的構建方式,通過基本的指令控制DOM,實現提高應用開發效率和可維護性。而這一篇呢,將對Vue視圖組件的核心概念進行詳細說明。 什麼是組件呢? 組件可以擴展HTML元素,封裝可重用的HTML代碼,我們可以將組件看作自定義的HT ...
  • B站自動填彈幕(附帶createEvent消息機制) 昨晚看的比賽真的要氣死我。RNG 居然又輸了。。。 為了LPL。。。我寫了一個為LPL加油的腳本。希望大家能和我一起為LPL加油! 腳本代碼如下: 第一步打開瀏覽器並登錄B站 按F12將控制台打開 將代碼粘貼進去然後按回車 請大家觀賞效果 往下就 ...
  • 思路 自定義導航欄高度組成:狀態欄(綠色部分)、導航欄(藍色部分) 狀態欄 通過調用 wx.getSystemInfoSync 獲取 導航欄 通過獲取右上角膠囊的位置信息計算,navBarPadding為導航欄上下的間隙 代碼 app.js: wxml: wxss: js: 最後 setStatus ...
  • 1.什麼是常量? 常量表示一些固定不變的數據 現實生活中人的性別其實就可以看做是常量, 生下來是男孩一輩子都是男孩, 生下來是女孩一輩子都是女孩 2.JavaScript中常量的分類 整型常量其實就是正數, 在JavaScript中隨便寫一個整數都是整型常量1 / 666 / 99 實型常量其實就是 ...
  • 示例代碼托管在: "http://www.github.com/dashnowords/blogs" 博客園地址: "《大史住在大前端》原創博文目錄" 華為雲社區地址: "【你要的前端打怪升級指南】" [TOC] 一. 高性能動畫 動畫的流暢程度通常是以 ( Frame Per Second ,每秒 ...
  • 對JDK動態代理的模擬 動態代理在JDK中的實現: 來看看newProxyInstance()這個方法在JDK中的定義 它需要三個參數: ClassLoader loader:類載入器,JDK代理中認為由同一個類載入器載入的類生成的對象相同所以要傳入一個載入器,而且在代理對象生成過程中也可能用到類加 ...
  • package singeton;import java.security.SecureRandom;/** * @author Zero * @since 2019-08-13. * Description: */public class HungrySingleton { private sta ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...