1. 程式人生 > >JavaSE入門學習12: Java面相物件之static用法

JavaSE入門學習12: Java面相物件之static用法

我們可以基於一個類建立多個該類的物件,每個物件都擁有自己的成員,互相獨立。然而在某些時候,我們更希

望該類所有的物件共享同一個成員。此時就是static大顯身手的時候了。

       Java中被static修飾符修飾的成員稱為靜態成員或類成員。它屬於整個類所有,而不是某個物件所有,即被類的所

有物件所共享。靜態成員可以使用類名直接訪問,也可以使用物件名進行訪問。當然,鑑於他作用的特殊性更推薦用

類名訪問。

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

       一Java中的static用法之靜態變數

我們將static修飾符修飾的變數稱之為靜態變數或者類變數,所有的類的物件都共享靜態變數。我們可以使用類名

直接去訪問靜態變數,也可以使用類的例項物件去訪問靜態變數。

       例如,我們在類中定義了一個 靜態變數 hobby ,操作程式碼如下所示:


       執行結果:


       使用靜態變數要注意的事項有:

       A靜態成員屬於整個類,當系統第一次使用該類時,就會為其分配記憶體空間直到該類被解除安裝才會進行資源回收。

       B靜態成員變數是屬於整個類的全域性變數,它不單屬於某一個物件;普通成員變數是屬於類中的物件,它不能被

有物件共享。

       C靜態成員變數必須在全域性進行定義,而由於普通成員變數在建立一個物件的時候可以對它進行初始化,因此就

要單獨對它進行定義,只要宣告即可。

       D靜態成員變數在沒有物件之前就存在。

       二Java中的static用法之靜態方法

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

方法就是靜態方法。靜態方法的使用如:


      執行結果:

 

      使用靜態方法需要注意的事項有:

       A靜態方法中可以直接呼叫同類中的靜態成員,但不能直接呼叫非靜態成員。如:


       B在靜態方法中呼叫非靜態變數,可以通過建立類的物件,然後通過物件來訪問非靜態變數。如:


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


       D靜態方法中不能直接呼叫非靜態方法,需要通過物件來訪問非靜態方法。如:


       三Java中的static用法之靜態初始化塊

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


       在類的宣告中,可以包含多個初始化塊,當建立類的例項時,就會依次執行這些程式碼塊。如果使用static修飾符去

修飾初化塊,就稱為靜態初始化塊。

       使用靜態初始化塊需要注意的事項有:

       靜態初始化塊只在類載入時執行,且只會執行一次,同時靜態初始化塊只能給靜態變數賦值,不

能初始化普通的成員變數。

       我們來看一段程式碼:


       執行結果:


       通過輸出結果,我們可以看到,程式執行時靜態初始化塊最先被執行,然後執行普通初始化塊,最後才執行構造

方法。由於靜態初始化塊只在類載入時執行一次,所以當再次建立物件 hello2 時並未執行靜態初始化塊。

       我們再來看一個例項:

public class Test {
	
        String name; //宣告變數name
        String sex; //宣告變數sex
        static int age;//宣告靜態變數age
    
        // 構造方法
        public Test() { 
		System.out.println("通過構造方法初始化name");
		name = "tom";
	}
    
        // 初始化塊
	{ 
		System.out.println("通過初始化塊初始化sex");
		sex = "男";
	}
    
        // 靜態初始化塊
	static { 
		System.out.println("通過靜態初始化塊初始化age");
		age = 20;
	}
    
	public void show() {
		System.out.println("姓名:" + name + ",性別:" + sex + ",年齡:" + age);
	}
    
	public static void main(String[] args) {
		
                // 建立物件
		Test test = new Test();
		// 呼叫物件的show方法
                test.show();
		
	}
}
        執行結果:

相關推薦

JavaSE入門學習12 Java面相物件static用法

我們可以基於一個類建立多個該類的物件,每個物件都擁有自己的成員,互相獨立。然而在某些時候,我們更希 望該類所有的物件共享同一個成員。此時就是static大顯身手的時候了。        Java中被s

JavaSE入門學習14Java面向物件之內部類

       一內部類概述        內部類(Inner Class)就是定義在另外一個類裡面的類。與之對應,包含內部類的類被稱為外部類。        內部類的主要作用如下:        A內

JavaSE入門學習24Java面向對象補充

ont 執行 pri img ack ima iss 類的構造函數 條件 一Java中的Object類 Object類是全部Java類的父類。假設一個類沒有使用extendskeyword明白標識繼承另外一個類,那麽這個類默認 繼

JavaSE入門學習23Java面向對象構造方法

ons 抽象類 什麽 ont 機會 語法 好的 error return 學了JavaSE面向對象這一部分,也該對構造方法做一個總結了。 一構造方法 在多數情況下,初始化一個對象的終於步驟是去調用這個對象的構造方法。構造

JavaSE入門學習33Java集合框架概述

        一集合框架         (1)集合的概念         現實生活中的集合:很多的事物湊在一起。         數學中的集合:具有共同屬性的事物的總體。         Java

JavaSE入門學習2Java開發準備基礎

       一Java語言概述        Java是一種可以撰寫跨平臺應用程式的面向物件的程式設計語言。Java 技術具有卓越的通用性、高效性、平臺 移植性和安全性,廣泛應用於PC、資料中心、遊

JavaSE入門學習4搭建Java開發環境(二)

二種配置方式,這種配置方式是必須掌握的。        path環境變數配置方式2        我們為什麼要將第二種配置形式呢?那第一種的配置方式有什麼缺點嗎?假設我的計算機上安裝了兩個JDK,一

Java零基礎入門學習2變數與變數型別

大家好,歡迎回到我們的Java零基礎課程,今天我們要講的是變數與變數型別。 我們先來回憶一下我們小學時候學的未知數與方程。裡面的XYZ很是煩人。你有沒有想過在做不出題是,想把XYZ變為自己想要的數,那不是很好? 當然,在數學試卷上這麼做,大大的“X”就會出現在卷面上。不過,這可是資訊科,不是數學,在我

入門學習Hadoop3使用Java進行操作HDFS

開啟eclipse新建一個Java專案 進行導包 1.公共包 2.公共包的依賴包,lib下面所有 3.hdfs包 然後 然後回到虛擬機器的master隨便建立一個檔案並放入到hdfs裡 hadoop fs -put ./hello.t

Java學習札記12Java中的StringBuilder類功能詳解

字串是 Java 程式中最常用的一種資料結構之一。在 Java 中的 String 類已經過載的"+"。也就是說,字串可以直接使用"+"進行連線,如下面程式碼所示: String s = "abc" + "ddd"; 但這樣做真的好嗎?當然,這個問題不能簡單地回答 Yes

Java學習12異常

概念 程式在執行時出現不正常的情況。 異常由來 問題也是現實生活中的一個具體的事物,也可以通過java類的形式進行描述,並且封裝成物件,其實就是java對不正常情況進行描述後的物件體現。 對於問題的劃分有兩種:嚴重的,java通過Error類進行描述

Java學習筆記(5)3.面向物件方法詳解

  方法是類或物件的行為特徵的抽象,方法是類或物件最重要的組成成分。但從功能上看,方法完全類似於傳統結構化程式設計裡的函式。值得指出的是,Java裡的方法不能獨立存在,所有的方法必須定義在類裡。方法在邏輯上要麼屬於類,要麼屬於物件。 1.方法的所屬性   永遠不要把方法當成

Java面相物件

繼承專題 繼承 1:提高了程式碼的複用性 2:表達了類與類之間的關係。 3:千萬不要為了獲取其他類的功能而去選擇繼承,類與類之間必須有某種聯絡才可以用繼承,比如他們具有某種共性而去繼承,例如我下面的例子中,person類具有人類共有屬性年齡與姓名,而student類具有學習的功能,而

虛擬機器學習之一java記憶體區域與記憶體溢位異常

1.執行時資料區域 java虛擬機器在執行java程式的過程中會把它所管理的記憶體劃分為若干個不同的資料區域。這些區域都有各自的用途和建立、銷燬時間,有的區域伴隨虛擬機器程序的啟動而存在,有些區域則依賴使用者執行緒的啟動和結束而建立和銷燬。 1.1程式計數器 程式計數器

入門學習Hadoop1VMware上搭建hadoop伺服器Centos7叢集,並設定SSH免密登入。

修改主機名:hostnamectl set-hostname master 檢視自己虛擬機器閘道器IP為多少 修改ip:vim /etc/sysconfig/network-scripts/ifcfg-ens32 master:192.168.187.100

學習筆記es6——Promise 物件學習(1)

1Promise的含義: Promise是非同步程式設計的一種解決方案; Promise是一個物件,可以獲取非同步操作的訊息,提供統一的api,各種非同步操作都可以用同樣的方式處理; Promise物件有以下兩個特點: 物件狀態不受外界影響。Promise代表

JavaSE基礎學習(八)——面向物件

1.1 面向物件思想 1.1.1 概述: 我們回想一下,之前我們完成一個需求的步驟:首先是搞清楚我們要做什麼,然後在分析怎麼做,最後我們再程式碼體現。一步一步去實現,而具體的每一步都需要我們去實現和操

LeetCode演算法12java 整數轉羅馬數字

問題 羅馬數字包含以下七種字元: I, V, X, L,C,D 和 M。 字元 數值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 羅馬數字 2 寫做 II ,即為兩個並列的 1。12 寫做 XII ,即為 X + II 。 27 寫做 XXVII

Java基礎(2)Java面向物件

Java面向物件 1 Java類與物件 1.1 類 1.2 物件 1.3 內部類 2 面向物件三大特徵 2.1 封裝 2.2 繼承 2.3 多型 3 抽象類 4 介面

struts2入門學習實現一個簡單的登入操作

其實struts2學習並不難,只是需要注意下細節,本文將實現一個基於struts2的簡單的網頁登入操作,先說一下流程吧: 1.配置struts,這是最重要的 2.寫一個繼承ActionSupport的