分析Java新手常犯的幾種錯誤
我們都知道,學習編程沒有什么捷徑可以走,在不斷的學習和編碼的過程中,逐漸的積累經驗,從開始的模仿者變成***的創作者。和學習其它的編程語言一樣,Java新手在開始編碼的時候也會出現很多很多的錯誤,而且有的錯誤可能也是不斷的出現。當出現這些錯誤的時候,我們就要仔細的看看錯誤提示,找出問題所在,避免以后不再發生同樣的錯誤。在這個過程當中我們的經驗和水平也在不斷的提升。
Java錯誤,主要包括兩方面,一種是語法錯誤,另一種是邏輯錯誤。
語法錯誤,也就是我們的編碼不符合java 規范,在編譯的時候無法通過。通常,我們都是用javac編譯我們的源程序,如果代碼中存在語法錯誤,比如某個表達式后缺少分號的時候,編譯器就會告訴我們錯誤信息,編譯就此停止。
邏輯錯誤,也就是我們常說的Bug,一般存在邏輯錯誤的程序都是可以順利的被編譯器編譯產生相應的字節碼文件,也就是class文件。但是,在執行的時候,也就是java ourClass的時候,得出的結果并不是我們所希望的。
下面幾個問題都是非常常見的錯誤,在一些新手的代碼里面經常會出現的。
1、 Java是分大小寫的
對于經常寫VB、Asp程序的人來說,一定要注意,變量money和Money是不一樣的。
2、一個java源文件可以包含多個class,但是只能包含一個public 的class。
java是面向對象的程序語言,編譯完的字節碼也是一個一個的類,就是class。一個.java文件可以包含多個class,在編譯的時候,編譯器會為每一個class生成相應的class文件。 但是必須要注意,一個.java文件只能包含一個public class,而且這個public class的類名要與這個.java的文件名一致。
比如,正確的寫法應該是下面這樣的:
一個java源文件,文件名為 Test.java,內容如下:
- class A
- {
- }
- class B
- {
- }
- public class Test
- {
- }
3、運行java程序時加了.class
運行java程序時,是不需要i加擴展名.class的,比如
c:\javac A.java
c:\java A 而不應該是java A.class
這是因為java默認就是找后綴是class的文件,如果你加了.class,也就是java A.class的話,就會出現 錯誤:
Exception in thread HelloWorld/class "main" java.lang.NoClassDefFoundError
意思就是找不到這個類,因為java會把A.class當成一個包的寫法,就是去A目錄下找class這個類,自然找不到,所以就出錯,錯誤信息和你classpath設置不正確的提示信息是一樣的。
4、一個等號和兩個等號的不同
在Java程序中,一個等號是賦值操作符,而兩個等號則是比較操作符。在 java新手的程序中
經常出現這樣的代碼:
- int a=1;
- int b=2;
- if(a=b) System.out.println("OK");
這樣是不對的,因為if后面需要得到的是一個布爾類型的值,這樣編譯就會出錯。
因為,a=b,是賦值操作,就是把 b的值賦給了a,返回等號右邊的值,也就是b的值,比如:
- int a=1;
- int b=2;
- int c=(a=b);
- System.out.println("a : "+a);
- System.out.println("b: "+b);
- System.out.println("c: "+c);
輸出結果則是,a等于2,b等于2,c也等于2, 明白了嗎?
所以,看看下面這兩段代碼,如果你明白了,也就說明你已經懂得了一個等號和兩個等號的意思了:
- boolean a=false;
- boolean b=false;
- if(a==b)
- {
- System.out.println("a=b");
- }
- else
- {
- System.out.println("a!=b");
- }
結果輸出“a=b”,如果換成一個等號
- boolean a=false;
- boolea b=false;
- if(a=b)
- {
- System.out.println("a=b");
- }
- else
- {
- System.out.println("a!=b");
- }
則輸出結果為“a!=b”
5、java中的數組下標是從0開始的
比如我們定義了一個數組
Object[] myArray=new Object[10],說明數組中有10個元素,是從myArray[0]開始,到myArray[9]結束的在用for循環的時候,需要注意,正確寫法如下:
- for(int i=0;i<myArray.length;i++)
- {
- }
6、空引用的錯誤
這類錯誤也是最令人頭疼的,屬于邏輯性錯誤,編譯器可以正常編譯,但是在某種情況下執行出錯,出錯信息是 java.lang.NullPointerException 。
這是由于在對象的引用沒有被初始化的情況下而調用這個對象的屬性或者方法而造成的,比如下面的例子:
- class A3
- {
- public static void main(String[] args)
- {
- String s=null;
- int a=1;
- int b=2;
- if(a<b)
- {
- s="a<b";
- }
- System.out.println(s.toString());
- }
- }
編譯和執行都沒有錯誤,可是如果把a的值賦為10,如下:
- class A3
- {
- public static void main(String[] args)
- {
- String s=null;
- int a=10;
- int b=2;
- if(a<b)
- {
- s="a<b";
- }
- System.out.println(s.toString());
- }
- }
那么就可以正常編譯通過,但是執行的時候則出錯。就是因為現在a<b不成立,也就是說沒有執行s="a<b"這個初始化語句,所以在輸出s.toString()的時候,對象s其實還是null,沒有被初始化,這時候調用.toString()方法自然會出現異常。
以上就簡單寫幾個java新手經常會出現的錯誤,其實出現錯誤并不可怕,只要大家仔細的分析一下出現的錯誤,看看究竟是什么原因導致的,如何避免。這樣,就會很快的提高自己的水平,加入到高手的行列中。由于自己也是菜鳥水平,所以寫的東西,難免出現這樣那樣的錯誤,希望大家多提意見。