读书人

java软件工程师面试150(改错题)

发布时间: 2012-12-23 11:28:15 作者: rapoo

java程序员面试150(改错题)
149、JAVA代码查错

  (1) 下面这段代码有什么错误?

   
答案: 正确。输出的是"i = 0"。int i属於instant variable (实例变量,或叫成员变量)。instant variable有default value。int的default value是0。

  (7) 和上面一题只有一个地方不同,就是多了一个final。下面这段代码有错吗?

  
答案: 错。final int i是个final的instant variable (实例变量,或叫成员变量)。final的instant variable没有default value,必须在constructor (构造器)结束之前被赋予一个明确的值。可以修改为"final int i = 0;"。

  (8) 下面这段代码看上去很完美,错在哪里呢?

  
答案: 错。看上去在main里call doSomething没有什么问题,毕竟两个methods都在同一个class里。但仔细看,main是static的。static method不能直接call non-static methods。可改成"System.out.println("s.doSomething() returns " + s.doSomething());"。同理,static method不能访问non-static instant variable。

  (9) 此处Something类的文件名叫OtherThing.java

public class ThreadTest1{  private int j;   public static void main(String args[]){  ThreadTest1 tt=new ThreadTest1();  Inc inc=tt.new Inc();  Dec dec=tt.new Dec();  for(int i=0;i<2;i++){   Thread t=new Thread(inc);   t.start();   t=new Thread(dec);   t.start();  } }  private synchronized void inc(){  j++;  System.out.println(Thread.currentThread().getName()+"-inc:"+j); }  private synchronized void dec(){  j--;  System.out.println(Thread.currentThread().getName()+"-dec:"+j); }  class Inc implements Runnable{  public void run(){   for(int i=0;i<100;i++){    inc();   }  }  }   class Dec implements Runnable{  public void run(){   for(int i=0;i<100;i++){    dec();   }   }  }}

读书人网 >编程

热点推荐