重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
//構造塊:直接在類中定義且沒有加static關鍵字的代碼塊稱為{}構造代碼塊。構造代碼塊在創建對象時被調用,每次創建對象都會被調用,并且構造代碼塊的執行次序優先于類構造函數。\x0d\x0a\x0d\x0apublic class CodeBlock02\x0d\x0a{\x0d\x0a\x0d\x0a {\x0d\x0a\x0d\x0a System.out.println("第一代碼塊");\x0d\x0a \x0d\x0a }\x0d\x0a\x0d\x0apublic CodeBlock02(){\x0d\x0a System.out.println("構造方法");\x0d\x0a }\x0d\x0a \x0d\x0a {\x0d\x0a\x0d\x0a System.out.println("第二構造塊");\x0d\x0a }\x0d\x0a public static void main(String[] args){\x0d\x0a new CodeBlock02();\x0d\x0a new CodeBlock02();\x0d\x0a new CodeBlock02();\x0d\x0a \x0d\x0a }\x0d\x0a} \x0d\x0a\x0d\x0a/**\x0d\x0a執行結果:\x0d\x0a第一代碼塊\x0d\x0a第二構造塊\x0d\x0a構造方法\x0d\x0a第一代碼塊\x0d\x0a第二構造塊\x0d\x0a構造方法\x0d\x0a第一代碼塊\x0d\x0a第二構造塊\x0d\x0a構造方法*/
創新互聯建站專注于定陶網站建設服務及定制,我們擁有豐富的企業做網站經驗。 熱誠為您提供定陶營銷型網站建設,定陶網站制作、定陶網頁設計、定陶網站官網定制、微信平臺小程序開發服務,打造定陶網絡公司原創品牌,更為您提供定陶網站排名全網營銷落地服務。
package?demo;
//使用反射
//Class.forName(className)).newInstance()
class?Reflect?{
static?{
System.out.println("動態創建Reflect類,這是靜態代碼塊");
}
public?void?speak()?{
System.out.println("動態創建Reflect類");
}
}
public?class?ReflectDemo?{
public?static?void?main(String[]?args)?throws?Exception?{
Class??Demo?=?Class.forName("demo.Reflect");
Reflect?test?=?(Reflect)?Demo.newInstance();
test.speak();
}
}
測試結果:
動態創建Reflect類,這是靜態代碼塊
動態創建Reflect類
static{...}是靜態塊,而只有{...}的是叫做構造塊。
靜態塊在一個程序里面只執行一次;
而構造塊是,只要建立一個對象,構造代碼塊都會執行一次。
靜態塊優先于主方法的執行,靜態塊優先于構造快,然后是構造方法的執行,而且只執行一次!
所以輸出結果是:
static
block
instance1
block
instance2
第一對花括號是屬于構造方法的,第二對花括號括出了類的動態代碼塊,每次構造對象時都會執行動態代碼塊。
另外動態代碼塊是在構造方法之前執行的。
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