1. 程式人生 > >【Java基礎】----static關鍵字、程式碼塊、Main方法、匿名物件詳解

【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.匿名物件

  1. 沒有名字的物件
  2. CodeBlock p=new CodeBlock(); p只是一個物件的名字(引用), newCodeBlock()才是創建出來的物件

  3. new Person().eat();
    缺點:同一個物件只能呼叫一次方法

  4. 作用:傳參
    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-6Static關鍵字

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常見幾組概念的比較(StringStringBuilderStringBufferHashMapHashTable

一、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基礎 (ListSetMapStackQueue)總結

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