java 靜態相關內容
阿新 • • 發佈:2017-06-20
實例 創建對象 內容 -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)非靜態代碼塊
[java] view plain copy
[java] view plain copy
一般情況下,如果有些代碼必須在項目啟動的時候就執行的時候,需要使用靜態代碼塊,這種代碼是主動執行的;需要在項目啟動的時候就初始化,在不創建對象的情況下,其他程序來調用的時候,需要使用靜態方法,這種代碼是被動執行的. 靜態方法在類加載的時候 就已經加載 可以用類名直接調用 比如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
[java] view plain copy
一般情況下,如果有些代碼必須在項目啟動的時候就執行的時候,需要使用靜態代碼塊,這種代碼是主動執行的;需要在項目啟動的時候就初始化,在不創建對象的情況下,其他程序來調用的時候,需要使用靜態方法,這種代碼是被動執行的. 靜態方法在類加載的時候 就已經加載 可以用類名直接調用 比如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)非靜態代碼塊
兩者的區別就是:靜態代碼塊是自動執行的; 靜態方法是被調用的時候才執行的.
靜態方法
(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)非靜態代碼塊
- public class TestStaticCon {
- 1. public static int a = 0;
- 2.
- 3. static {
- 4. a = 10;
- 5. System.out.println("父類的非靜態代碼塊在執行a=" + a);
- 6. }
- 7.
- 8. {
- 9. a = 8;
- 10. System.out.println("父類的非靜態代碼塊在執行a=" + a);
- 11. }
- 12.
- 13. public TestStaticCon() {
- 14. this("a在父類帶參構造方法中的值:" + TestStaticCon.a); // 調用另外一個構造方法
- 15. System.out.println(a);
- 16. System.out.println("父類無參構造方法在執行a=" + a);
- 17. }
- 18.
- 19. public TestStaticCon(String n) {
- 20. System.out.println(n);
- 21. System.out.println(a);
- 22.
- 23. }
- 24.
- 25. public static void main(String[] args) {
- 26. TestStaticCon tsc = null;
- 27. System.out.println("!!!!!!!!!!!!!!!!!!!!!");
- 28. tsc = new TestStaticCon();
- 29. }/*Output:
- 30. 父類的非靜態代碼塊在執行a=10
- 31. !!!!!!!!!!!!!!!!!!!!!
- 32. 父類的非靜態代碼塊在執行a=8
- 33. a在父類帶參構造方法中的值:10
- 34. 8
- 35. 8
- 36. 父類無參構造方法在執行a=8
- 37. */
- 38.
- 39. }
- public class TestStaticCon {
- 1. public static int a = 0;
- 2.
- 3. static {
- 4. a = 10;
- 5. System.out.println("父類的非靜態代碼塊在執行a=" + a);
- 6. }
- 7.
- 8. {
- 9. a = 8;
- 10. System.out.println("父類的非靜態代碼塊在執行a=" + a);
- 11. }
- 12.
- 13. public TestStaticCon() {
- 14. this("a在父類帶參構造方法中的值:" + TestStaticCon.a); // 調用另外一個構造方法
- 15. System.out.println(a);
- 16. System.out.println("父類無參構造方法在執行a=" + a);
- 17. }
- 18.
- 19. public TestStaticCon(String n) {
- 20. System.out.println(n);
- 21. System.out.println(a);
- 22.
- 23. }
- 24.
- 25. public static void main(String[] args) {
- 26. TestStaticCon tsc = null;
- 27. System.out.println("!!!!!!!!!!!!!!!!!!!!!");
- 28. tsc = new TestStaticCon();
- 29. }/*Output:
- 30. 父類的非靜態代碼塊在執行a=10
- 31. !!!!!!!!!!!!!!!!!!!!!
- 32. 父類的非靜態代碼塊在執行a=8
- 33. a在父類帶參構造方法中的值:10
- 34. 8
- 35. 8
- 36. 父類無參構造方法在執行a=8
- 37. */
- 38.
- 39. }
[java] view plain copy
- public class TestStaticCon {
- public static int a = 0;
- static {
- a = 10;
- System.out.println("父類的非靜態代碼塊在執行a=" + a);
- }
- {
- a = 8;
- System.out.println("父類的非靜態代碼塊在執行a=" + a);
- }
- public TestStaticCon() {
- this("a在父類帶參構造方法中的值:" + TestStaticCon.a); // 調用另外一個構造方法
- System.out.println(a);
- System.out.println("父類無參構造方法在執行a=" + a);
- }
- public TestStaticCon(String n) {
- System.out.println(n);
- System.out.println(a);
- }
- public static void main(String[] args) {
- TestStaticCon tsc = null;
- System.out.println("!!!!!!!!!!!!!!!!!!!!!");
- tsc = new TestStaticCon();
- }/*Output:
- 父類的非靜態代碼塊在執行a=10
- !!!!!!!!!!!!!!!!!!!!!
- 父類的非靜態代碼塊在執行a=8
- a在父類帶參構造方法中的值:10
- 8
- 8
- 父類無參構造方法在執行a=8
- */
- }
一般情況下,如果有些代碼必須在項目啟動的時候就執行的時候,需要使用靜態代碼塊,這種代碼是主動執行的;需要在項目啟動的時候就初始化,在不創建對象的情況下,其他程序來調用的時候,需要使用靜態方法,這種代碼是被動執行的. 靜態方法在類加載的時候 就已經加載 可以用類名直接調用 比如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
- public class TestStaticCon {
- 1. public static int a = 0;
- 2.
- 3. static {
- 4. a = 10;
- 5. System.out.println("父類的非靜態代碼塊在執行a=" + a);
- 6. }
- 7.
- 8. {
- 9. a = 8;
- 10. System.out.println("父類的非靜態代碼塊在執行a=" + a);
- 11. }
- 12.
- 13. public TestStaticCon() {
- 14. this("a在父類帶參構造方法中的值:" + TestStaticCon.a); // 調用另外一個構造方法
- 15. System.out.println(a);
- 16. System.out.println("父類無參構造方法在執行a=" + a);
- 17. }
- 18.
- 19. public TestStaticCon(String n) {
- 20. System.out.println(n);
- 21. System.out.println(a);
- 22.
- 23. }
- 24.
- 25. public static void main(String[] args) {
- 26. TestStaticCon tsc = null;
- 27. System.out.println("!!!!!!!!!!!!!!!!!!!!!");
- 28. tsc = new TestStaticCon();
- 29. }/*Output:
- 30. 父類的非靜態代碼塊在執行a=10
- 31. !!!!!!!!!!!!!!!!!!!!!
- 32. 父類的非靜態代碼塊在執行a=8
- 33. a在父類帶參構造方法中的值:10
- 34. 8
- 35. 8
- 36. 父類無參構造方法在執行a=8
- 37. */
- 38.
- 39. }
- public class TestStaticCon {
- 1. public static int a = 0;
- 2.
- 3. static {
- 4. a = 10;
- 5. System.out.println("父類的非靜態代碼塊在執行a=" + a);
- 6. }
- 7.
- 8. {
- 9. a = 8;
- 10. System.out.println("父類的非靜態代碼塊在執行a=" + a);
- 11. }
- 12.
- 13. public TestStaticCon() {
- 14. this("a在父類帶參構造方法中的值:" + TestStaticCon.a); // 調用另外一個構造方法
- 15. System.out.println(a);
- 16. System.out.println("父類無參構造方法在執行a=" + a);
- 17. }
- 18.
- 19. public TestStaticCon(String n) {
- 20. System.out.println(n);
- 21. System.out.println(a);
- 22.
- 23. }
- 24.
- 25. public static void main(String[] args) {
- 26. TestStaticCon tsc = null;
- 27. System.out.println("!!!!!!!!!!!!!!!!!!!!!");
- 28. tsc = new TestStaticCon();
- 29. }/*Output:
- 30. 父類的非靜態代碼塊在執行a=10
- 31. !!!!!!!!!!!!!!!!!!!!!
- 32. 父類的非靜態代碼塊在執行a=8
- 33. a在父類帶參構造方法中的值:10
- 34. 8
- 35. 8
- 36. 父類無參構造方法在執行a=8
- 37. */
- 38.
- 39. }
[java] view plain copy
- public class TestStaticCon {
- public static int a = 0;
- static {
- a = 10;
- System.out.println("父類的非靜態代碼塊在執行a=" + a);
- }
- {
- a = 8;
- System.out.println("父類的非靜態代碼塊在執行a=" + a);
- }
- public TestStaticCon() {
- this("a在父類帶參構造方法中的值:" + TestStaticCon.a); // 調用另外一個構造方法
- System.out.println(a);
- System.out.println("父類無參構造方法在執行a=" + a);
- }
- public TestStaticCon(String n) {
- System.out.println(n);
- System.out.println(a);
- }
- public static void main(String[] args) {
- TestStaticCon tsc = null;
- System.out.println("!!!!!!!!!!!!!!!!!!!!!");
- tsc = new TestStaticCon();
- }/*Output:
- 父類的非靜態代碼塊在執行a=10
- !!!!!!!!!!!!!!!!!!!!!
- 父類的非靜態代碼塊在執行a=8
- a在父類帶參構造方法中的值:10
- 8
- 8
- 父類無參構造方法在執行a=8
- */
- }
java 靜態相關內容