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入門學習14:Java面向物件之內部類
一內部類概述 內部類(Inner Class)就是定義在另外一個類裡面的類。與之對應,包含內部類的類被稱為外部類。 內部類的主要作用如下: A內
JavaSE入門學習24:Java面向對象補充
ont 執行 pri img ack ima iss 類的構造函數 條件 一Java中的Object類 Object類是全部Java類的父類。假設一個類沒有使用extendskeyword明白標識繼承另外一個類,那麽這個類默認 繼
JavaSE入門學習23:Java面向對象之構造方法
ons 抽象類 什麽 ont 機會 語法 好的 error return 學了JavaSE面向對象這一部分,也該對構造方法做一個總結了。 一構造方法 在多數情況下,初始化一個對象的終於步驟是去調用這個對象的構造方法。構造
JavaSE入門學習33:Java集合框架概述
一集合框架 (1)集合的概念 現實生活中的集合:很多的事物湊在一起。 數學中的集合:具有共同屬性的事物的總體。 Java
JavaSE入門學習2:Java開發準備基礎
一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學習札記12:Java中的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程式計數器 程式計數器
入門學習Hadoop1:VMware上搭建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演算法12:java 整數轉羅馬數字
問題 羅馬數字包含以下七種字元: 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的