摘要:三類的初始化時機類的初始化即虛擬機為類的靜態變量賦予初始值這和準備階段設置默認初始值為是不一樣的。類的主動使用種創建類的實例用語句創建實例調用類的靜態變量或對靜態變量賦值這和是有區別的在定義一個類的時候里面只能放方法和屬性,這是規定死了的。
一般在進行分析的時候,會從三個方面進行分析:類、方法(構造方法、成員方法)、變量(成員變量(靜態變量、實例變量)、局部變量)。
一、static修飾符:被static修飾的變量和方法,被類的所有實例所共享。加載類時只分配一次內存。
靜態變量:可以直接通過類名來訪問 Person.a;
靜態方法:可以直接通過類名來訪問 Person.say();靜態方法內,可以訪問靜態變量,但是不能使用this關鍵字且不能訪問實例變量,因為被所有實例所共有,無法判斷屬于哪個實例對象
靜態代碼塊:java虛擬機在加載類時就執行代碼塊
二、final修飾符:有final修飾表示最終(不可再修改)的意思:
final類:不能被繼承(即沒有子類);
final方法:不能被子類的方法覆蓋(final不用來修飾構造方法,父類與子類之間的構造方法不存在覆蓋關系,final修飾是沒有意義的);
final修飾的變量:即常量,常量只能被賦值一次,之后不能改變。(以下靜態常量屬于編譯時常量(final static int a=2*3;在編譯的時就能計算出具體的值),在編譯的時候將這個值就放入到常量池中,a被訪問時類是不會被初始化的(這是類的被動使用)。訪問類的靜態變量或靜態方法的時候類會被初始化(這是類的主動使用)。但只有static修飾的常量,只會在類初始化的時候才會賦值)。具體細節請參考“類的生命周期”---加載(堆區、方法區)--連接(驗證、準備(靜態變量分配內存、設置默認初始值為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/68132.html
摘要:三類的初始化時機類的初始化即虛擬機為類的靜態變量賦予初始值這和準備階段設置默認初始值為是不一樣的。類的主動使用種創建類的實例用語句創建實例調用類的靜態變量或對靜態變量賦值這和是有區別的在定義一個類的時候里面只能放方法和屬性,這是規定死了的。 一般在進行分析的時候,會從三個方面進行分析:類、方法(構造方法、成員方法)、變量(成員變量(靜態變量、實例變量)、局部變量)。 一、static修...
摘要:程序入口方法淺析方法的方法簽名方法簽名講解修飾符類由虛擬機調用,為了沒有限制可以自由的調用,所以采用修飾符。返回值主方法被調用,將返回值返回給沒有任何意義,因此該方法沒有返回值,所以使用。 java程序入口main()方法淺析 main()方法的方法簽名 public static void main(String[] args) 方法簽名講解 ?public修飾符:java類由jav...
摘要:應用在修飾類名,類成員,方法,參數,構造器中。接口修飾符構造器修飾符方法修飾符字段修飾符參數修飾符最基本的修飾符作用在類上當此修飾符修飾類。作用在構造器上在構造器上,只允許使用三種修飾符,。當此修飾符修飾構造器。 1、什么是修飾符? 指的是一種標識類型以及類型成員的訪問范圍的聲明。 應用在修飾類名,類成員,方法,參數,構造器中。 2、修飾符的有幾種? ...
摘要:外部類要訪問內部類的成員,必須創建對象。前提存在一個類或者接口這里的類可以是具體類也可以是抽象類。 1.package關鍵字的概述及作用(了解) A:為什么要有包 將字節碼(.class)進行分類存放 包其實就是文件夾 B:包的概述 舉例: 學生:增加,刪除,修改,查詢 老師:增加,刪除,修改,查詢 ... 方案1:按照功能分 com.heima.add ...
摘要:修飾符包包的概述和使用其實就是文件夾作用對類進行分類管理包的定義格式格式包名多級包用分開范例帶包的類編譯和執行手動建包按照以前的格式編譯文件手動創建包建立文件夾然后在下建立文件夾把文件放到包的最里面把文件放到下的這個文件夾下帶包 1 修飾符1.1 包1.1.1 包的概述和使用其實就是文件夾作用:對類進行分類管理...
閱讀 1123·2021-11-24 09:39
閱讀 3623·2021-09-02 15:21
閱讀 2161·2021-08-24 10:01
閱讀 722·2021-08-19 10:55
閱讀 2447·2019-08-30 15:55
閱讀 1212·2019-08-30 14:16
閱讀 2992·2019-08-29 15:17
閱讀 3235·2019-08-29 13:53