JAVA面向对象易错习题详解

来源:互联网 发布:淘宝店运营商靠谱吗 编辑:程序博客网 时间:2024/05/17 22:49
  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类型
这里写图片描述

原创粉丝点击