1. 是不是 java static代碼塊優先執行啊
static代碼塊是在類初始化時就被虛擬機執行的,所以最先輸出的是d。
main方法是靜態方法,是在類載入完之後由虛擬機調用的,調用之後才會輸出c1。
一般情況下,如果有些代碼必須在項目啟動的時候就執行的時候,需要使用靜態代碼塊,這種代碼是主動執行的;
2. java static {}的用法
static 關鍵字很有意思哦
public static String getProperty(String key) { 這里不用說了,靜態方法
就說說static{}
稱為static代碼塊 ,也叫靜態代碼塊,
是在類中獨立於類成員的static語句塊,可以有多個,位置可以隨便放,它不在任何的方法體內,JVM載入類時會執行這些靜態的代碼塊,如果static代碼塊有多個,JVM將按照它們在類中出現的先後順序依次執行它們,每個代碼塊只會被執行一次
利用靜態代碼塊可以對一些static變數進行賦值
例子
public class Test5 {
private static int a;
private int b;
static{
Test5.a=3;
System.out.println(a);
Test5 t=new Test5();
t.f();
t.b=1000;
System.out.println(t.b);
}
static{
Test5.a=4;
System.out.println(a);
}
public static void main(String[] args) {
// TODO 自動生成方法存根
}
static{
Test5.a=5;
System.out.println(a);
}
public void f(){
System.out.println("hhahhahah");
}
}
運行結果:
3
hhahhahah
1000
4
5
3. Java中static的作用
1.static 成員變數
在 Java 中還支持用 static 修飾的內部類,稱為靜態內部類。靜態成員內部類的特點主要是它本身是類相關的內部類,所以它可以不依賴於外部類實例而被實例化。靜態內部類不能訪問其外部類的實例成員(包括普通的成員變數和方法),只能訪問外部類的類成員(包括靜態成員變數和靜態方法)。即使是靜態內部類的實例方法(非靜態成員方法)也不能訪問其外部類的實例成員。
4. java中一段關於static代碼
static{}是靜態塊,只有在class第一次初始化的時候執行,對於你這個就是在main函數之前執行了已經。
所以在你Count ct=new Count();之前就開始執行
static Value v1,v2;//此時value.c = 0
static{
prt("v1.c=" v1.c " v2.c=" v2.c);
v1=new Value(27);//update to 27
prt("v1.c=" v1.c " v2.c=" v2.c); //27 now
v2=new Value(15);//update to 15
prt("v1.c=" v1.c " v2.c=" v2.c); /15 now
}
因此輸出v1.c=0 v2.c=0
v1.c=27 v2.c=27
v1.c=15 v2.c=15
然後跑Value value = new Value(10),---> Value.c = 10 now
輸出:ct.c=10
value1, value2全部為10
v1.inc --> c=c+1 = 10+ 1= 11
因此以後輸出只要是Value.c都為11
static就升卜是常駐內存的變數,只要定了,不管櫻尺你是新new的多少個,都是那個值
ct.v.c -->ct的成員v的成員c...
要好好學啊。。基礎很薄弱吵頌穗。。
5. java中靜態代碼塊 static的作用
類載入的時候就會去執行靜態代碼塊的內容。比如說:寫連接資料庫的那些內容時,經常有classforName("XXX"),用於載入一些東西,這些東西就可以寫在靜態代碼塊中。還有一些,你想讓類載入時就執行的程序也可以放在裡面。
6. java中static作用詳解
static表示「全局」或者「靜態」的意思,用來修飾成員變數和成員方法,也可以形成靜態static代碼塊,但是Java語言中沒有全局變數的概念。
被static修飾的成員變數和成員方法獨立於該類的任何對象。也就是說啟孝鎮,它不依賴類特定的實例,被類的所有實例共享。
只要這個類被載入,Java虛擬機就能根據類名在運行時數據區的方法區內定找到他們。因此,static對象可以在它的任何對象創建之前訪問,無需引用任何對象。
用public修飾的static成員變數和成員方法本質是全局變數和全局方法,當聲明它類的對象市,不生成static變數的副本,而是類的所有實例共享同一個static變數。
static變數前可以有private修飾,表示這個變數可以在類的靜態代碼塊中,或者類的其他靜態成員方法中使用(當然也可以在非靜態成員方法中使用--廢話),但是不能在其他類中通過類名來直接引用,這一點很重要。實際上你需要搞明白,private是訪問許可權限定,static表示不要實例化就可以使用,這樣就容易理解多了。static前面加上其它訪問許可權關鍵字的效果也以此類推。
7. java 中靜態代碼和非靜態代碼塊的區別!
相同點:都是在JVM載入類時且在構造方法執行之前執行,在類中都可以定義多個,
一般在代碼塊中對一些static變數進行賦值。
不同點:靜態代碼塊在非靜態代碼塊之前執行(靜態代碼塊—>非靜態代碼塊—>構造方法)。
靜態代碼塊只在第一次new執行一次,之後不再執行,而非靜態代碼塊在每new
一次就執行一次。非靜態代碼塊可在普通方法中定義(不過作用不大);而靜態代碼塊不行。
例:
//普通類
public class PuTong {
public PuTong(){
System.out.print("默認構造方法!-->");
}
//非靜態代碼塊
{
System.out.print("非靜態代碼塊!-->");
}
//靜態代碼塊
static{
System.out.print("靜態代碼塊!-->");
}
public static void test(){
{
System.out.println("普通方法中的代碼塊!");
}
}
}
//測試類
public class TestClass {
/**
* 區別兩次new靜態與非靜態代碼塊執行情況
*/
public static void main(String[] args) {
PuTong c1 = new PuTong();
c1.test();
PuTong c2 = new PuTong();
c2.test();
}
}
/*
運行輸出結果是:
靜態代碼塊!-->非靜態代碼塊!-->默認構造方法!-->普通方法中的代碼塊!
非靜態代碼塊!-->默認構造方法!-->普通方法中的代碼塊!
*/
8. java中static的用法
static可以修飾變數(屬性)、方法、代碼塊和內部類
static屬性:屬於這個類所有,即由該類創建的所有對象共享同一個static屬性。可以對象創建後通過對象名.屬性名和類名.屬性名兩種方式來訪問。也可以在沒有創建任何對象之前通過類名.屬性名的方式來訪問。
static方法:也可以通過對象名.方法名和類名.方法名兩種方式來訪問
static代碼塊:當類被第一次使用時(可能是調用static屬性和方法,或者創建其對象)執行靜態代碼塊,且只被執行一次,主要作用是實現static屬性的初始化。
static內部類:屬於整個外部類,而不是屬於外部類的每個對象。不能訪問外部類的非靜態成員(變數或者方法),.可以訪問外部類的靜態成員
9. Java中,static代碼塊創建的IO流需要手動關閉嗎
IO 流除了可以手動關閉外,在垃圾回收這個對象的時候也會自動關閉。
但系統進行垃圾回收的時機是不確定的,static 代碼塊執行完後,不會馬上進行回收。在這段時間內,會造成無用的內存及IO等其他資源佔用。所以最好還是用完即關。
推薦寫在 try 里,try 塊執行完自動關閉。
10. java 在類中直接static{}和{}的區別在哪
區別如下:
static{ //靜態代碼塊,優先於普通代碼塊執行,靜態代碼塊中使用的變數必須是靜態變數。
//一般是為了載入properties文件信息,只會被執行一次。}
{ //普通敬如代碼塊,在靜態代碼塊之後執行,在構造函數之前執行,所以執行順序是【靜態代碼沖告塊->普通代碼塊->構造函亮判啟數】
//每次new一個對象都會執行一次
}