【Java基礎】----static關鍵字、程式碼塊、Main方法、匿名物件詳解
1.static關鍵字
static簡介
static是靜態的意思,是一個修飾符,能夠用於成員變數和成員屬性。
特點
能夠通過類名直接進行呼叫,被static修飾的成員屬性變成了類屬性,被static修飾的成員方法變成了類方法, 類屬性 和 類方法能夠不用建立物件直接被呼叫
//普通類
public class Persion {
//static修飾後成為類屬性
public static String str="hello,sttaic";
//static修飾後成為類方法
public static void sleep(){
System.out.println("好吧!,我睡了" );
}
}
//Main主執行緒
public static void main(String[] args) {
//能夠不用建立物件直接呼叫
//類名.成員變數
String aa=Persion.str;
//類名.成員方法
Persion.sleep();
}
靜態屬性被該類的說有物件所共享
靜態變數(類變數)和非靜態變數(例項變數)的區別
a.記憶體中的位置
類變數隨著類的載入而存在於方法區中
例項變數隨著物件的建立而存在於堆記憶體中b.生命週期
靜態變數的生命週期最長,隨著類的載入而載入,隨著類的消失而消失;例項變數的生命週期隨著物件的建立而產生,消失而消失,靜態屬性要早於物件而存在。
c.所屬關係不同
類變數所屬於整個類,被類的所有物件所共有。
例項變數是物件的特有資料,僅僅屬於某個物件。
優缺點
優點: 對於物件的共享資料提供單獨的儲存空間,節省了控制元件,沒必要所有物件都儲存一份。
缺點: 生命週期過於長,訪問有一定的侷限性,(靜態方法只能訪問靜態屬性)
2.程式碼塊
說明
程式碼塊就是被{ }包裹的部分,Java中的程式碼塊分為:
普通程式碼塊,又稱為區域性程式碼塊,存在於方法體中構造程式碼塊,又稱為初始化程式碼塊,在使用new關鍵字建立物件時執行,且先於構造方法執行
靜態程式碼塊,被static直接修飾的程式碼塊,在類被載入時就執行,只執行一次
public class CodeBlock {
//1.靜態程式碼塊 類載入的時候進行執行
static{
System.out.println("這是靜態程式碼塊");
}
//2.構造程式碼塊 建立物件的時候執行
{
System.out.println("這是構造程式碼塊(初始化程式碼塊)");
}
public CodeBlock(){
System.out.println("這是構造方法");
}
public void hello(){
//區域性程式碼塊 當方法被呼叫的時候開始執行
{
int i=100;
System.out.println("這是普通程式碼塊(區域性程式碼塊)");
}
int i=1;
}
//主函式
public static void main(String[] args) {
//1.在建立物件前 靜態程式碼塊首先執行
//2.在建立物件時 構造程式碼塊開始執行
//3.在建立物件時 構造代方法開始執行(構造程式碼塊先於構造方法執行)
CodeBlock cb1=new CodeBlock();
//4.方法被呼叫時 普通程式碼塊執行
cb1.hello();
System.out.println("-------割-------");
//靜態程式碼塊只在載入類的時候呼叫且只調用一次
CodeBlock cb2=new CodeBlock();
cb2.hello();
}
}
當執行CodeBlock p = new CodeBlock(); 時,記憶體變化情況
1,將Person.class檔案載入進記憶體
2,在方法區為靜態屬性分配記憶體並進行預設初始化
3,執行靜態程式碼塊,靜態方法進方法區
4,p是物件(變數),那麼在棧記憶體中開闢一個變數空間p
5,在堆記憶體中給物件分配空間,並分配記憶體地址值
6,普通方法進方法區
7,非靜態屬性進堆記憶體,並進行預設初始化
8,呼叫構造程式碼塊(初始化程式碼塊)
9,呼叫對應的構造方法進行物件初始化,物件初始化完畢
10,將物件記憶體地址賦值給p變數,讓p變數指向該物件
3.Main方法
main方法是一個特殊的方法,作為程式執行的入口可以被JVM識別。
main方法是靜態的,所以可以被JVM直接呼叫,非常方便。
main不是Java關鍵字,但用來被JVM識別為程式執行的入口。
4.匿名物件
- 沒有名字的物件
CodeBlock p=new CodeBlock(); p只是一個物件的名字(引用), newCodeBlock()才是創建出來的物件
new Person().eat();
缺點:同一個物件只能呼叫一次方法作用:傳參
a.自定義的型別也可以作為引數的型別去使用
b.形參的型別是Person,那麼實參的型別也必須是Person
c.實參在傳參時可以匿名
d.實參這個物件傳到方法中後,可以在方法裡呼叫它的方法
相關推薦
【Java基礎】繼承中的程式碼塊和構造方法的執行順序探索
本文講述有關一個類的靜態程式碼塊,構造程式碼塊,構造方法的執行流程問題。首先來看一個例子 /** * Created by lili on 15/10/19. */ class Person{ static { System.out.println("執行Per
【Java基礎】----static關鍵字、程式碼塊、Main方法、匿名物件詳解
1.static關鍵字 static簡介 static是靜態的意思,是一個修飾符,能夠用於成員變數和成員屬性。 特點 能夠通過類名直接進行呼叫,被static修飾
【Java基礎】static關鍵字
通過static宣告的屬性或者方法可以通過類名稱直接呼叫 static方法只能呼叫static屬性或者方法,不能呼叫非static屬性或者方法 非static方法則不受限,可以任意呼叫static宣告的屬性或者方法 注意:main方法本身就是一個static方法 示例1:static方法呼叫
【Java-6】Static關鍵字
static表示“全域性”或者“靜態”的意思,在Java中static與C/C++含義完全不同,在Java中使用static方便在沒有建立物件的情況下來進行呼叫(方法/變數) 假設我們定義了一個類,類底下有屬性,有方法,實際上這些屬性、方法有的直接從屬於類,有的屬於物件,如何區別所屬呢?我們使用s
【Java基礎】類的例項化、static、父類建構函式執行順序
重溫java基礎,以免自己以後犯原則性錯誤,這是最基本,最基礎的東西。 直接上程式碼: A.java public class A { int a1 = 8; int a2 = getA2(); { int a3 = 9; System.out.pr
轉載:【Java基礎】InputStream 、 InputStreamReader和BufferedReader
gen 結果 取字符 sys try eight string font buffer 來源:http://blog.csdn.net/zgljl2012/article/details/47267609 在Java中,上述三個類經常用於處理數據流,下面介紹一下三個類的
【Java基礎】程式碼塊,構造程式碼塊,靜態程式碼塊
程式碼塊 public class Demo { public static void main(String[] args){ { int a = 1; System.out.println(a); }
【java基礎】abstract抽象類、方法的特點及注意事項
摘要:本文引自畢老師Java程式碼。 /* 抽象類: 抽象:籠統,模糊,看不懂!不具體。 特點: 1,方法只有宣告沒有實現時,該方法就是抽象方法,需要被abstract修飾。 抽象方法必須定義在抽象類中。該類必須也被abstract修飾。 2,抽象類不可以被例項化。
【Java基礎】Java常見幾組概念的比較(String、StringBuilder、StringBuffer、HashMap、HashTable
一、String、StringBuilder、StringBuffer的區別 String是字串常量,StringBuffer和StringBuilder是字串變數。 StringBuilder 執
【JAVA基礎】③關於this,super,static和final
一、this:1、呼叫當前物件2、呼叫構造方法(必須放在第一行); 二、super:指向父類的引用 說到底,this和super的使用,最大的好處就是減少了程式碼量。 三、static:1、static修飾的屬性,將不再屬於某個物件,而是屬於這個類,成為類屬
【Java基礎】包、類、介面、常量、方法、變數的命名規則
1、包(package)命名規則: 使用公司域名倒寫作為包名,如公司域名 www.weibin.com ,則包名為com.weibin.www 或com.weibin.(作用的介紹),方便識別軟體、類
【Java基礎】 (List、Set、Map、Stack、Queue)總結
1、引入背景 如果一個程式只包含固定數量的且其生命週期都是已知的物件,那麼這是一個非常簡單的程式,而在通常情況下程式總在執行時才知道某些條件去建立物件,所以就不能通過建立命名的引用來持有每一個物件,因為你不知道這樣的物件有多少個,java中有多種方案來儲存物件
【Java基礎】RTTI與反射之Java
start auth try dword star sse from tac sed 1 ; Example assembly language program -- 2 ; Author: Karllen 3 ; Date: revised 05/2014
【Java基礎】Java常見的異常
java exception Java常見的異常1. java.lang.NullPointerException (空指針異常)調用了未經初始化的對象或者是不存在的對象2. java.lang.ClassNotFoundException 指定的類不存在3. java.lang.NumberForm
【Java基礎】Java基本數據類型與位運算
右移 數據 bits 類型 span 網上 height 使用 常數 1.賦值運算符 賦值使用操作符“=”。它的意思是“取右邊的值(即右值),把它復制給左邊(即左值)”。右值可以是任何 常數、變量或者表達式 (只要它能 生成
【Java基礎】Java運算符優先級
() logs 分享 body rowspan 單元 ima idt string 序列號 符號 名稱 結合性(與操作數) 目數 說明 1 . 點 從左到右
Java基礎之static關鍵字的用法
直接 方法 普通 類變量 靜態塊 引用 同時 序列化 用法 Java中的static關鍵字主要用於內存管理。我們可以應用static關鍵字在變量、方法、塊和嵌套類中。 static關鍵字屬於類,而不是類的實例。 靜態(static)可以是:
【java基礎】重寫equals()方法的同時要重寫hashCode()方法
而且 通過 才會 默認 什麽 需要 現在 ash 字段 1、 為什麽要重寫equals方法? 因為Object的equal方法默認是兩個對象的引用的比較,意思就是指向同一內存,地址則相等,否則不相等;如果你現在需要利用對象裏面字段的值來判斷是否相等,則重寫equals方法。
【Java基礎】基礎精華總結
一:java概述(快速瀏覽): 1991 年Sun公司的James Gosling等人開始開發名稱為 Oak 的語言,希望用於控制嵌入在有線電視交換盒、PDA等的微處理器; 1994年將Oak語言更名為Java; Java的三種技術架構: JAVA
【Java基礎】註解(Annotation)
Annotation,程式碼裡的特殊標記,在編譯、類載入、執行時被讀取,並執行相應的處理。 使用註解,在不改變原有邏輯的情況下,在原始檔中嵌入一些補充資訊。 Annotation提供了一種為程式元素設定元資料的方法。 Ann