摘要:三類的初始化時機類的初始化即虛擬機為類的靜態變量賦予初始值這和準備階段設置默認初始值為是不一樣的。類的主動使用種創建類的實例用語句創建實例調用類的靜態變量或對靜態變量賦值這和是有區別的在定義一個類的時候里面只能放方法和屬性,這是規定死了的。
一般在進行分析的時候,會從三個方面進行分析:類、方法(構造方法、成員方法)、變量(成員變量(靜態變量、實例變量)、局部變量)。
一、static修飾符:被static修飾的變量和方法,被類的所有實例所共享。加載類時只分配一次內存。
靜態變量:可以直接通過類名來訪問 Person.a;
靜態方法:可以直接通過類名來訪問 Person.say();靜態方法內,可以訪問靜態變量,但是不能使用this關鍵字且不能訪問實例變量,因為被所有實例所共有,無法判斷屬于哪個實例對象
靜態代碼塊:java虛擬機在加載類時就執行代碼塊
二、final修飾符:有final修飾表示最終(不可再修改)的意思:
final類:不能被繼承(即沒有子類);
final方法:不能被子類的方法覆蓋(final不用來修飾構造方法,父類與子類之間的構造方法不存在覆蓋關系,final修飾是沒有意義的);
final修飾的變量:即常量,常量只能被賦值一次,之后不能改變。
靜態常量屬于編譯時常量(final static int a=2*3;在編譯的時就能計算出具體的值),在編譯的時候將這個值就放入到常量池中,a被訪問時類是不會被初始化的(這是類的被動使用)。訪問類的靜態變量或靜態方法的時候類會被初始化(這是類的主動使用)。而靜態變量只會在類初始化的時候才會被賦值)。具體細節請參考“類的生命周期”---加載(堆區、方法區)--連接(驗證、準備(靜態變量分配內存、設置默認初始值為0)、解析(符號引用替換為直接引用,即指針指向方法區的內存位置))--初始化(程序對類或接口主動使用的時候才會被初始化。
類的初始化即java虛擬機為類的static靜態變量賦予初始值(這和準備階段設置默認初始值為0是不一樣的)。只有類的主動使用才會初始化類。
1.類的主動使用(6種):創建類的實例:用new語句創建實例 Person ps=new Person();
調用類的靜態變量或對靜態變量賦值:
public class Person{ static int a=2*3; //這和final static int a=2*3;是有區別的 static{ //Java在定義一個類的時候里面只能放方法和屬性,這是規定死了的。System.out.println()是在調用一個叫println的函數,這里是函數的調用而不是類里面定義一個函數。所以需要用static代碼塊 System.out.println("init Person"); //static聲明的靜態代碼塊,使得類在初始化的時候會被調用而不需要創建實例對象。它這時候就不在任何一個方法中。 } }
調用的時候寫:
System.out.println("a="+Person.a); //這樣就可以在不new一個Person實例的情況下,來初始化Person類了。
調用類的靜態方法
調用java API中的反射方法:Class.forName("Person");
初始化子類的時候會先初始化父類(但"父類"是接口的時候,不會先初始化它所實現的接口的,只有在程序在使用接口的靜態變量時才會使靜態接口初始化)
java虛擬機啟動時被標明為啟動類的類
2.類的被動使用:
final類型的靜態變量在編譯的時候能計算出值(即編譯時常量,在編譯的時候將這個值就放入到常量池中了):
注: final類型的靜態變量在編譯的時候不能計算出變量的值(即運行時常量)的時候是會被初始化的
final static int a=2*3; //變量a是編譯時常量 final static int a=(int)Math.random(); //變量a不是是編譯時常量(即運行時常量)
"父類"是接口的時候,不會先初始化它所實現的接口的,只有在程序在使用接口的靜態變量時才會使靜態接口初始化
ClassLoader類的loadClass("Person")方法的時候,只是對類的加載,不是初始化。Class.forName("Person");才會初始化
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68862.html
摘要:三類的初始化時機類的初始化即虛擬機為類的靜態變量賦予初始值這和準備階段設置默認初始值為是不一樣的。類的主動使用種創建類的實例用語句創建實例調用類的靜態變量或對靜態變量賦值這和是有區別的在定義一個類的時候里面只能放方法和屬性,這是規定死了的。 一般在進行分析的時候,會從三個方面進行分析:類、方法(構造方法、成員方法)、變量(成員變量(靜態變量、實例變量)、局部變量)。 一、static修...
摘要:程序入口方法淺析方法的方法簽名方法簽名講解修飾符類由虛擬機調用,為了沒有限制可以自由的調用,所以采用修飾符。返回值主方法被調用,將返回值返回給沒有任何意義,因此該方法沒有返回值,所以使用。 java程序入口main()方法淺析 main()方法的方法簽名 public static void main(String[] args) 方法簽名講解 ?public修飾符:java類由jav...
摘要:應用在修飾類名,類成員,方法,參數,構造器中。接口修飾符構造器修飾符方法修飾符字段修飾符參數修飾符最基本的修飾符作用在類上當此修飾符修飾類。作用在構造器上在構造器上,只允許使用三種修飾符,。當此修飾符修飾構造器。 1、什么是修飾符? 指的是一種標識類型以及類型成員的訪問范圍的聲明。 應用在修飾類名,類成員,方法,參數,構造器中。 2、修飾符的有幾種? ...
摘要:使用創建的字符串對象是運行時創建出來的,它被保存在運行時內存區,即堆內存,不會放入常量池中。類成員創建的對象實例中根本不會擁有對應類的類變量。抽象類的構造器不能用于創建實例,主要是用于被其子類調用。 Java提供了final關鍵字來修飾變量,方法和類,系統不允許為final變量重新賦值,子類不允許覆蓋父類的final方法,final類不能派生子類。 Abstract 和 inte...
類的更多方面 本節介紹依賴于使用對象引用的類的更多方面以及你在前面的對象部分中了解到的點運算符。 從方法返回值 方法返回到調用它的代碼。 完成方法中的所有語句。 到達return語句。 或拋出異常(稍后介紹)。 以先發生者為準。 你在方法聲明中聲明方法的返回類型,在方法體內,使用return語句返回值。 聲明為void的任何方法都不返回值,它不需要包含return語句,但它可能會這樣做,在這種...
閱讀 594·2021-11-18 13:12
閱讀 1314·2021-11-15 11:39
閱讀 2473·2021-09-23 11:22
閱讀 6194·2021-09-22 15:15
閱讀 3655·2021-09-02 09:54
閱讀 2310·2019-08-30 11:10
閱讀 3245·2019-08-29 14:13
閱讀 2913·2019-08-29 12:49