1. java中,什麼時候要用到靜態語句塊它有何作用呢
一 般情況下,如果有些代碼必須在項目啟動的時候就執行的時候,需要使用靜態代碼塊,這種代碼是主動執行的
2. java中static 靜態代碼塊有什麼用
初始化,比起構造方法他更方便,能在裡面像一般寫程序那樣書寫你想利用或表達的邏輯,比如,一般情況下構造方法里你是不能調用一般非靜態類的方法的,而靜態代碼塊里可以持有某一類的引用而使用一般的方法,這樣大大簡化了代碼,而又起到了初始化的效果。
3. java static塊有什麼具體的作用和注意事項
在Java語言中,static表示「全局」或者「靜態」的意思,用來修飾成員變數和成員方法,也可以形成靜態static代碼塊,但是Java語言中沒有全局變數的概念。
被static修飾的成員變數和成員方法獨立於該類的任何對象。也就是說,它不依賴類特定的實例,被類的所有實例共享。只要這個類被載入,Java虛擬機就能根據類名在運行時數據區的方法區內定找到他們。因此,static對象可以在它的任何對象創建之前訪問,無需引用任何對象。
用public修飾的static成員變數和成員方法本質是全局變數和全局方法,當聲明它類的對象時,不生成static變數的副本,而是類的所有實例共享同一個static變數。
static變數前可以有private修飾,表示這個變數可以在類的靜態代碼塊中,或者類的其他靜態成員方法中使用(當然也可以在非靜態成員方法中使用),但是不能在其他類中通過類名來直接引用,這一點很重要。實際上你需要搞明白,private是訪問許可權限定,static表示不要實例化就可以使用,這樣就容易理解多了。static前面加上其它訪問許可權關鍵字的效果也以此類推。
static修飾的成員變數和成員方法習慣上稱為靜態變數和靜態方法,可以直接通過類名來訪問,訪問語法為:
類名.靜態方法名(參數列表...)
類名.靜態變數名
用static修飾的代碼塊表示靜態代碼塊,當Java虛擬機(JVM)載入類時,就會執行該代碼塊(用處非常大)。
static在Java語言中的使用有四種:(變數、方法、代碼塊、內部類)
1、static變數
按照是否靜態的對類成員變數進行分類可分兩種:一種是被static修飾的變數,叫靜態變數或類
變數;另一種是沒有被static修飾的變數,叫實例變數。
兩者的區別是:
對於靜態變數在內存中只有一個拷貝(節省內存),JVM只為靜態分配一次內存,在載入類的過
程中完成靜態變數的內存分配,可用類名直接訪問(方便),當然也可以通過對象來訪問(但是這是不推薦的)。
對於實例變數,沒創建一個實例,就會為實例變數分配一次內存,實例變數可以在內存中有多個拷貝,互不影響(靈活)。
2、靜態方法
靜態方法可以直接通過類名調用,任何的實例也都可以調用,因此靜態方法中不能用this和super關鍵字,不能直接訪問所屬類的實例變數和實例方法(就是不帶static的成員變數和成員成員方法),只能訪問所屬類的靜態成員變數和成員方法。因為實例成員與特定的對象關聯!這個需要去理解,想明白其中的道理,不是記憶!!!
因為static方法獨立於任何實例,因此static方法必須被實現,而不能是抽象的abstract。
3、static代碼塊
static代碼塊也叫靜態代碼塊,是在類中獨立於類成員的static語句塊,可以有多個,位置可以隨便放,它不在任何的方法體內,JVM載入類時會執行這些靜態的代碼塊,如果static代碼塊有多個,JVM將按照它們在類中出現的先後順序依次執行它們,每個代碼塊只會被執行一次。
4. java中的靜態代碼塊、代碼塊、構造器的執行順序是怎樣呢,這三者有什麼作用呢
先說執行順序:我們在new一個對象時,如果類還沒載入,就需要先將類載入到內存,此時就會執行靜態代碼塊,在創建對象時,是先執行代碼塊,然後執行構造器。所以靜態代碼塊、代碼塊、構造器的執行順序是:靜態代碼塊→代碼塊→構造器。
再說作用:靜態代碼塊是用於初始化類的(在載入類時執行,只執行一次),代碼塊是用於初始化對象的(在創建對象時執行,每次創建對象時都執行),構造器是用於創建對象的。
5. Java中static的作用
1.static 成員變數
在 Java 中還支持用 static 修飾的內部類,稱為靜態內部類。靜態成員內部類的特點主要是它本身是類相關的內部類,所以它可以不依賴於外部類實例而被實例化。靜態內部類不能訪問其外部類的實例成員(包括普通的成員變數和方法),只能訪問外部類的類成員(包括靜態成員變數和靜態方法)。即使是靜態內部類的實例方法(非靜態成員方法)也不能訪問其外部類的實例成員。
6. Java常見代碼塊的作用與區別
1. 局部代碼塊
作用在方法當中,作用是控制變數的生命周期:
public void show(){
{
System.out.println("局部代碼塊運行!");
}
}123456
在程序中當我們定義完成一個局部變數x之後,並且在接下來的代碼中,不想再用到它時,那麼就沒必要讓x在內存中繼續佔用空間。因此就有了局部代碼塊。
2. 構造代碼塊
作用在類的定義Body中,作用是給類的部分欄位統一初始化:
public class Apple {
private String size;
//構造代碼塊
{
System.out.println("構造代碼塊運行!");
size = "E";
}
}
12345678910
構造代碼塊與構造函數的區別是:構造代碼塊是給所有對象進行統一初始化,而構造函數是給對應的對象初始化,因為構造函數是可以多個的,運行哪個構造函數就會建立什麼樣的對象,但無論建立哪個對象,都會先執行相同的構造代碼塊。也就是說,構造代碼塊中定義的是不同對象共性的初始化內容。所以理所當然的,構造代碼塊在構造函數之前執行。
3. 靜態代碼塊
作用有兩個:
(1)給類的靜態變數賦值;
(2)聲明靜態變數;
作用在類的Body中,對類中的靜態變數初始化:
public class APP {
static int x, y; // 靜態變數
static {
x = 5; // 給靜態變數x賦值
}
public static void myMethod() {
y = x++ + ++x; // x++ 先使用x的值再加1;++x先加1再使用x的值
}
public static void main(String[] args) {
x--;
myMethod();
System.out.println(x + y + ++x);
}
}
輸出:23
7. JAVA中 靜態塊的作用
如果有些代碼必須在項目啟動的時候就執行的時候,需要使用靜態代碼塊,這種代碼是主動執行的;需要在項目啟動的時候就初始化,在不創建對象的情 況下,其他程序來調用的時候,需要使用靜態方法,這種代碼是被動執行的. 靜態方法在類載入的時候 就已經載入 可以用類名直接調用
。
與非靜態代碼區別:
靜態代碼塊,在虛擬機載入類的時候就會載入執行,而且只執行一次;
非靜態代碼塊,在創建對象的時候(即new一個對象的時候)執行,每次創建對象都會執行一次
例:
//普通類
public class PuTong {
public PuTong(){
System.out.print("默認構造方法!-->");
}
//非靜態代碼塊
{
System.out.print("非靜態代碼塊!-->");
}
//靜態代碼塊
static{
System.out.print("靜態代碼塊!-->");
}
public static void test(){
{
System.out.println("普通方法中的代碼塊!");
}
}
}
(7)java靜態代碼塊的作用擴展閱讀:
Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程 。
Java具有簡單性、面向對象、分布式、健壯性、安全性、平台獨立與可移植性、多線程、動態性 。
8. java中static的作用
static表示「全局」或者「靜態」的意思,用來修飾成員變數和成員方法,也可以形成靜態static代碼塊,但是Java語言中沒有全局變數的概念。被static修飾的成員變數和成員方法獨立於該類的任何對象。也就是說,它不依賴類特定的實例,被類的所有實例共享。static變數前可以有private修飾,表示這個變數可以在類的靜態代碼塊中,或者類的其他靜態成員方法中使用(當然也可以在非靜態成員方法中使用--廢話),但是不能在其他類中通過類名來直接引用,這一點很重要。實際上你需要搞明白,private是訪問許可權限定,static表示不要實例化就可以使用,這樣就容易理解多了。static前面加上其它訪問許可權關鍵字的效果也以此類推。
9. java中的static到底有什麼作用
static表示「全局」或者「靜態」的意思,用來修飾成員變數和成員方法,也可以形成靜態static代碼塊,但是Java語言中沒有全局變數的概念。被static修飾的成員變數和成員方法獨立於該類的任何對象。也就是說,它不依賴類特定的實例,被類的所有實例共享。static變數前可以有private修飾,表示這個變數可以在類的靜態代碼塊中,或者類的其他靜態成員方法中使用(當然也可以在非靜態成員方法中使用--廢話),但是不能在其他類中通過類名來直接引用,這一點很重要。實際上你需要搞明白,private是訪問許可權限定,static表示不要實例化就可以使用,這樣就容易理解多了。static前面加上其它訪問許可權關鍵字的效果也以此類推。
10. JAVA中為什麼要定義靜態代碼塊和構造函數呢
您好,提問者:
首先靜態代碼塊的作用是,只執行一次,不管是new還是直接類名。
構造函數用於傳遞或者初始化,如果想要這個類的方法或者變數,必須new初始化。
靜態代碼塊:
用於初始化一些操作,例如資料庫連接、配置文件讀取等。
構造函數:
用於new
xxx(值),如果一個類不想被new可以把構造方法寫為private類型。