全局變量和局部變量!知道了會特別的簡單但是就怕不知道啊,不知道就特別難了,還好我知道了。嘻嘻!
定義: 局部變量:在程序中只在特定過程或函數中可以訪問的變量。局部變量是相對于全局變量而言的。 全局變量:既可以是某對象函數創建,也可以是在本程序任何地方創建。全局變量是可以被本程序所有對象或函數引用。一個局部變量在被其它對象引用時,會是一個空值。但全局變量卻不會出現這種情況。
解決在敲修改密碼窗體時遇到的全局變量和局部變量問題!
先說明一下:修改密碼,先是把兩個相同的密碼從U層傳給外觀在傳給B層再再再傳最后到數據庫中把原來密碼換成新的密碼。改成功了沒有呢?給個反映的,就把“成功!”的字符串再傳回來,再顯示“成功!”。在傳回來,傳到B層出問題了。一言不合上代碼!
這是修改密碼的B層錯誤代碼:
public class ModifyPW { Factory.Factory factory = new Factory.Factory(); string str1; public string Modify(string xinPW, string quePW) { if (xinPW == quePW) { IDAL.ImodifyDAL modify = factory.modify(); string str1 = modify.modifyPW(quePW); } else { str1 = "兩次密碼不一致!"; } return str1; } }看哪出問題了,仔細看幾個str1字符串變量的區別。 string str1 = modify.modifyPW(quePW); 當單步調試到這,調用D層的函數返回來的“成功”賦值給str1,此時str1是“成功”再走一步return str1;此時的str1是NULL,這是為啥???這兩個str1看是是一個其實一個是局部變量一個事全局變量,第一個str1在if里邊定義的對于這個函數來說是局部的,所以出了if就不能用了,而全局能用。返回的是全局的str1就當然是NULL了。
B層正確的代碼:
public class ModifyPW { Factory.Factory factory = new Factory.Factory(); string str1; public string Modify(string xinPW, string quePW) { if (xinPW == quePW) { IDAL.ImodifyDAL modify = factory.modify(); str1 = modify.modifyPW(quePW); } else { str1 = "兩次密碼不一致!"; } return str1; } }這樣對于這個函數來說都是全局變量了,返回的是“成功”。
變量分為局部與全局,局部變量又可稱之為內部變量。由某對象或某個函數所創建的變量通常都是局部變量,只能被內部引用,而無法被其它對象或函數引用。
新聞熱點
疑難解答