1. 程式人生 > >構造函數,靜態代碼塊,構造代碼塊

構造函數,靜態代碼塊,構造代碼塊

tro too 代碼 靜態 構造 調用 ges image 類屬性

一、對靜態代碼塊和非靜態代碼塊進行簡單的總結

1.靜態代碼塊:

靜態代碼塊是在當類被載入(內存)時最先被調用的,且之被執行一次,靜態塊常用來執行類屬性的初始化。執行的載入之前就會調用。

2.非靜態代碼塊:

非靜態代碼塊是在當類的對象被創建載入(內存)時最先被調用的,每創建一個對象,即每載入一個對象,非靜態代碼塊都執行一次。執行類對象的載入之前就會調用。

3.靜態方法、非靜態方法:都是調用時,才執行的。靜態方法屬於類的,加載完類就可以調用靜態方法;非靜態方法是屬於對象的,加載完對象就可以調用非靜態方法。

二、相關示例演示

技術分享
 1 public class Cc {
 2     public static void main(String[] args) {
 3         test p=new test();
 4     }
 5 }
 6 
 7 class test {
 8     test() {  //在類對象創建的時候就開始執行。簡稱創建即執行。
 9         System.out.println("這是構造函數");
10     }
11 
12     {  //構造代碼塊,執行在構造函數之前,每當在創建類對象的時候都執行。
13         System.out.println("這是構造代碼塊");
14     }
15     
16     static {  //靜態代碼塊,最早執行,且值執行一次。
17         System.out.println("這是靜態代碼塊");
18     }
19 }
技術分享

打印結果:

技術分享

演示當被調用兩次的時候,會發生什麽打印結果。加深對靜態代碼塊的理解。

技術分享
 1 public class Ccc {
 2 public static void main(String[]args)
 3 {
 4     MyTest p=new MyTest();
 5     MyTest p2=new MyTest();//兩次調用
 6 }
 7 }
 8 class MyTest{
 9     
10     MyTest(){
11         System.out.println("這是構造函數");
12     }
13     
14     {
15         System.out.println("這是構造代碼塊");
16     }
17     
18     static{
19         System.out.println("這是靜態代碼塊");
20         
21     }
22 }
技術分享

打印結果如下:

技術分享

介紹一個含參的例子:

技術分享
 1 class Cccc {
 2     public static void main(String[] args) {
 3         new Person(77);
 4         new Person();
 5     }
 6 }
 7 
 8 class Person {
 9     
10     Person() {
11         System.out.println("a");
12     }
13 
14     
15     Person(int x) {  //註意帶參數了!!
16         System.out.println(x);
17     }
18 
19     static {
20         System.out.println("b");
21     }
22 
23     {
24         System.out.println("c");
25     }
26 }
技術分享

打印結果:

技術分享

http://www.cnblogs.com/1693977889zz/p/6984669.html

構造函數,靜態代碼塊,構造代碼塊