靜態代碼塊只會被執行一次,它在Java虛擬機器載入類時執行,如果類中包含多個靜態塊,則按從上往下順序執行
一:靜態變數 什麼是靜態變數 態變數是指被static修飾的變數 靜態變數屬於某個類,被所有執行個體共用 可以通過類名訪問或者通過執行個體名訪問 使用靜態變數
static類型變數名
class Monkey {//聲明靜態變數static int count=0;}class Test {public static void main(String[] args) {for(int i=0;i<3;i++){Monkey m=new Monkey();m.count=m.count+1;}//通過類名訪問靜態變數System.out.println(Monkey.count);}靜態變數與非靜態變數的區別
class SaticVar {//執行個體變數int a=1;//靜態變數static int b=1;}
class Test {public static void main(String[] args) {StaticVar s1=new StaticVar();s1.a++;s1.b++;System.out.println("執行個體變數a="+ s1.a);System.out.println("靜態變數b="+StaticVar.b);StaticVar s2=new StaticVar();s2.a++;s2.b++;System.out.println("執行個體變數a="+ s2.a);System.out.println("靜態變數b="+ s2.b);}}
靜態變數在記憶體中只有一個記憶體空間,在載入類的過程中完成靜態變數的記憶體配置,可以直接通過類名來訪問 執行個體變數每建立一個執行個體,就會為執行個體變數分配一次記憶體,各個對象訪問自己的變數。 靜態變數可以被類名或執行個體對象訪問,而執行個體變數只能被執行個體對象訪問 二:靜態方法 靜態方法:被static修飾的方法稱為靜態方法或類方法
static[修飾符] 傳回值類型 方法名(類型 參數1,類型 參數2…){
方法體
}
class Monkey {//靜態方法static void play(){System.out.println("會玩金箍棒。");}}
class Test {public static void main(String[] args) {//樣本化10個對象for(int i=1;i<=10;i++){Monkey houge=new Monkey();//通過類名調用靜態方法Monkey.play();}}}
<p><span style="color:black;">靜態方法只能訪問靜態變數,不能訪問執行個體變數,因為載入靜態方法時,執行個體變數</span></p><p><span style="color:black;">還沒有分配記憶體空間。</span></p>
三:靜態代碼塊 靜態代碼塊不存在於任何方法體中。
class StaticBlock {static{ System.out.println(“我是靜態代碼塊");}}
靜態代碼塊只會被執行一次,它在Java虛擬機器載入類時執行,
如果類中包含多個靜態塊,則按從上往下順序執行 類中不同部分執行順序
class Order {int a=1;static int b=1;{System.out.println("執行個體變數a="+a);System.out.println("代碼塊執行。");}static {System.out.println("靜態變數b="+b);System.out.println("靜態代碼塊執行。");}Order(){ System.out.println("構造方法執行"); }}
<pre class="java" name="code">class Test {public static void main(String[] args) {Order order=new Order();}}
編譯後得出結論:
靜態變數初始化→靜態代碼塊→初始化靜態方法→初始化執行個體變數→代碼塊→構造方法 四:常量 變數的生命週期 Java中有3種變數,分別為類變數、執行個體變數和某個方法中臨時定義的局部變數。不同的變數的生命週期不同
class Cycle { int var1 = 1; static int var2 = 2; public int add(){ int var3 = var1 + var2; return var3; }}class Test {public static void main(String[] args) {Cycle c=new Cycle(); c.add();}}
var 1,2,3分別代表
執行個體變數、靜態變數、局部變數
final變數final變數
class FinalVar {final int MAX_VALUE=20;final int MIN_VALUE;MAX_VALUE=30;static final double PI=3.1415926;PI=3.1415;}
final int MAX_VALUE=20;對的
final int MIN_VALUE;錯誤 定義時候必須初始化
MAX_VALUE=30;錯誤,不能重複賦值
staticfinal double PI=3.1415926 正確
PI=3.1415;錯誤 靜態執行個體變數不能重複賦值 使用final修飾的變數表示取值不會改變的常量 final修飾的執行個體變數的值不能改變,這就意味著在執行個體化具有final變數的多個對象時,每個對象都會有相同的final變數值。這種執行個體變數反而使用靜態變數會更符合設計規則,因此經常將final變數同時定義成為靜態(static final)。 Final變數的特徵 final修飾符可以修飾靜態變數、執行個體變數和局部變數,分別表示靜態常量、執行個體常量和局部常量 final類型的變數必須顯式地初始化,否則將導致編譯錯誤 final變數只能被賦值一次 在定義final常量時,一般以大寫字母命名,且多個單詞之間以“_”符號隔開 五:包 一個檔案夾裡面不能放入同樣名字的資源檔,java也是如此,去了更好的更合理的去分配資源,於是包出現了。 Java的常用包 JDK提供的Java常用包
java.lang包:系統類別(System)、整數類(Integer)和字串類(String)等
java.io包:檔案輸入資料流類(FileInputStream類)、檔案輸出資料流類(FileOutputStream)等 n java.util 包:提供日期類(Date)、集合類(Collection)等實用類 如果一個類訪問了來自另一個包(除java.lang)中的類,則首先必須通過import語句引入該類
import com.xxx.edu.server.Teacher;
在一個Java源檔案中,只允許有一個package語句,而且必須位於源檔案的第一句