Javase易混點專項復習02_static關鍵字

  • 1. static關鍵字
    • 1.1概述
    • 1.2修飾一個成員變量
      • 例:
      • 1.2.1靜態屬性與非靜態屬性示例及內存圖對比
    • 1.3修飾一個方法(靜態方法)
    • 1.4.static修飾成員的訪問特點總結
    • 1.5動態代碼塊和靜態代碼塊
      • 1.5.1動態代碼塊
      • 1.5.2 靜態代碼塊
    • 1.6帶有繼承的對象創建過程

1. static關鍵字

1.1概述

1.概述:static是一個靜態關鍵字
2.使用:a.修飾一個成員變量:static 數據類型 變量名b.修飾一個方法:修飾符 static 返回值類型 方法名(形參){方法體return 結果}3.調用靜態成員:類名直接調用(不用new對象)4.靜態成員特點:a.靜態成員屬于類成員,不屬于對象成員(非靜態的成員屬于對象成員)b.靜態成員會隨著類的加載而加載c.靜態成員優先于非靜態成員存在在內存中d.凡是根據靜態成員所在的類創建出來的對象,都可以共享這個靜態成員

1.2修飾一個成員變量

例:

public class Student {String name;int age;static String classRoom;
}
public class Test01 {public static void main(String[] args) {//先給靜態成員賦個值  類名直接調用(不用new對象) Student.classRoom = "222";Student s1 = new Student();s1.name = "郭靖";s1.age = 28;//s1.classRoom = "111";System.out.println(s1.name+","+s1.age+","+Student.classRoom);System.out.println("==============");Student s2 = new Student();s2.name = "黃蓉";s2.age = 26;//s2.classRoom = "111";System.out.println(s2.name+","+s2.age+","+Student.classRoom);}
}

1.2.1靜態屬性與非靜態屬性示例及內存圖對比

public class MyClass {public int a; //實例屬性
}public class MyTest1 {public static void main(String[] args) {MyClass c1 = new MyClass();c1.a = 20;MyClass c2 = new MyClass();c2.a = 30;System.out.println("c1.a = " + c1.a);System.out.println("c2.a = " + c2.a);}
}

在這里插入圖片描述

實例屬性是每個對象各自持有的獨立空間,對象單方面修改,不會影響其他對象。

public class MyClass {public int a;//實例屬性public static int b;//靜態屬性
}public class MyTest2 {public static void main(String[] args) {//static修飾的變量隨著類的加載而存在,和是否創建對象無關。MyClass.b = 10;System.out.println(MyClass.b);System.out.println("==========================");MyClass c1 = new MyClass();MyClass c2 = new MyClass();System.out.println("c1.b = " + c1.b);System.out.println("c2.b = " + c2.b);System.out.println("==========================");c1.b = 1000;System.out.println("c1.b = " + c1.b);System.out.println("c2.b = " + c2.b);}
}

在這里插入圖片描述

靜態屬性是整個類共同持有的共享空間(只有一份),任何對象修改靜態屬性,都會影響其他對象對該屬性的訪問。

static修飾的變量隨著類的加載而存在,和是否創建對象無關。

1.3修飾一個方法(靜態方法)

public class MyClass {public int a;public static int b;//由static修飾的靜態方法public static void m1() {//在本類中,可以通過"靜態方法名"訪問m2();System.out.println("m1....");}//由static修飾的靜態方法public static void m2() {System.out.println("m2....");}
}public class MyTest2 {public static void main(String[] args) {//在其他類中,可以通過"類名.靜態方法名"的方式訪問靜態方法MyClass.m1();}
}

關于靜態的注意事項:

靜態方法允許值訪問靜態成員; 想要調用的話:new對象調用
靜態方法不能直接訪問非靜態成員;
靜態方法中不允許使用this或是super關鍵字。

1.4.static修飾成員的訪問特點總結

1.在靜態方法中能直接訪問非靜態成員嘛?  不能想要調用的話:new對象調用  2.在非靜態方法中能直接訪問靜態成員嘛? 能a.同類:直接調用類名調用b.不同類:類名調用3.在靜態方法中能直接訪問靜態成員嘛?能a.同類:直接調用類名調用b.不同類:類名調用4.在非靜態方法中能直接訪問非靜態成員嘛?能a.同類:直接調用new對象調用b.不同類:new對象調用

1.5動態代碼塊和靜態代碼塊

1.5.1動態代碼塊

定義在類中,與屬性和方法處于同一級。

語法:

class 類名 {{//動態代碼塊}
}

創建對象時,觸發動態代碼塊的執行(創建一次,執行一次)。

執行時機:

動態代碼塊和實例屬性的初始化順序,由在類中書寫的順序決定;

代碼塊和屬性的初始化先于構造方法執行。

作用:可為實例屬性賦值,或必要的初始行為。

public class X {public X() {System.out.println("實例屬性");}
}public class MyClass1 {private X x = new X();//動態代碼塊{System.out.println("動態代碼塊");}public MyClass1() {System.out.println("構造方法...");}
}public class MyTest3 {public static void main(String[] args) {MyClass1 c1 = new MyClass1();System.out.println("-------------------------");MyClass1 c2 = new MyClass1();}
}

執行結果

實例屬性
動態代碼塊
構造方法...
-------------------------
實例屬性
動態代碼塊
構造方法...

1.5.2 靜態代碼塊

定義在類中,與屬性和方法處于同一級。

語法:

class 類名 {static {//靜態代碼塊}
}

類加載時,觸發靜態代碼塊的執行(僅一次)。

執行時機:

靜態屬性和靜態代碼塊,二者優先級相同,執行順序由定義順序決定
代碼塊和屬性的初始化先于構造方法執行。

作用:可為靜態屬性賦值,或必要的初始行為。

public class Y {public Y() {System.out.println("靜態屬性");}
}public class MyClass2 {private static Y y = new Y();//靜態代碼塊static {System.out.println("靜態代碼塊");}public MyClass2() {System.out.println("構造方法...");}
}public class MyTest4 {public static void main(String[] args) {MyClass2 c1 = new MyClass2();System.out.println("+++++++++++++++++++++++++++");MyClass2 c2 = new MyClass2();}
}

執行結果

靜態屬性
靜態代碼塊
構造方法...
+++++++++++++++++++++++++++
構造方法...

對象創建過程

public class X {public X() {System.out.println("實例屬性");}
}public class Y {public Y() {System.out.println("靜態屬性");}
}public class MyClass3 {private X x = new X();private static Y y = new Y();//動態代碼塊{System.out.println("動態代碼塊");}//靜態代碼塊static {System.out.println("靜態代碼塊");}public MyClass3() {System.out.println("構造方法...");}
}public class MyTest5 {public static void main(String[] args) {MyClass3 c1 = new MyClass3();System.out.println("==========================");MyClass3 c2 = new MyClass3();}
}

執行結果

靜態屬性
靜態代碼塊
實例屬性
動態代碼塊
構造方法...
==========================
實例屬性
動態代碼塊
構造方法...

1.6帶有繼承的對象創建過程

public class X {public X() {System.out.println("父類實例屬性");}
}public class Y {public Y() {System.out.println("父類靜態屬性");}
}public class M {public M() {System.out.println("子類實例屬性");}
}public class N {public N() {System.out.println("子類靜態屬性");}
}public class SuperClass {private X x = new X();private static Y y = new Y();//動態代碼塊{System.out.println("父類動態代碼塊");}//靜態代碼塊static {System.out.println("父類靜態代碼塊");}public SuperClass() {System.out.println("父類構造方法...");}
}public class SubClass extends SuperClass {private M m = new M();private static N n = new N();//動態代碼塊{System.out.println("子類動態代碼塊");}//靜態代碼塊static {System.out.println("子類靜態代碼塊");}public SubClass() {System.out.println("子類構造方法...");}
}public class MyTest6 {public static void main(String[] args) {SubClass subClass = new SubClass();System.out.println("***************************");SubClass subClass1 = new SubClass();}
}

這里是引用

執行結果

父類靜態屬性
父類靜態代碼塊
子類靜態屬性
子類靜態代碼塊
父類實例屬性
父類動態代碼塊
父類構造方法...
子類實例屬性
子類動態代碼塊
子類構造方法...
***************************
父類實例屬性
父類動態代碼塊
父類構造方法...
子類實例屬性
子類動態代碼塊
子類構造方法...

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/84196.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84196.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/84196.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++滑動門問題(附兩種方法)

題目如下&#xff1a; 滑動窗口 - 題目 - Liusers OJ ——引用自OJ網站 方法如下&#xff1a; 1.常規思想 #include<bits/stdc.h> using namespace std; int main() {int n,k;int a[110];cin>>n>>k;for(int i0;i<n;i){cin>>a[i];}for(int i0;i…

mysql連接池druid監控配置

文章目錄 前置依賴啟用配置訪問監控一些問題 前置 連接池有很多類型&#xff0c;比如 c3p0&#xff0c;比如 hikariCP&#xff0c;比如 druid。c3p0 一些歷史項目可能用的比較多&#xff0c;hikariCP 需要高性能的項目比較多&#xff0c;druid 性能也很好&#xff0c;而且還提…

Jetson系統燒錄與環境配置全流程詳解(含驅動、GCC、.Net設置)

Jetson系統燒錄與環境配置全流程詳解&#xff08;含驅動、GCC、.Net設置&#xff09; 目錄1. 準備工作與工具安裝1.1 主機系統要求1.2 安裝 SDK Manager 2. JetPack 系統燒錄流程2.1 Jetson 進入恢復模式2.2 使用 SDK Manager 燒錄 JetPack 3. Jetson 系統基礎設置4. 配置 .Net…

分布式緩存:緩存的三種讀寫模式及分類

文章目錄 緩存全景圖Pre緩存讀寫模式概述1. Cache Aside&#xff08;旁路緩存&#xff09;工作流程優缺點 2. Read/Write Through&#xff08;讀寫穿透&#xff09;工作流程優缺點典型場景 3. Write Behind Caching&#xff08;異步寫回&#xff09;工作流程優缺點典型場景 緩存…

Ntfs!FindFirstIndexEntry函數中ReadIndexBuffer函數的作用是新建一個Ntfs!_INDEX_LOOKUP_STACK結構

第一部分&#xff1a; 0: kd> kc # 00 Ntfs!FindFirstIndexEntry 01 Ntfs!NtfsRestartIndexEnumeration 02 Ntfs!NtfsQueryDirectory 03 Ntfs!NtfsCommonDirectoryControl 04 Ntfs!NtfsFsdDirectoryControl 05 nt!IofCallDriver 06 nt!IopSynchronousServiceTail 07 nt!Nt…

5.24 note

笛卡爾積(?選擇條件 select a.student_name as member_A, b.student_name as member_B, c.student_name as member_C from schoola as a join schoolb as b join schoolc as c where a.student_name ! b.student_name and a.student_name !…

為什么需要在循環里fetch?

假設有多個設備連接在后端,數量不定,需要按個讀回狀態,那么就要在循環里fetch了. 此函數非常好用,來自于國內一個作者,時間久了,忘記了來源,抱歉. export default async function fetchWithTimeout(resource, options {}) {const { timeout 1000 } options;const controll…

不同凈化技術(靜電 / UV / 濕式)的性能對比研究

在餐飲油煙和工業廢氣治理領域&#xff0c;油煙凈化技術的選擇至關重要。目前&#xff0c;靜電、UV 光解、濕式洗滌是市場上應用較為廣泛的三種凈化技術。它們憑借不同的工作原理和技術特性&#xff0c;在凈化效率、能耗、適用場景等方面展現出各自的優勢與局限。本文將從多個維…

Ubuntu 22.04上升級npm版本

如果使用NVM安裝Node.js npm會自動包含&#xff0c;但版本可能不是最新的。你可以選擇升級&#xff1a; # 檢查當前版本 npm --version# 升級到最新版本 npm install -g npmlatest# 或者升級到特定版本 npm install -g npm9.8.1如果使用其他方法安裝Node.js 通常Node.js安裝…

項目管理進階:111頁 詳解華為業務變革框架及戰略級項目管理【附全文閱讀】

BTMS 是一套集成管理系統框架&#xff0c;涵蓋變革規劃、項目執行、實施及生命周期管理等多個關鍵環節。在規劃階段&#xff0c;通過全面收集需求、深入分析現狀&#xff0c;制定出符合業務戰略的年度規劃&#xff0c;明確變革舉措和項目清單。 解決方案開發的 PMOP 流程&#…

java基礎知識回顧1(可用于Java基礎速通)考前,面試前均可用!

目錄 一、初識java 二、基礎語法 1.字面量 2.變量 3.關鍵字 4.標識符 聲明&#xff1a;本文章根據黑馬程序員b站教學視頻做的筆記&#xff0c;可對應課程聽&#xff0c;課程鏈接如下: 02、Java入門&#xff1a;初識Java_嗶哩嗶哩_bilibili 一、初識java Java是美國 sun 公…

Linux下MySQL的安裝與使用

1 安裝前說明 1.1 Linux系統及工具的準備 安裝并啟動好兩臺虛擬機&#xff1a;CentOS 7 掌握克隆虛擬機的操作 mac地址主機名ip地址UUID 安裝有 Xshell 和 Xftp 等訪問 CentOS 系統的工具 CentOS6 和 CentOS7 在 MySQL 的使用中的區別 防火墻&#xff1a;6是iptables&am…

在react項目中使用andt日期組件,選擇周和季度,直接獲取所對應的日期區間

在react項目中使用andt日期組件&#xff0c;選擇周和季度&#xff0c;直接獲取所對應的日期區間 import { DatePicker, Space } from antd; import React from react; const onChange (date, dateString) > {console.log(date,dateString) }; const onChangeweek (date, …

數字信號處理大實驗2 利用FFT估計信號的頻率

目錄 3.1 實驗目的 3.2 實驗內容與要求 3.3 實驗原理 3.3.1 基于時域求導-頻域乘法的n階導數積分法 3.3.2 基于頻域卷積的雙/多譜線插值法 3.3.3 基于譜峰和滑動平均的多譜線綜合插值方法 3.3.4 基于相鄰顯著譜線的滑動平均綜合插值方法 3.3.5 基于&#xff08;2&#…

【Java】Java元注解

Target(ElementType.METHOD) Retention(value RetentionPolicy.RUNTIME) public interface OperatorLog {String source() default "WEB"; //日志操作來源 默認是web&#xff0c;還有socket的String model() default ""; //操作模塊 }這個代碼中的 Target…

阿里云百煉(1) : 阿里云百煉應用問答_回答圖片問題_方案1_提問時上傳圖片文件

直接用于拍照答題不大理想, 可能適用其他用途, 更好的方案: 阿里云百煉(1) : 阿里云百煉應用問答_回答圖片問題_方案2_提取題目再提問-CSDN博客 1.實現代碼 package cn.nordrassil.ly.test.拍照答題;import com.alibaba.dashscope.app.Application; import com.alibaba.dashsc…

深入探索 CSS 中的偽類:從基礎到實戰?

在前端開發的世界里&#xff0c;CSS 作為網頁樣式的 “化妝師”&#xff0c;有著至關重要的作用。而 CSS 偽類則像是這位 “化妝師” 手中的神奇畫筆&#xff0c;能夠基于元素的狀態或位置為其添加獨特的樣式&#xff0c;極大地豐富了網頁的交互性和視覺效果。接下來&#xff0…

c++ constexpr關鍵字

constexpr字面意思為常量表格式&#xff0c; 用于指示編譯器在編譯時計算表達式的值。 1、作為常量表格式&#xff0c;必須在編譯時就能確定其值。如&#xff1a;constexpr int size 9527; 2、可以修飾函數&#xff0c;要求能在編譯時求值&#xff0c;所以傳的參數也必須是編…

服務器硬盤分類

以下是服務器硬盤的綜合性分類與技術特性分析&#xff0c;依據當前行業標準及技術演進整理&#xff1a; 一、按存儲介質分類 1. ?機械硬盤&#xff08;HDD&#xff09;? ? 核心特性?&#xff1a;采用旋轉磁盤與機械磁頭結構&#xff0c;通過磁道尋址實現數據讀寫 …

圖解深度學習 - 機器學習簡史

前言 深度學習并非總是解決問題的最佳方案&#xff1a;缺乏足夠數據時&#xff0c;深度學習難以施展&#xff1b;某些情況下&#xff0c;其他機器學習算法可能更為高效。 若初學者首次接觸的是深度學習&#xff0c;可能會形成一種偏見&#xff0c;視所有機器學習問題為深度學…