靜態(tài)代碼塊:只要一用到某個類,那么這個類的靜態(tài)代碼塊就先執(zhí)行,比如:
創(chuàng)新互聯(lián)建站擁有網(wǎng)站維護技術(shù)和項目管理團隊,建立的售前、實施和售后服務(wù)體系,為客戶提供定制化的成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、網(wǎng)站維護、雅安機房托管解決方案。為客戶網(wǎng)站安全和日常運維提供整體管家式外包優(yōu)質(zhì)服務(wù)。我們的網(wǎng)站維護服務(wù)覆蓋集團企業(yè)、上市公司、外企網(wǎng)站、商城建設(shè)、政府網(wǎng)站等各類型客戶群體,為全球1000多家企業(yè)提供全方位網(wǎng)站維護、服務(wù)器維護解決方案。
public?class?Dog(){
int?i?=?0;
static?{
i?=?1;?
}??
public?Dog(){
i?=?2;?
}????
}
當你new?一個Dog()對象時,首先i= 1?會執(zhí)行,然后才執(zhí)行 public?Dog(){}這個方法。
pulic Dog()?是與類同名、沒有返回值的方法,也就是構(gòu)造方法。
構(gòu)造方法的作用是用來初始化一個對象的。比如你可以在里面寫 i = 2;
那么當你?Dog d = new Dog()執(zhí)行這段代碼的時候,是這樣的:
首先 i = 0 ;
然后執(zhí)行static?靜態(tài)代碼塊,此時i= 1;
最后執(zhí)行public Dog();? i = 2;
方法/步驟
什么是if 選擇結(jié)構(gòu)呢?
if選擇結(jié)構(gòu)是根據(jù)條件判斷之后再做處理的一種語法結(jié)構(gòu),語法結(jié)構(gòu)如下:
if(條件) {
代碼塊 //條件成立后要執(zhí)行的代碼,可是一條語句,也可以是一組語句
}
public class Demo {
public static void main( String [] main) {
//語句1
//語句2
if ( 條件) {
//語句3
}
//語句4
}
}
如何使用if選擇結(jié)構(gòu):
1.基本的if選擇結(jié)構(gòu);舉例::
這里輸入張浩的成績后,通過判斷得知是否大于98分,若大于98,則會輸出“老實說:不錯,獎勵一個Mp3”,否則,不會輸出這句話,通過這個簡單的例子可以體會到,if選擇結(jié)構(gòu)先判斷后執(zhí)行!
復(fù)雜的if選擇結(jié)構(gòu):
如下
怎么連接問題中的條件,
張浩java成績98分 并且張浩音樂成績80分
張浩java成績==100分 并且 張浩音樂成績70分
提出條件,是否可以如下的編寫:
score198score280||score1==100score270
( score198score280(||(score1==100score270)
其中score表示張浩的java成績score表示張浩的音樂成績
顯然第二種方法更是可以清楚的描述張浩的成績!
使用if-else結(jié)構(gòu): 如果張浩java成績大于98分,那么老實獎勵他一個Mp4,如果張浩的成績小于呢! 那么老師就要責罰他嘍!
實現(xiàn)如下代碼功能:提現(xiàn)if-else結(jié)構(gòu):
多重if選擇結(jié)構(gòu):
多重if選擇結(jié)構(gòu)不是多個基本的if選擇結(jié)構(gòu)簡單的排列在一起,它的形式具體如下:
if(條件1){
代碼塊1
}else if(條件2){
代碼塊2
}else{
代碼塊3
}
多重if程序如何執(zhí)行呢!首先,程序判斷條件1,如果成立,則執(zhí)行代碼塊1,然后直接跳出這個多重if選擇結(jié)構(gòu),執(zhí)行它后面的代碼。這種情況下,代碼塊2和代碼塊3都不會被執(zhí)行,如果條件1不成立,則判斷條件2,如果條件2不成立就直接執(zhí)行條件3!
一下運行結(jié)果提現(xiàn) 多重if循環(huán)的判斷過程:
int score = 70; //考試成績
if (score = 80 ) {
System.out.println("良好");
} else if (score = 60 ) {
System.out.println("中等");
} else {
System.out.println("差");
嵌套if選擇結(jié)構(gòu):
嵌套if選擇結(jié)構(gòu)就是在if選擇結(jié)構(gòu)里面在嵌人if選擇結(jié)構(gòu):
if(條件1){
if(條件2){
代碼塊1
}else{
代碼塊2
}
}else{
代碼塊3
}
實現(xiàn)嵌套if選擇結(jié)構(gòu)運行代碼程序:
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("請輸入比賽成績:");
double score= input.nextDouble();
System.out.print("請輸入性別:");
String gender = input.next();
if(score=10){
if(gender.equals("男")){
System.out.print("進入男子組決賽組!");
}else if(gender.equals("女")){
System.out.print("進入女子決賽組!");
}
}else{
System.out.print("淘汰!");
}
}
}
在Java語言中,static表示“全局”或者“靜態(tài)”的意思,用來修飾成員變量和成員方法,也可以形成靜態(tài)static代碼塊,但是Java語言中沒有全局變量的概念。
被static修飾的成員變量和成員方法獨立于該類的任何對象。也就是說,它不依賴類特定的實例,被類的所有實例共享。只要這個類被加載,Java虛擬機就能根據(jù)類名在運行時數(shù)據(jù)區(qū)的方法區(qū)內(nèi)定找到他們。因此,static對象可以在它的任何對象創(chuàng)建之前訪問,無需引用任何對象。
用public修飾的static成員變量和成員方法本質(zhì)是全局變量和全局方法,當聲明它類的對象時,不生成static變量的副本,而是類的所有實例共享同一個static變量。
static變量前可以有private修飾,表示這個變量可以在類的靜態(tài)代碼塊中,或者類的其他靜態(tài)成員方法中使用(當然也可以在非靜態(tài)成員方法中使用),但是不能在其他類中通過類名來直接引用,這一點很重要。實際上你需要搞明白,private是訪問權(quán)限限定,static表示不要實例化就可以使用,這樣就容易理解多了。static前面加上其它訪問權(quán)限關(guān)鍵字的效果也以此類推。
static修飾的成員變量和成員方法習慣上稱為靜態(tài)變量和靜態(tài)方法,可以直接通過類名來訪問,訪問語法為:
類名.靜態(tài)方法名(參數(shù)列表...)
類名.靜態(tài)變量名
用static修飾的代碼塊表示靜態(tài)代碼塊,當Java虛擬機(JVM)加載類時,就會執(zhí)行該代碼塊(用處非常大)。
static在Java語言中的使用有四種:(變量、方法、代碼塊、內(nèi)部類)
1、static變量
按照是否靜態(tài)的對類成員變量進行分類可分兩種:一種是被static修飾的變量,叫靜態(tài)變量或類
變量;另一種是沒有被static修飾的變量,叫實例變量。
兩者的區(qū)別是:
對于靜態(tài)變量在內(nèi)存中只有一個拷貝(節(jié)省內(nèi)存),JVM只為靜態(tài)分配一次內(nèi)存,在加載類的過
程中完成靜態(tài)變量的內(nèi)存分配,可用類名直接訪問(方便),當然也可以通過對象來訪問(但是這是不推薦的)。
對于實例變量,沒創(chuàng)建一個實例,就會為實例變量分配一次內(nèi)存,實例變量可以在內(nèi)存中有多個拷貝,互不影響(靈活)。
2、靜態(tài)方法
靜態(tài)方法可以直接通過類名調(diào)用,任何的實例也都可以調(diào)用,因此靜態(tài)方法中不能用this和super關(guān)鍵字,不能直接訪問所屬類的實例變量和實例方法(就是不帶static的成員變量和成員成員方法),只能訪問所屬類的靜態(tài)成員變量和成員方法。因為實例成員與特定的對象關(guān)聯(lián)!這個需要去理解,想明白其中的道理,不是記憶?。?!
因為static方法獨立于任何實例,因此static方法必須被實現(xiàn),而不能是抽象的abstract。
3、static代碼塊
static代碼塊也叫靜態(tài)代碼塊,是在類中獨立于類成員的static語句塊,可以有多個,位置可以隨便放,它不在任何的方法體內(nèi),JVM加載類時會執(zhí)行這些靜態(tài)的代碼塊,如果static代碼塊有多個,JVM將按照它們在類中出現(xiàn)的先后順序依次執(zhí)行它們,每個代碼塊只會被執(zhí)行一次。
順序執(zhí)行,就是正常情況下
選擇執(zhí)行(分支),就是用if else...可以使用多次,還有個switch? case
循環(huán)執(zhí)行,常用的用for循環(huán),while循環(huán),do while循環(huán)
就我理解題意好像就這三種
1. 局部代碼塊
作用在方法當中,作用是控制變量的生命周期:
public void show(){
{
System.out.println("局部代碼塊運行!");
}
}123456
在程序中當我們定義完成一個局部變量x之后,并且在接下來的代碼中,不想再用到它時,那么就沒必要讓x在內(nèi)存中繼續(xù)占用空間。因此就有了局部代碼塊。
2. 構(gòu)造代碼塊
作用在類的定義Body中,作用是給類的部分字段統(tǒng)一初始化:
public class Apple {
private String size;
//構(gòu)造代碼塊
{
System.out.println("構(gòu)造代碼塊運行!");
size = "E";
}
}
12345678910
構(gòu)造代碼塊與構(gòu)造函數(shù)的區(qū)別是:構(gòu)造代碼塊是給所有對象進行統(tǒng)一初始化,而構(gòu)造函數(shù)是給對應(yīng)的對象初始化,因為構(gòu)造函數(shù)是可以多個的,運行哪個構(gòu)造函數(shù)就會建立什么樣的對象,但無論建立哪個對象,都會先執(zhí)行相同的構(gòu)造代碼塊。也就是說,構(gòu)造代碼塊中定義的是不同對象共性的初始化內(nèi)容。所以理所當然的,構(gòu)造代碼塊在構(gòu)造函數(shù)之前執(zhí)行。
3. 靜態(tài)代碼塊
作用有兩個:
(1)給類的靜態(tài)變量賦值;
(2)聲明靜態(tài)變量;
作用在類的Body中,對類中的靜態(tài)變量初始化:
public class APP {
static int x, y; // 靜態(tài)變量
static {
x = 5; // 給靜態(tài)變量x賦值
}
public static void myMethod() {
y = x++ + ++x; // x++ 先使用x的值再加1;++x先加1再使用x的值
}
public static void main(String[] args) {
x--;
myMethod();
System.out.println(x + y + ++x);
}
}
輸出:23
靜態(tài)初始化塊:當類第一次加載時執(zhí)行。
非靜態(tài)初始化塊:非靜態(tài)初始化塊會在構(gòu)造函數(shù)執(zhí)行時,且在構(gòu)造函數(shù)主體代碼執(zhí)行之前被執(zhí)行。
區(qū)別如下:
1、執(zhí)行次數(shù)不同
靜態(tài)塊只執(zhí)行一次,初始化塊可以執(zhí)行多次。
2、作用不同
靜態(tài)初始化塊僅能初始化類變量,即static修飾的數(shù)據(jù)成員。
非靜態(tài)初始化塊可以初始化類的實例變量。
擴展資料:
使用Java靜態(tài)代碼塊注意事項:
1、它是隨著類的加載而執(zhí)行,只執(zhí)行一次,并優(yōu)先于主函數(shù)。具體說,靜態(tài)代碼塊是由類調(diào)用的。類調(diào)用時,先執(zhí)行靜態(tài)代碼塊,然后才執(zhí)行主函數(shù)的。
2、靜態(tài)代碼塊其實就是給類初始化的,而構(gòu)造代碼塊是給對象初始化的。
3、靜態(tài)代碼塊中的變量是局部變量,與普通函數(shù)中的局部變量性質(zhì)沒有區(qū)別。
4、一個類中可以有多個靜態(tài)代碼塊。
5、對于靜態(tài)變量、靜態(tài)初始化塊、變量、初始化塊、構(gòu)造器,它們的初始化順序依次是(靜態(tài)變量、靜態(tài)初始化塊)(變量、初始化塊)構(gòu)造器。