java新手入門會犯的N個“超低階錯誤”
剛開始接觸JAVA的時候,有些在大神或者熟悉java的人來說會犯的低階錯誤,常常影響新手思考很久。
我們會對此感到失望,深深的懷疑是不是自己智商有問題。
這裡,我開始記錄,我自己自學JAVA過程中,遇到的“智障”問題。
1、在JAVA程式設計書中,有個統計每個字母出現次數的經典題。
其中
有個for迴圈是這樣寫的
for(int i = 0; i < chars.length; i ++)
{
chars[i] = RandomCharacter.getRandomLowerCaseLetter();
return chars;f
}
有些剛開始接觸的朋友可能一下就被整個程式中從未出現的RandomCharacter.getRandomLowerCaseLetter(),給整蒙了,
然後開始懷疑是不是有什麼類沒有import進來,其實這個是之前在上一章出現的自定義方法,自己寫的一個可以隨機獲取的小寫字母的方法。
下面貼出這個RandomCharacter類的原始碼。
public class RandomCharacter {
public static char getRandomCharacter(char ch1,char ch2)
{
//隨機生成一個介於ch1 和 ch2之間的字元。
return (char)(ch1 + Math.random()*(ch2 - ch1 + 1));
}
//生成一個隨機的小寫字母。
public static char getRandomLowerCaseLetter(){
return getRandomCharacter('a','z');
}
//生成一個隨機的大寫字母。
public static char getRandomUpperCaseLetter(){
return getRandomCharacter('A','Z');
}
//生成一個隨機的數字。
public static char getRandomDigitCharacter(){
return getRandomCharacter('0','9');
}
//生成一個隨機的字元。
public static char getRandomCharacter(){
return getRandomCharacter('\u0000','\uFFFF');
}
public static void main(String[] args)
{
char ch = RandomCharacter.getRandomCharacter();
System.out.println(ch);
}
}
2、for(int i = 0; i <chars.length;i++ )
{
counts[ chars[i] - 'a']++; //這句在統計 每個字母出現次數的程式中,很經典,其中counts[ ]是一個26大小的陣列,counts[0]存字母‘a’出現的次數,counts[1]存 //儲‘b’出現的次數。。。。以此類推。比如這裡chars[i] = 'c',則counts[2]++(說明字母C出現的次數又增多了一次。)
}
3、在靜態的方法中可以呼叫非靜態的變數嗎?
答案是不可以,
因為靜態方法直接可以不經過例項化就可以使用。但是非靜態方法必須藉助一個例項才能使用。靜態方法中用非靜態變數,那麼這變數“沒有例項化”就不能被直接使用的。矛盾。如圖
4、如何this.i = i,這句程式碼,this是本類中隱藏的一個物件,this.i,這裡的i指的是本類中之前定義好的i,而等號後面的i,一般指的是方法中的引數,後定義的。
5、在java的main函式中,是不能直接定義方法的,如下圖是1,不可以的,圖2是可以的
6、關於靜態變數和方法變數,如下程式請看
public class wan{static int k = 3;
public static void main(String[] args){
int k = 4;
wan x1 = new wan();
wan x2 = new wan();
x1.k++;
x2.k++;
k++;
System.out.println(x1.k);
}
}
這個時候輸出的結果是 5;
因為靜態變數屬於類,不屬於物件,物件的每次呼叫都會作用於類中的變數,所以X2.k變化的時候,也影響到了x1.k的值。而最後面那個k++.是操作的方法變數,不會影響靜態變數。