最近在復習Java的基礎
遇到了一些比較偏的考核題目
特地總結一下需要注意的知識點!不過在使用IDE編程的時候
這些問題都會馬上被IDE識別出來
編譯是通不過的
我在這裡提出來就相當於給初學者一些貢獻吧
一聲明局部變量是的一些特性和規則
()聲明的局部變量是不會被默認初始化的成員變量則是會被默認初始化的例如
復制代碼 代碼如下:
class Demo {
public static void main(String[] args) {
String s;
System
out
println(s);
}
}
上面的這段示例代碼中直接輸出s是錯誤的連編譯都不同通過因為在main方法中聲明s這時s是局部變量不會被默認初始化值因此在下面直接輸出是有錯誤的代碼改寫如下即可
復制代碼 代碼如下:
class Demo {
String s;
public static void main(String[] args) {
System
out
println(s);
}
}
這樣輸出的話就是null了因為s被聲明為成員變量因此默認會被初始化值null
()聲明局部變量的前面不能有任何權限訪問修飾符(publicprotected和private)只能是friendly的默認友好的但是可以使用final來修飾局部變量
二使用final來修飾基本類型局部變量和引用類型局部變量的區別
()final修飾基本類型局部變量的時候不能對其基本類型的數據值進行修改因為final修飾的變量是最終的不能被改變如下代碼
復制代碼 代碼如下:
public class Something {
public int addOne(final int x) {
return ++x;
}
}
這裡addOne方法中使用final int x作為參數下面再對其進行自增是錯誤的
()final修飾引用類型的局部變量的時候也就是對象這時可以修改對象中的屬性信息但是不能修改對象的引用比如下面的代碼
復制代碼 代碼如下:
public class Something {
public static void main(String[] args) {
Other o = new Other();
new Something()
addOne(o);
}
public void addOne(final Other o) {
o
i++;
}
}
class Other {
public int i;
}
這裡addOne方法接收的參數是一個對象而在方法體中自增了對象中的屬性 i 的值而對象的引用地址沒有被修改因此不會發生錯誤而如果在方法體中寫上o = new Other(); 這時就會報錯了
()在類中被final修飾聲明的成員變量不會默認初始化值因此必須在構造器之前就得給定一個具體值例如下面的代碼
復制代碼 代碼如下:
class Something {
final int i;// 這行就已經報錯了
編譯不能通過
沒有初始化值
public void doSomething() {
System
out
println("i = " + i);
}
}
final int i是個final的instant variable (實例變量或叫成員變量)final的instant variable沒有default value必須在constructor (構造器)結束之前被賦予一個明確的值可以修改為"final int i =;"
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19917.html