1. 程式人生 > >java 靜態相關內容

java 靜態相關內容

實例 創建對象 內容 -m this bar this關鍵字 如果 nbsp

一般情況下,如果有些代碼必須在項目啟動的時候就執行的時候,需要使用靜態代碼塊,這種代碼是主動執行的;需要在項目啟動的時候就初始化,在不創建對象的情況下,其他程序來調用的時候,需要使用靜態方法,這種代碼是被動執行的. 靜態方法在類加載的時候 就已經加載 可以用類名直接調用 比如main方法就必須是靜態的 這是程序入口。
兩者的區別就是:靜態代碼塊是自動執行的; 靜態方法是被調用的時候才執行的.

靜態方法
(1)在Java裏,可以定義一個不需要創建對象的方法,這種方法就是靜態方法。要實現這樣的效果,只需要在類中定義的方法前加上static關鍵字。例如:public static int maximum(int n1,int n2)

使用類的靜態方法時,註意:
a.在靜態方法裏只能直接調用同類中其他的靜態成員(包括變量和方法),而不能直接訪問類中的非靜態成員。這是因為,對於非靜態的方法和變量,需要先創建類的實例對象後才可使用,而靜態方法在使用前不用創建任何對象。
b.靜態方法不能以任何方式引用this和super關鍵字,因為靜態方法在使用前不用創建任何實例對象,當靜態方法調用時,this所引用的對象根本沒有產生(this關鍵字只能在方法內部使用,表示對“調用方法的那個對象”的引用)。

(2)靜態變量是屬於整個類的變量而不是屬於某個對象的。註意不能把任何方法體內的變量聲明為靜態,例如:
fun()
{
static int i=0;//非法。
}
(3)一個類可以使用不包含在任何方法體中的靜態代碼塊,當類被載入時,靜態代碼塊被執行,且之被執行一次,靜態塊常用來執行類屬性的初始化。例如:
static
{
}
(4)非靜態代碼塊

一般情況下,如果有些代碼必須在項目啟動的時候就執行的時候,需要使用靜態代碼塊,這種代碼是主動執行的;需要在項目啟動的時候就初始化,在不創建對象的情況下,其他程序來調用的時候,需要使用靜態方法,這種代碼是被動執行的. 靜態方法在類加載的時候 就已經加載 可以用類名直接調用 比如main方法就必須是靜態的 這是程序入口。
兩者的區別就是:靜態代碼塊是自動執行的; 靜態方法是被調用的時候才執行的.

靜態方法
(1)在Java裏,可以定義一個不需要創建對象的方法,這種方法就是靜態方法。要實現這樣的效果,只需要在類中定義的方法前加上static關鍵字。例如:public static int maximum(int n1,int n2)

使用類的靜態方法時,註意:
a.在靜態方法裏只能直接調用同類中其他的靜態成員(包括變量和方法),而不能直接訪問類中的非靜態成員。這是因為,對於非靜態的方法和變量,需要先創建類的實例對象後才可使用,而靜態方法在使用前不用創建任何對象。
b.靜態方法不能以任何方式引用this和super關鍵字,因為靜態方法在使用前不用創建任何實例對象,當靜態方法調用時,this所引用的對象根本沒有產生(this關鍵字只能在方法內部使用,表示對“調用方法的那個對象”的引用)。

(2)靜態變量是屬於整個類的變量而不是屬於某個對象的。註意不能把任何方法體內的變量聲明為靜態,例如:
fun()
{
static int i=0;//非法。
}
(3)一個類可以使用不包含在任何方法體中的靜態代碼塊,當類被載入時,靜態代碼塊被執行,且之被執行一次,靜態塊常用來執行類屬性的初始化。例如:
static
{
}
(4)非靜態代碼塊
[java] view plain copy
  1. public class TestStaticCon {
  2. 1. public static int a = 0;
  3. 2.
  4. 3. static {
  5. 4. a = 10;
  6. 5. System.out.println("父類的非靜態代碼塊在執行a=" + a);
  7. 6. }
  8. 7.
  9. 8. {
  10. 9. a = 8;
  11. 10. System.out.println("父類的非靜態代碼塊在執行a=" + a);
  12. 11. }
  13. 12.
  14. 13. public TestStaticCon() {
  15. 14. this("a在父類帶參構造方法中的值:" + TestStaticCon.a); // 調用另外一個構造方法
  16. 15. System.out.println(a);
  17. 16. System.out.println("父類無參構造方法在執行a=" + a);
  18. 17. }
  19. 18.
  20. 19. public TestStaticCon(String n) {
  21. 20. System.out.println(n);
  22. 21. System.out.println(a);
  23. 22.
  24. 23. }
  25. 24.
  26. 25. public static void main(String[] args) {
  27. 26. TestStaticCon tsc = null;
  28. 27. System.out.println("!!!!!!!!!!!!!!!!!!!!!");
  29. 28. tsc = new TestStaticCon();
  30. 29. }/*Output:
  31. 30. 父類的非靜態代碼塊在執行a=10
  32. 31. !!!!!!!!!!!!!!!!!!!!!
  33. 32. 父類的非靜態代碼塊在執行a=8
  34. 33. a在父類帶參構造方法中的值:10
  35. 34. 8
  36. 35. 8
  37. 36. 父類無參構造方法在執行a=8
  38. 37. */
  39. 38.
  40. 39. }
  41. public class TestStaticCon {
  42. 1. public static int a = 0;
  43. 2.
  44. 3. static {
  45. 4. a = 10;
  46. 5. System.out.println("父類的非靜態代碼塊在執行a=" + a);
  47. 6. }
  48. 7.
  49. 8. {
  50. 9. a = 8;
  51. 10. System.out.println("父類的非靜態代碼塊在執行a=" + a);
  52. 11. }
  53. 12.
  54. 13. public TestStaticCon() {
  55. 14. this("a在父類帶參構造方法中的值:" + TestStaticCon.a); // 調用另外一個構造方法
  56. 15. System.out.println(a);
  57. 16. System.out.println("父類無參構造方法在執行a=" + a);
  58. 17. }
  59. 18.
  60. 19. public TestStaticCon(String n) {
  61. 20. System.out.println(n);
  62. 21. System.out.println(a);
  63. 22.
  64. 23. }
  65. 24.
  66. 25. public static void main(String[] args) {
  67. 26. TestStaticCon tsc = null;
  68. 27. System.out.println("!!!!!!!!!!!!!!!!!!!!!");
  69. 28. tsc = new TestStaticCon();
  70. 29. }/*Output:
  71. 30. 父類的非靜態代碼塊在執行a=10
  72. 31. !!!!!!!!!!!!!!!!!!!!!
  73. 32. 父類的非靜態代碼塊在執行a=8
  74. 33. a在父類帶參構造方法中的值:10
  75. 34. 8
  76. 35. 8
  77. 36. 父類無參構造方法在執行a=8
  78. 37. */
  79. 38.
  80. 39. }


[java] view plain copy
  1. public class TestStaticCon {
  2. public static int a = 0;
  3. static {
  4. a = 10;
  5. System.out.println("父類的非靜態代碼塊在執行a=" + a);
  6. }
  7. {
  8. a = 8;
  9. System.out.println("父類的非靜態代碼塊在執行a=" + a);
  10. }
  11. public TestStaticCon() {
  12. this("a在父類帶參構造方法中的值:" + TestStaticCon.a); // 調用另外一個構造方法
  13. System.out.println(a);
  14. System.out.println("父類無參構造方法在執行a=" + a);
  15. }
  16. public TestStaticCon(String n) {
  17. System.out.println(n);
  18. System.out.println(a);
  19. }
  20. public static void main(String[] args) {
  21. TestStaticCon tsc = null;
  22. System.out.println("!!!!!!!!!!!!!!!!!!!!!");
  23. tsc = new TestStaticCon();
  24. }/*Output:
  25. 父類的非靜態代碼塊在執行a=10
  26. !!!!!!!!!!!!!!!!!!!!!
  27. 父類的非靜態代碼塊在執行a=8
  28. a在父類帶參構造方法中的值:10
  29. 8
  30. 8
  31. 父類無參構造方法在執行a=8
  32. */
  33. }

一般情況下,如果有些代碼必須在項目啟動的時候就執行的時候,需要使用靜態代碼塊,這種代碼是主動執行的;需要在項目啟動的時候就初始化,在不創建對象的情況下,其他程序來調用的時候,需要使用靜態方法,這種代碼是被動執行的. 靜態方法在類加載的時候 就已經加載 可以用類名直接調用 比如main方法就必須是靜態的 這是程序入口。
兩者的區別就是:靜態代碼塊是自動執行的; 靜態方法是被調用的時候才執行的.

靜態方法
(1)在Java裏,可以定義一個不需要創建對象的方法,這種方法就是靜態方法。要實現這樣的效果,只需要在類中定義的方法前加上static關鍵字。例如:public static int maximum(int n1,int n2)

使用類的靜態方法時,註意:
a.在靜態方法裏只能直接調用同類中其他的靜態成員(包括變量和方法),而不能直接訪問類中的非靜態成員。這是因為,對於非靜態的方法和變量,需要先創建類的實例對象後才可使用,而靜態方法在使用前不用創建任何對象。
b.靜態方法不能以任何方式引用this和super關鍵字,因為靜態方法在使用前不用創建任何實例對象,當靜態方法調用時,this所引用的對象根本沒有產生(this關鍵字只能在方法內部使用,表示對“調用方法的那個對象”的引用)。

(2)靜態變量是屬於整個類的變量而不是屬於某個對象的。註意不能把任何方法體內的變量聲明為靜態,例如:
fun()
{
static int i=0;//非法。
}
(3)一個類可以使用不包含在任何方法體中的靜態代碼塊,當類被載入時,靜態代碼塊被執行,且之被執行一次,靜態塊常用來執行類屬性的初始化。例如:
static
{
}
(4)非靜態代碼塊
[java] view plain copy
  1. public class TestStaticCon {
  2. 1. public static int a = 0;
  3. 2.
  4. 3. static {
  5. 4. a = 10;
  6. 5. System.out.println("父類的非靜態代碼塊在執行a=" + a);
  7. 6. }
  8. 7.
  9. 8. {
  10. 9. a = 8;
  11. 10. System.out.println("父類的非靜態代碼塊在執行a=" + a);
  12. 11. }
  13. 12.
  14. 13. public TestStaticCon() {
  15. 14. this("a在父類帶參構造方法中的值:" + TestStaticCon.a); // 調用另外一個構造方法
  16. 15. System.out.println(a);
  17. 16. System.out.println("父類無參構造方法在執行a=" + a);
  18. 17. }
  19. 18.
  20. 19. public TestStaticCon(String n) {
  21. 20. System.out.println(n);
  22. 21. System.out.println(a);
  23. 22.
  24. 23. }
  25. 24.
  26. 25. public static void main(String[] args) {
  27. 26. TestStaticCon tsc = null;
  28. 27. System.out.println("!!!!!!!!!!!!!!!!!!!!!");
  29. 28. tsc = new TestStaticCon();
  30. 29. }/*Output:
  31. 30. 父類的非靜態代碼塊在執行a=10
  32. 31. !!!!!!!!!!!!!!!!!!!!!
  33. 32. 父類的非靜態代碼塊在執行a=8
  34. 33. a在父類帶參構造方法中的值:10
  35. 34. 8
  36. 35. 8
  37. 36. 父類無參構造方法在執行a=8
  38. 37. */
  39. 38.
  40. 39. }
  41. public class TestStaticCon {
  42. 1. public static int a = 0;
  43. 2.
  44. 3. static {
  45. 4. a = 10;
  46. 5. System.out.println("父類的非靜態代碼塊在執行a=" + a);
  47. 6. }
  48. 7.
  49. 8. {
  50. 9. a = 8;
  51. 10. System.out.println("父類的非靜態代碼塊在執行a=" + a);
  52. 11. }
  53. 12.
  54. 13. public TestStaticCon() {
  55. 14. this("a在父類帶參構造方法中的值:" + TestStaticCon.a); // 調用另外一個構造方法
  56. 15. System.out.println(a);
  57. 16. System.out.println("父類無參構造方法在執行a=" + a);
  58. 17. }
  59. 18.
  60. 19. public TestStaticCon(String n) {
  61. 20. System.out.println(n);
  62. 21. System.out.println(a);
  63. 22.
  64. 23. }
  65. 24.
  66. 25. public static void main(String[] args) {
  67. 26. TestStaticCon tsc = null;
  68. 27. System.out.println("!!!!!!!!!!!!!!!!!!!!!");
  69. 28. tsc = new TestStaticCon();
  70. 29. }/*Output:
  71. 30. 父類的非靜態代碼塊在執行a=10
  72. 31. !!!!!!!!!!!!!!!!!!!!!
  73. 32. 父類的非靜態代碼塊在執行a=8
  74. 33. a在父類帶參構造方法中的值:10
  75. 34. 8
  76. 35. 8
  77. 36. 父類無參構造方法在執行a=8
  78. 37. */
  79. 38.
  80. 39. }


[java] view plain copy
  1. public class TestStaticCon {
  2. public static int a = 0;
  3. static {
  4. a = 10;
  5. System.out.println("父類的非靜態代碼塊在執行a=" + a);
  6. }
  7. {
  8. a = 8;
  9. System.out.println("父類的非靜態代碼塊在執行a=" + a);
  10. }
  11. public TestStaticCon() {
  12. this("a在父類帶參構造方法中的值:" + TestStaticCon.a); // 調用另外一個構造方法
  13. System.out.println(a);
  14. System.out.println("父類無參構造方法在執行a=" + a);
  15. }
  16. public TestStaticCon(String n) {
  17. System.out.println(n);
  18. System.out.println(a);
  19. }
  20. public static void main(String[] args) {
  21. TestStaticCon tsc = null;
  22. System.out.println("!!!!!!!!!!!!!!!!!!!!!");
  23. tsc = new TestStaticCon();
  24. }/*Output:
  25. 父類的非靜態代碼塊在執行a=10
  26. !!!!!!!!!!!!!!!!!!!!!
  27. 父類的非靜態代碼塊在執行a=8
  28. a在父類帶參構造方法中的值:10
  29. 8
  30. 8
  31. 父類無參構造方法在執行a=8
  32. */
  33. }






java 靜態相關內容