1. 程式人生 > >java新手入門會犯的N個“超低階錯誤”

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++.是操作的方法變數,不會影響靜態變數。