Java面试笔试题及答案汇总终结篇:代码与编程

来源:www.hxw.red  作者:本站整理
摘要:关于java代码与编程的综合应用135、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?答:父类:package test;public class FatherClass public FatherClass() Syste……

(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");"改变了ball的reference,而这里的ball来自Rollable interface,Rollable interface里的ball是public static final的,final的object是不能被改变reference的。因此编译器将在"ball = new Ball("Football");"这里显示有错。

150、设计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();
   }
   }
  }
}

【相关文章】好搜一下
详解Java开发的数据库连接编程(JDBC)技术

详解Java开发的数据库连接编程(JDBC)

本文主要讲述JDBC、JDBC的工作原理,访问数据库的方法、Statement、…