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程序员深入理解并有效...
Java编程语言在面试中常常...了解这些面试陷阱并深入理解它们的工作原理对于Java程序员来说非常重要,可以帮助避免潜在的问题并在面试中展现出扎实的基础知识。在实际开发中,灵活运用这些概念可以提高代码质量和效率。
### Java程序员面试陷阱详解 #### 一、抽象类与抽象方法的理解 **知识点:** - **抽象类(Abstract Class):** 在Java中,抽象类是一种特殊的类,它不能被实例化,即不能创建抽象类的对象。抽象类通常包含一个或...
在Java程序员面试过程中,面试官可能会设置一些陷阱来测试应聘者的知识深度、问题解决能力以及对编程原理的理解。以下是一些常见的面试陷阱及其解析,帮助求职者更好地应对这些问题。 1. **异常处理陷阱**:面试官...
这份48页的PDF文档“Java程序员面试陷阱”旨在揭示这些问题,帮助求职者避免在关键面试时刻掉入这些误区。本文将深入探讨其中的关键知识点。 1. **基础概念陷阱**:面试中,Java的基础知识如类、对象、封装、继承、...
Java程序员在面试和笔试过程中经常会遇到一些看似简单实则暗藏陷阱的问题。这些题目旨在测试开发者对语言规范、面向对象编程原则以及最佳实践的理解。以下是对这些陷阱题的详细解析: 1. `abstract class Name { .....
精心收集了Java程序员的面试的相关资料,包含了Java程序员面试陷阱大全、大公司的Java面试题集、应聘Java笔试时可能出现问题及其答案、java华为面试题......很多很多,数不胜数,收集不容易,记得下载后顶一个。
《程序员面试宝典》一书聚焦于Java程序员的高级面试准备,提炼了32个典型且深入的问题,旨在帮助读者全面掌握Java的核心概念和技术细节,从而在面试中脱颖而出。下面,我们将逐一解析这些题目,深入探讨其中的知识点...
这份名为《JAVA程序员面试集锦(PDF)》的资料包,虽不似《JAVA程序员面试宝典》那般包罗万象,但对于提升程序员的面试技能与知识水平仍旧大有裨益。 首先,单项选择题.pdf的文档包含了大量关于Java语言的基础和进阶...
在Java程序员的面试过程中,经常会遇到一些技术陷阱,这些陷阱可能是面试官用来测试候选人的深入理解、问题解决能力以及对核心概念的掌握程度。以下是一些常见的Java技术陷阱及其解析: 1. **内存管理与垃圾回收** ...
最新Java程序员面试宝典.pdf Java-面试-个人简历范列.doc 主要是这些,本来我是不想赚积分的,可是我上传也不能设置积分,不然我就设置成免费的,个人工作经验俩年,毕业三年。是故找工作需要做一些准备工作,把我锁...
### Java程序员面试须知 在Java编程领域,面试不仅是对技术能力的一次检验,更是对基础知识、编程习惯以及解决问题思路的全面考察。以下是从“Java程序员面试须知”标题、描述及部分内容中提炼的关键知识点,旨在...
《JAVA程序员面试宝典 第4版》是Java开发者在求职面试过程中不可或缺的参考资料,由欧立奇编写。这本书全面覆盖了Java编程语言的核心概念、框架、设计模式以及面试中常见的问题,旨在帮助读者提升技术水平,顺利通过...
《Java程序员面试宝典2011最新出炉》是一份针对Java软件工程师的笔试与面试指南,涵盖了广泛的Java基础知识和面试常考问题。以下是对该资料中提及的一些关键知识点的详细解析: ### Java基础部分 #### 1\. 多个类...
Java程序员在面试中可能会遇到各种技术陷阱,这些陷阱涵盖了语言特性和常见的编程概念。以下是针对提供的部分内容进行的详细解析: 1. **final, finally, finalize的区别** - `final` 关键字用于声明不可变的类、...
在IT职场中,Java程序员面试是一项充满挑战的过程,面试官会设计各种问题来评估候选人的技术实力、逻辑思维以及问题解决能力。这篇文章将探讨Java面试中的一些常见陷阱,帮助求职者更好地准备面试。 首先,面试官...
Java编程语言在面试中常常涉及众多技术...以上就是Java面试中常见的技术陷阱和解析,理解并掌握这些概念对于成为一名合格的Java程序员至关重要。在面试中,能够深入解释这些知识点将展示出扎实的理论基础和技术实力。
Java程序员面试失败的原因通常涉及到多个方面,包括沟通技巧、技术知识掌握程度、代码编写能力、问题解决策略以及面试礼仪和态度。以下是对这些关键点的详细解析: 1. **沟通不足**:在面试中,面试官希望听到的是...