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

面试题(陷阱类)

    博客分类:
  • view
阅读更多
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 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");"这里显示有错。
分享到:
评论

相关推荐

    历史最全面的Java面试题 陷阱 和面试技巧

    面试 陷阱 技巧 历史最全面的Java面试题 陷阱 和面试技巧

    最新各大公司企业真实面试题-Java面试题

    "j.doc"和"Java陷阱一箩筐----面试题集.doc"很可能包含了面试中常见的陷阱问题,比如Java内存模型、垃圾回收机制、并发编程中的同步与锁,以及优化技巧等。这些问题旨在测试求职者在实际开发中解决问题的能力。 ...

    公务员面试公务员面试陷阱类面试题解题诀窍.pdf

    首先,陷阱类面试题的特征主要有三个方面: 1. 引导性题干:这类题目会在题干中设置预设情境,引导考生朝着不利的方向回答。例如,“在什么情况下你会放弃公务员职位?”如果按照题目的逻辑回答,考生很可能陷入...

    java陷阱常见面试题

    本文将深入探讨Java基础陷阱、Java客户端陷阱以及Java服务器陷阱,并提供一些常见的面试题,帮助你更好地理解和应对这些问题。 一、Java基础陷阱 1. 内存管理:Java使用垃圾回收机制管理内存,但过度依赖可能导致...

    java软件工程师面试试题集合、软件工程面试题和面试中的陷阱

    Java软件工程师面试是一个重要的环节...分析面试中的陷阱,例如,过度强调理论而忽视实践经验,或者对技术问题回答得过于模糊,都可能影响面试结果。因此,充分准备,清晰表达,诚实面对自己的不足,是成功面试的关键。

    面试题+答案_面试须知_面试陷阱

    此外,面试题也可能涉及到行业动态、公司文化,甚至是一些开放性问题,如“你如何看待行业未来的发展?”或“你在五年内的职业规划是什么?”提前了解这些面试题,可以帮助你有充分的时间准备,确保在面试中表现出色...

    java陷阱面试题

    该文档讲述了java程序员常见的编程陷阱和一些面试指导

    各大IT公司面试题集合

    │ Java陷阱一箩筐----面试题集[zt].txt │ JAVA面试题.txt │ JAVA面试题集(1) -- 最大的IT资源网.txt │ JAVA面试题集(2) -- 最大的IT资源网.txt │ JAVA面试题集(3) -- 最大的IT资源网.txt │ JAVA...

    BI常见面试题

    BI 常见面试题汇总 BI(Business Intelligence)是企业智能化的核心组件,涉及到数据分析、报表设计、数据仓库、数据挖掘等多个方面。面试BI相关岗位时,需要具备丰富的知识储备和实践经验。以下是BI常见面试题汇总...

    Java陷阱一箩筐——面试题集(附答案)

    Java陷阱一箩筐——面试题集 Java陷阱一箩筐——面试题集 Java陷阱一箩筐——面试题集 Java陷阱一箩筐——面试题集

    LINUX内核经典面试题

    【Linux内核经典面试题详解】 1. Linux内核锁:Linux内核中主要有自旋锁和信号量两种锁机制。自旋锁用于保护短暂的、不会引起阻塞的临界区,而信号量则允许任务在无法获取锁时进入睡眠状态,适合处理可能长时间持有...

    面试c经典试题,各种陷阱

    C语言作为一门基础且广泛使用的编程语言,其面试题通常涵盖了以下几个核心知识点: 1. **基本语法**:包括变量定义、数据类型(如int, char, float, double等)、运算符优先级、流程控制语句(if, switch, for, ...

    c++ 各权威公司面试题

    《C++面试题解析:深度剖析strcpy函数与内存安全》 C++面试中,考察面试者的技术水平往往从基础开始,而基础中的基础莫过于对字符串处理的理解,特别是经典的strcpy函数。本文将通过分析一系列面试题,揭示其中的...

    C和C++面试题(IT面试必备)

    这份压缩包文件“C&&C++面试题”很可能包含了面试者在准备C和C++职位面试时所需要面对的各种问题和挑战。 首先,我们来看看C语言部分。C语言是许多现代编程语言的基础,它强调过程化编程,以简洁和效率著称。面试中...

    c/C++面试题大全--96页

    【C/C++面试题大全--96页】这篇文章主要探讨了C/C++编程语言中面试时常见的技术问题,特别是关于字符串处理和内存管理的题目。文章的目的是通过深入解析这些问题来提升面试者的技能水平和对基础知识的理解。 首先,...

    微软面试题(很动脑哦!附答案、解析及英文原版)

    本压缩包包含了四份文档,分别是“英文原版(101道面试题).doc”、“部分题的具体分析.doc”、“面试题答案.doc”以及“微软的面试题.doc”,旨在帮助求职者了解微软的面试风格并提升准备。 1. **英文原版面试题**...

    JavaScript面试题阿里巴巴JavaScript面试题 阿里巴巴

    ### JavaScript面试题解析 #### 一、ES6的新语法 ES6(ECMAScript 6)是JavaScript语言标准的一个重要版本,它引入了许多新的特性和语法改进,旨在提高开发效率和代码可读性。以下是一些重要的新特性: 1. **let ...

    C语言面试的陷阱题

    C语言面试中常常会出现一些陷阱题,这些题目旨在测试面试者对C语言基础知识的理解和掌握程度。以下是对一些常见陷阱题目的详细解析: 1. **关于C语言中的函数:** - C语言允许函数的嵌套调用,即在一个函数内部...

    c-c++常见面试题总结

    在C和C++的世界里,面试题通常涵盖了广泛的主题,从基本语法到高级设计原则,再到内存管理和模板元编程。以下是一些常见的C++面试题及其解析,它们可以帮助你为面试做好充分准备。 1. **指针与引用** - 指针是C++...

    iOS一些常见面试题word

    在iOS开发领域,面试题是评估候选人技能的关键工具。这些题目通常涵盖Objective-C或Swift语言的基础,UIKit框架的使用,内存管理,多线程,网络编程,数据持久化,设计模式等多个方面。以下是一些iOS面试中常见的...

Global site tag (gtag.js) - Google Analytics