`
mayuqi827
  • 浏览: 48870 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java程序员面试150(改错题)

    博客分类:
  • JAVA
阅读更多
149、JAVA代码查错

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

abstract class Name {
   private String name;
   public abstract boolean isStupidName(String name) {}
}
  答: abstract method必须以分号结尾,且不带花括号。

  (2) 下面这段代码有错吗?

public class Something {
  void doSomething () {
    private String s = "";
    int l = s.length();
  }
}
  答: 有错。局部变量前不能放置任何访问修饰符 (private,public,和protected)。final可以用来修饰局部变量
(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。

  (3) 下面这段代码有错吗?

abstract class Something {
  private abstract String doSomething ();
}
  答: 错。abstract的methods不能以private修饰。abstract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstract method封锁起来呢? (同理,abstract method前不能加final)。

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

public class Something {
  public int addOne(final int x) {
    return ++x;
  }
}
  
答: 这个错误比较明显。int x被修饰成final,意味着x不能在addOne method中被修改。

  (5) 下面这段代码有错吗?
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;
} 

  答案: 正确。在addOne method中,参数o被修饰成final。如果在addOne method里我们修改了o的reference
(比如: o = new Other();),那么如同上例这题也是错的。但这里修改的是o的member vairable
(成员变量),而o的reference并没有改变。

  (6) 下面这段代码有错吗?

class Something {
  int i;
  public void doSomething() {
    System.out.println("i = " + i);
  }
} 
  
答案: 正确。输出的是"i = 0"。int i属於instant variable (实例变量,或叫成员变量)。instant variable有default value。int的default value是0。

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

class Something {
  final int i; 

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

  (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 ...";
  }
} 
  
答案: 错。看上去在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

class Something {
  private static void main(String[] something_to_do) {        
    System.out.println("Do something ...");
  }
}
  答案: 从没有人说过Java的Class名字必须和其文件名相同。但public class的名字必须和文件名相同,错误,main一定是public的。

  (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.util和java.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");"改变了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();
   }
   }
  }
}
分享到:
评论

相关推荐

    2018年java-程序员面试宝典+题库

    2018java程序员面试宝典+题库,很全。压缩的文档,打开是PDF版

    java程序员面试交流项目经验

    java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流...

    Java程序员面试宝典

    《Java程序员面试宝典》附带1张DVD光盘,内容为《Java程序员面试宝典》所有面试题的多媒体教学视频(共14.5小时)及免费赠送的55小时Java教学视频和5.5小时算法教学视频。授人以鱼,不如授人以渔。《Java程序员面试...

    Java程序员面试笔试真题与解析.tar

    Java程序员面试笔试真题与解析,包含各大IT企业面试笔试的题目

    Java程序员面试宝典与习题

    在Java程序员的面试过程中,掌握核心的编程概念、设计模式、多线程、集合框架、异常处理、IO流、网络编程、数据库操作等是至关重要的。以下是对这些关键知识点的详细解析: 1. **基础语法**:理解并能熟练运用Java...

    Java程序员面试笔试真题与解析

    Java程序员面试笔试真题与解析,高清,绝对高清制作的

    Java程序员面试笔试宝典题库(2018最新版)

    这份资源包含了2018年最新的面试问题和笔试题,旨在帮助求职者全面掌握Java编程语言的核心概念、技术要点以及面试常见问题,以提高他们在竞争激烈的IT行业中脱颖而出的机会。 一、Java基础知识 1. Java语言概述:...

    java中级程序员面试题 java程序员面试题 java工程师面试题

    java中级程序员面试题 java程序员面试题 java工程师面试题

    2021最新Java程序员面试题

    在当前的IT行业中,Java程序员面试已经逐步升级为考察应聘者对多个技术栈的综合理解和应用能力。以下内容根据提供的文件信息整理出的Java程序员面试知识点: 1. MyBatis框架 - MyBatis定义:MyBatis是一个支持定制...

    java程序员面试题

    java程序员面试题java程序员面试题java程序员面试题java程序员面试题java程序员面试题

    java程序员早期面试题汇总.zip

    java程序员早期面试题汇总 BAT经典面试题汇总.pdf Java常考面试题.pdf java面试题(题库全).doc java面试题-外企软件工程师面试题大全.rar 程序员面试题精选100题.pdf ... --------------------------------...

    java程序员面试简历 WORD 模版

    首先,标题"java程序员面试简历 WORD 模版"表明这是一个专门为Java程序员设计的Word文档模板,用于构建面试简历。在制作简历时,你需要关注以下几点: 1. **个人信息**:简历的开头应包含姓名、联系方式(电话、...

    java程序员面试题150例-java常见面试题-java工程师面试题-java面试题大全

    java程序员面试题150例 java常见面试题 java工程师面试题 java面试题大全 带搜索功能,能非常方便的查找到你想要了解的 java面试题目 推荐大家下载。

    Java程序员面试笔试真题库_2017版_迷你书

    本书针对当前各大 IT 企业面试笔试中的特性与侧重点,精心挑选了近 3 年来 18 家顶级 IT 企业的面试笔试真题,这些企业涉及业务包括系统软件、搜索引擎、电子商务、手机 APP 以及安全软件等,非常具有代表性与参考性...

    《Java程序员面试笔试真题与解析》.pdf

    《Java程序员面试笔试真题与解析》

    Java 面试题库,2018-2019年黑马最新版Java程序员面试宝典+题库pdf.zip

    我们培训班刚发的面试题,2018年黑马最新程序员面试宝典+题库,内容包含大量java程序员初级知识点,以及框架的应用,js的基础。需要的赶紧下载准备面试吧. 2019年黑马最新版面试宝典题库 黑马 最新版面试 宝典题库

    Java程序员面试题集(1-50)

    Java 程序员在面试时常常会遇到各种各样的问题,从基础知识到高级概念,全方位地考察候选人的技能和理解。以下是对标题和描述中所提到的一些关键知识点的详细解释: 1. **面向对象的特征**:面向对象编程(OOP)的...

Global site tag (gtag.js) - Google Analytics