Java笔试题之《Java代码查错》

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;
}
     和上面的很相似,都是关于final的问题,这有错吗?
    
答案:
正确。在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.class Something
{
    final int i;
    public void doSomething() {
        System.out.println("i = " + i);
    }
}
    
和上面一题只有一个地方不同,就是多了一个final。这难道就错了吗?

答案:
错。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的名字必须和文件名相同。
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");"

时间: 2024-10-11 05:55:57

Java笔试题之《Java代码查错》的相关文章

java笔试题(1)

char型变量中能不能存贮一个中文汉字? char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦.不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字.补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节. "=="和equals方法有什么区别? (1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时

精选30道Java笔试题解答

个人觉得整理的超级好的Java笔试题,原文请见 http://blog.csdn.net/lanxuezaipiao/article/details/16753743 1. 下面哪些是Thread类的方法() A start()       B run()       C exit()       D getPriority() 答案:ABD 解析:看Java API docs吧:http://docs.oracle.com/javase/7/docs/api/,exit()是System类的方

java笔试题(3)

short a = 1; a = a + 1; 有错吗? short a = 1; a += 1; 有错吗? 对于short a = 1; a = a + 1;由于a + 1 运算时会自动提升表达式的类型,所以结果是int型,再复制short类型a时,编译器将报告需要强制装换类型的错误. 对于short a = 1; a += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译. 静态变量和实例变量的区别? 在语法定义上的区别:静态变量前要加stati

Java笔试题1

1. 下面的代码运行后,将输出什么结果? String s1 = new String("Test"); String s2 = new String("Test"); if (s1 == s2) System.out.println("Same"); if (s1.equals(s2)) System.out.println("Equals"); A. Same     Equals  B.Same   C. Equals

java笔试题解析

1.数组乱序 天天搞排序,今天遇到一道乱序的问题居然无从下手,知道random,然后想了很复杂的if条件判断. 其实,只要在数组里面依次拿出一个数,然后产生数组长度范围内的一个数作为下标,然后互换即可! public class RandomNumber { public static void main(String[] args) { int change = 6; int[] sequence = new int[change]; for (int i = 0; i < change; i

java笔试题(4)

abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? abstract的method 不可以是static的,因为抽象的方法是要被子类实现的,而static与子类扯不上关系! abstract的method 不可以是native的,native方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在着被子类实现的问题,所以,它也不能是抽象的,不能与abstract混用.例如,FileOutputSteam类要硬件打交道,底层的

java笔试题(2)

简述构造器的运行机制 首先要注意的是的构造器并不是函数,所以他并不能被继承,这在我们extends的时候写子类的构造器时比较的常见,即使子类构造器参数和父类的完全一样,我们也要写super就是因为这个原因. 构造器的修饰符比较的有限,仅仅只有public private protected这三个,其他的例如任何修饰符都不能对其使用,也就是说构造器不允许被成名成抽象.同步.静态等等访问限制以外的形式. 因为构造器不是函数,所以它是没有返回值的,也不允许有返回值.但是这里要说明一下,构造器中允许存在

Java笔试题之《算法与编程》

算法与编程 1.判断身份证:要么是15位,要么是18位,最后一位可以为字母,并写程序提出其中的年月日. 答:我们可以用正则表达式来定义复杂的字符串格式,(\d{17}[0-9a-zA-Z]|\d{14}[0-9a-zA-Z])可以用来判断是否为合法的15位或18位身份证号码. 因为15位和18位的身份证号码都是从7位到第12位为身份证为日期类型.这样我们可以设计出更精确的正则模式,使身份证号的日期合法,这样我们的正则模式可以进一步将日期部分的正则修改为[12][0-9]{3}[01][0-9][

一道简单的 Java 笔试题,但值得很多人反思

面试别人,对我来说是一件新奇事,以前都是别人面试我.我清楚地知道,我在的地域与公司,难以吸引到中国的一流软件人才.所以,我特地调低了期望,很少问什么深入的技术问题,只问一些广泛的.基础的.我只要最终给Leader一句“这个人技术还行/很好/非常好”,就行了.至于其它能力.综合水平,由别人把关.为此,在挑选唯一的一道笔试题时,我特别地上心. 首先,我不敢用网上那些广为流传的,比如Leetcode.<程序员面试宝典>里的题——这些都太难了!正儿八经做,其实很少有人能在1小时内完美做出来,除非之前遇

java笔试题(1)

转载自:http://blog.csdn.net/fmh2011/article/details/19690999 某互联网公司的java基础笔试题 该公司的不少题来自于java面试宝典 1.char型变量中能不能存贮一个中文汉字?为什么? char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦.不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字.补充说明:u