现在的位置: 首页 > 综合 > 正文

应聘Java笔试时可能出现问题及其答案 (十五)

2014年01月13日 ⁄ 综合 ⁄ 共 2626字 ⁄ 字号 评论关闭
 8.
public class Something {
      public static void main(String[] args) {
         Something s = new Something();
         System.out.println("s.doSomething() returns " + doSomething());
     }
     public String doSomething() {
         return "Do something ...";
     }
}
看上去很完美。
答案: 错。看上去在maincall doSomething没有什么问题,毕竟两个methods都在同一个class里。但仔细看,mainstatic的。static method不能直接call non-static methods。可改成"System.out.println("s.doSomething() returns " + s.doSomething());"。同理,static method不能访问non-static instant variable
9.
此处,Something类的文件名叫OtherThing.java
class Something {
     private static void main(String[] something_to_do) {        
         System.out.println("Do something ...");
     }
}
这个好像很明显。

答案: 正确。从来没有人说过JavaClass名字必须和其文件名相同。但public class的名字必须和文件名相同。
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 void main(String[] args) {
       new C().pX();
    }
}
答案:错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时import java.utiljava.sql两个包时直接声明Date一样)。对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为 public static final.所以可以通过A.x来明确。
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");
         System.out.println(ball.getName());
     }
}
这个错误不容易发现。
答案: 错。"interface Rollable extends Playable, Bounceable"没有问题。interface可继承多个interfaces,所以这里没错。问题出在interface Rollable里的"Ball ball = new Ball("PingPang");"。任何在interface里声明的interface variable (接口变量,也可称成员变量),默认为public static final。也就是说"Ball ball = new Ball("PingPang");"实际上是"public static final Ball ball = new Ball("PingPang");"。在Ball类的Play()方法中,"ball = new Ball("Football");"改变了ballreference,而这里的ball来自Rollable interfaceRollable interface里的ballpublic static final的,finalobject是不能被改变reference的。因此编译器将在"ball = new Ball("Football");"这里显示有错。
28、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。
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();
}
}
   }
}

抱歉!评论已关闭.