java程序易错点的面试题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35654259/article/details/84546994

分析程序看有没有问题,如果有,说出原因即可
1.
abstract class Name {
   private String name;
   public abstract boolean isStupidName(String name) {}//这边出错了 public abstract boolean isStupidName(String name);
}
     
2.
public class Something {
   void doSomething () {
       private String s = "";//错误 局部变量不能用private修饰 因为局部变量在用完后空间就会自动释放
       int l = s.length();
   }
}
 
3.
abstract class Something {
   private abstract String doSomething ();//错误  private不能与abstract一起使用 因为abstract修饰方法是用来重写但private得权限只在该类有效
}
    
4.
public class Something {
   public int addOne(final int x) {
       return ++x;//错误 final修饰基本类型变量 基本类型变量是常量  final int x = 实参; 之后又进行 ++x 相当于++3;这无法进行
   }
}
    
5.
//正确
/*
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;
}
    
6.
//正确
/*
在加载类的字节码文件时 会自动给类的成员变量附上默认值
*/
class Something {
    int i;
    public void doSomething() {
        System.out.println("i = " + i);//输出i = 0
    }
} 

7.
class Something {
    final int i;//会报错 因为被final修饰的变量只能赋值一次。 解决方法可以在构造代码块中进行初始化 带不能在方法内进行初始化 因为在调用完方法后其值会消失
    public void doSomething() {
        System.out.println("i = " + i);
    }
}
    
8.
public class Something {
     public static void main(String[] args) {
        Something s = new Something();
        System.out.println("s.doSomething() returns " + doSomething());//报错  要么成员方法用static修饰 要么使用对象访问成员方法
    }
     public String doSomething() {
        return "Do something ...";
    }
}
    
9.

class Something {
    private static void main(String[] something_to_do) {  //报错 main是由JVM调用 只能用private修饰 至于something_to_do没问题      
        System.out.println("Do something ...");
    }
}
 
10.
interface  A{
   int x = 0;
}
class B{
   int x =1;
}
class C extends B implements A {
   public void pX(){
      System.out.println(x);//会报错 因为变量名其冲突了 其次大家要知道接口中的成员变量默认修饰符是 public static final
   }
   public static void main(String[] args) {
      new C().pX();
   }
}
     
11.
interface Playable {
    void play();
}
interface Bounceable {
    void play();
}
interface Rollable extends Playable, Bounceable {
    Ball ball = new Ball("PingPang");
}
class Ball implements Rollable {
    private String name;
    public String getName() {
        return name;
    }
    public Ball(String name) {
        this.name = name;        
    }
   public void play() {
        ball = new Ball("Football");//会报错 接口中的成员变量默认修饰符是 public static final而在这边 ball被赋了两次地址值
        System.out.println(ball.getName());
    }
}
 

猜你喜欢

转载自blog.csdn.net/qq_35654259/article/details/84546994