2013年8月19日、靜態代碼|static的特點|static的應用|靜態變量

/*


靜態代碼塊。
隨着類的加載而執行。而且只執行一次。


作用:
用於給類進行初始化。






*/
class StaticCode
{
static int num ;
static 
{
num = 10;
// num *=3;
System.out.println("hahahah");
}
StaticCode(){}


static void show()
{
System.out.println(num);
}
}


class Person
{
private String name;




{//構造代碼塊。可以給所有對象進行初始化的。


System.out.println("constructor code ");
// cry();
}

static 
{
System.out.println("static code");
}

Person()//是給對應的對象進行針對性的初始化。 
{
name = "baby";
// cry();
}
Person(String name)
{
this.name  = name;
// cry();
}
public void cry()
{
System.out.println("哇哇");

}


public void speak()
{
System.out.println("name:"+name);
}


static void show()
{
System.out.println("show run");
}
}




class StaticCodeDemo 
{
static
{
// System.out.println("a");
}
public static void main(String[] args) 
{


// Person p = null;
// p.speak();


// Person.show();
// Person p1 = new Person();
// p1.speak();
// Person p2 = new Person("旺財");
// p2.speak();
// new Person();



// new StaticCode().show();
// new StaticCode().show();
// StaticCode.show();
// System.out.println("b");
}

}

——————————————————————————————————————————————————



class Person
{
String name;//成員變量,實例變量
static String country = "CN";//靜態變量。類變量 
public  void show()
{
System.out.println(Person.country+":"+this.name);
}
}




/*
static的特點:
1,static是一個修飾符,用於修飾成員。
2,static修飾的成員被所有的對象所共享。
3,static優先於對象存在,因爲static的成員隨着類的加載就已經存在了。 
4,static修飾的成員多了一種調用方式,就可以直接被類名所調用 。 類名.靜態成員 。
5,static修飾的數據是共享數據,對象中的存儲的是特有數據。


成員變量和靜態變量的區別?
1,兩個變量的生命週期不同。
成員變量隨着對象的創建而存在,隨着對象的被回收而釋放。
靜態變量隨着類的加載而存在,隨着類的消失而消失。


2,調用方式不同。
成員變量只能被對象調用。
靜態變量可以被對象調用,還可以被類名調用。


3,別名不同。
成員變量也稱爲實例變量。
靜態變量稱爲類變量。 


4,數據存儲位置不同。
成員變量數據存儲在堆內存的對象中,所以也叫對象的特有數據.
靜態變量數據存儲在方法區(共享數據區)的靜態區,所以也叫對象的共享數據.






靜態使用的注意事項:
1,靜態方法只能訪問靜態成員。(非靜態既可以訪問靜態,又可以訪問非靜態)
2,靜態方法中不可以使用this或者super關鍵字。
3,主函數是靜態的。










*/


class StaticDemo 
{
int num = 4;
public static void main(String[] args) 
{
// Person  p = new Person();
// p.name = "小強";
// p.show();
// System.out.println(p.country);
// System.out.println(Person.country);
// Person.show();
new StaticDemo().show();
}


public void show()
{
System.out.println(num);
}
}

——————————————————————————————————————



class Person
{
private String name;
private int age;
static String country = "CN";
public Person(String name,int age)
{
this.name = name;
this.age = age;
}

public void show()
{
System.out.println(Person.country+":"+this.name+":"+this.age);
}


public static void method()
{
System.out.println(Person.country);
}
}


class StaticDemo2 
{
public static void main(String[] args) throws Exception
{
Thread.sleep(5000);
Person.method();


Person p = new Person("java",20);
p.show();
}
}

——————————————————————————-

/*
靜態什麼時候用?
1,靜態變量。
當分析對象中所具備的成員變量的值都是相同的 。
這時這個成員就可以被靜態修飾。
只要數據在對象中都是不同的,就是對象的特有數據,必須存儲在對象中,是非靜態的。
如果是相同的數據,對象不需要做修改,只需要使用即可,不需要存儲在對象中,定義成靜態的。


2,靜態函數。
函數是否用靜態修飾,就參考一點,就是該函數功能是否有訪問到對象中的特有數據。
簡單點說,從源代碼看,該功能是否需要訪問非靜態的成員變量,如果需要,該功能就是非靜態的。
如果不需要,就可以將該功能定義成靜態的。當然,也可以定義成非靜態,
但是非靜態需要被對象調用,而僅創建對象調用非靜態的
沒有訪問特有數據的方法,該對象的創建是沒有意義。


*/


class Demo
{
int age ;
static int num = 9;
Demo(int age)
{
this.age = age;
}


public static  void speak()
{
System.out.println(num);
}
public void show()
{
System.out.println(age);
}


}


class  StaticDemo3
{
public static void main(String[] args) 
{
// Demo d = new Demo(30);
// d.speak();
Demo.speak();


// System.out.println("Hello World!");
}
}

發佈了33 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章