static
1、可以用來定義靜態的成員變量
2、可以用來定義靜態的函數
3、可以定義靜態代碼塊
1、靜態成員變量語法特點
定義方法:起名Person.java
class Person {
staticint i; //int i 前加上static i 就是靜態成員變量
}
a)、常用的調用成員變量方法,先生成
“類的對象”例如:(1)、 Person person = new person();
person.i= 10;
class test{
publicstatic void main (String args []){
Personperson = new Person(); //紅色警報 Person person中間不加.
person.i= 10;
}
}
當我們將Person.java中定義爲靜態成員變量時候如上邊(1、靜態成員變量
的語法特點)
我們在test中就可以直接調用
class test{
publicstatic void main (String args []){
Person.i= 10 ;
}
}
注:1、靜態成員變量【可以】使用類名進行直接調用;
2、靜態成員變量同時也可以用對象來調用,即普通調用方法;
P1 是一個person的對象;將p1的i成員變量賦值爲10;
P1 、 p2 都是一個引用他們分別指向堆內存當中的一個對象;
P1 對象中i的變量爲10;
注意
如果i設置爲靜態的成員變量
此時p1、p2使用的i的這個成員變量是同一個,
所有的對象使用的靜態變量的值都是同一份;
此爲代碼,先編譯Person.java 然後編譯Test.java然後執行Test
--------------------------------------------------------------------------------
//定義一個Person的類
class Person {
staticint i; //int i 前加上static i 就是靜態成員變量
}
//定義一個Test的類
class Test{
public static void main (String args[]){
Person p1 = new Person();
Person p2 = new Person();
Person.i = 10;
System.out.println("p1的i值爲" + p1.i);
System.out.println("p2的i的值" +p2.i);
/*
p1、p2使用的i的這個成員變量是同一個,任何一個成員變量的值得到修改,其他的所有的成員變量的值一同修改
*/
p1.i=20;
System.out.println("p1的i值爲" + p1.i);
System.out.println("p2的i的值" +p2.i);
}
}
分別編譯執行java Test
總結 1、定義靜態變量在變量的類型前面加上static
2、既可以用對象名調用,又可以用類名調用
3、所有的對象使用的靜態變量都是同一份,任何一個靜態變量得到修改,其他的靜態變量都會跟着修改
----------------------------------------------------------------------
靜態函數:
class Person{
//static int i ;
static void fun() {
System.out.println("我是靜態函數");
}
}
--------
class Test{
public static void main (String args[]){
/*
Person p1 = new Person();
Person p2 = new Person();
Person.i = 10;
System.out.println("p1的i值爲" + p1.i);
System.out.println("p2的i的值" +p2.i);
//p1、p2使用的i的這個成員變量是同一個,所以修改p1的成員對象值時,p2也會同時修改
p1.i=20;
System.out.println("p1的i值爲" + p1.i);
System.out.println("p2的i的值" +p2.i);
*/
Person.fun ();
}
}
----------------------------------------------------------------------------
class Person3{
static String name;
static void talk(){
System.out.println("I most love the human is " + name);
}
}
---
class Test3{
public static void main (String args[]){
Person3.name = "劉晶晶";
Person3.talk();
}
}
1、靜態函數前邊需要加上static
2、靜態函數是可以用類名直接調用的 如上 class Test3 中 Person3.talk(); Person3就是類名
如果紅線處可以應用非靜態的成員變量,那麼this就無法解釋,因爲沒有所謂的調用這個函數的對象。
--------------------------------------------------------------------------
靜態代碼塊:
class Person3{
static{
System.out.println("靜態代碼塊");
}
static String name;
static void talk(){
System.out.println("I most love the human is " + name);
}
}
------
class Test3{
public static void main (String args[]){
Person3.name = "劉晶晶";
Person3.talk();
}
}
如果單一執行 Person3 會產生錯誤:提示找不到主函數
此靜態代碼塊需要在裝載這個類的時候執行
作爲一個類要執行分爲幾個步驟
步驟:先把這個類裝載到內存當中,裝載到虛擬機裏邊去,裝載完了之後再進行解釋執行
對於靜態代碼塊來說他無需調用,只要這個類裏邊有靜態代碼塊,那麼裝載這個類的時候就會執行這個靜態代碼塊,
靜態代碼塊主要作用就是爲靜態變量name來賦一些初始值
--------------------------
總結static
1、可以定義一個靜態的成員變量 而且他的值只有一份,,,所有的對象使用的靜態成員變量都是同一個。
2、static可以定義靜態函數,靜態函數也是可以用類名進行調用,在靜態函數中不能使用this,即不能在靜態函數中引用非靜態的成員變量。
3、靜態代碼塊的主要作用是爲靜態成員變量賦初始值。