JAVA面向對象易錯習題詳解

  1. 給定如下java代碼,編譯時會在哪行( )出現錯誤。
    class Demo1{ }
    class Demo2 extends Demo1{
    public static void main(String args[]){
    Demo1 d1=new Demo2 () ;//第一行
    Demo2 demo2=new Demo2 () ;//第二行
    Demo1 d2=new Demo1() ;//第三行
    Demo2 demo3=new Demo1() ;//第四行
    }
    }
    解:需要強轉 Demo2 demo3=(Demo2 ) new Demo1(); 當子類引用指向父類實例需要強轉

2.給定Java代碼,運行編譯後,輸出結果是()
class Parent{
public void count() {
System.out.println(10%3) ;
}
}
public class Test extends Parent{
public void count() {
System.out.println(10/3) ;
}
public static void main(String args[]) {
Parent p = new Test() ;
p.count() ;
}
}
解答:更上題一樣,考的是多態的轉型,父類引用指向子類實例,向上轉型,那麼p所調用的方法是子類重寫的方法,如果p調用的是成員變量,則是父類的成員變量

3.打印結果爲:
public class Test{
public static void main (String args[]){
int []num = {1,2,3}
for(int i = 0;i<3;i++){
System.out.print(num[i]);
}
System.out.print(num[i]); //i爲局部變量
}
}
解答:此題很容易錯誤,認爲num[i]=0,i爲局部變量,編譯會報錯

4.編譯結果爲:
public class Example{
  String str=new String(“good”);
  char[]ch={‘a’,’b’,’c’};
  public static void main(String args[]){
    Example ex=new Example();
    ex.change(ex.str,ex.ch);
    System.out.print(ex.str+” and “);
    System.out.print(ex.ch);
  }   
public void change(String str,char ch[]){
    str=”test ok”;
    ch[0]=’g’;
  }
}
解答:記住 String對象是不可變的,每個修改String值的方法都是創建了新的String對象(包括修改後的字符串內容)

5.正確的代碼爲:
public class Test{
private float f = 1.0f;
int m = 12;
static int n = 1;
public static void main(String arg[]){
Test t = new Test();
(1) t.f
(2) this.n
(3)t.m
(4)Text.m
(5)Text.n
}
}
解答:牢記一點,main方法是static修飾的靜態方法,那麼靜態方法只能訪問靜態變量啊!!!! (1)(3)直接報錯 Syntax error, insert “VariableDeclarators” to complete LocalVariableDeclaration 要賦值,打印就行 t.f=1這樣,單調用就像直接寫常數一樣 (2)靜態變量是不能用關鍵字this的

6.基本數據類型定義: 小數是double類型
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章