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");"这里显示有错。
分享到:
相关推荐
Java 代码查错详解 1. 抽象方法的定义: 在 Java 中,抽象方法(abstract method)的定义必须以分号结尾,且不应该有方法体(花括号)。例如,正确的抽象方法定义应为: ```java abstract boolean isStupidName...
本篇文章将详细探讨Java代码查错的一些关键技术和方法,帮助开发者提升代码质量,减少疏漏。 一、编译时错误 编译时错误通常发生在源代码被Java编译器转换为字节码的过程中。这些错误是语法错误,例如: 1. **...
JAVA代码查错 JAVA代码查错
1、 JAVA代码查错 1) abstract class Name { private String name; public abstract boolean isStupidName(String name) {} } 大侠们,这有何错误?
JAVA语言代码查错器,无需安装,直接打开即可使用。 关于代码查错器使用的注意事项: 注意1:代码要考虑大小写,所以窗品右侧必须勾选“区分大小写”按钮 注意2:代码排错时,尽量让需要排错的第一行代码标识性强...
《Java程序员面试宝典 - Java代码查错》这份文档提供了许多常见的Java编程错误,通过解析这些错误,我们可以深入了解Java语言的规范和最佳实践。以下是基于文档内容解析的一些关键知识点: 1. 抽象方法(Abstract ...
1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 2 2、Java有没有goto? 2 3、说说&和&&的区别。 57、介绍Collection框架的结构 2 58、Collection框架中实现比较要实现什么接口 2 59、...
"JAVA代码查错手册"是一部综合性的文档,旨在帮助开发者理解和解决各种Java编程中的常见问题。这份手册可能包含了从基本语法错误到高级运行时异常的各种情况的解决方案。 首先,我们要理解Java的错误类型。Java错误...
本资料“JAVA面试题-代码查错”聚焦于Java代码中的常见错误,通过一系列面试题的形式帮助求职者提升识别和解决代码问题的能力。下面,我们将深入探讨这些知识点。 1. **类型转换错误**:Java是一种强类型语言,当...
【代码查错器.zip】是一个包含了200个Java实例项目的压缩包,旨在提供一个学习和训练的平台,帮助用户提升代码调试和错误排查能力。这个资源包含多种类型的Java源码,涵盖了各种常见编程问题和错误,使得学习者可以...
7. **多语言支持**:为了满足不同编程语言的需求,代码查错器通常支持多种编程语言,包括但不限于Java、Python、C++、JavaScript、C#等。 8. **自定义配置**:用户可以根据自己的开发习惯,自定义查错器的设置,如...
定期收集总结各大公司java面试、笔试题给大家分享。共同进步。
Java 代码审计案例及修复 Java 代码审计是指对 Java 源代码进行安全审查和评估,以发现潜在的安全漏洞和风险。Java 代码审计案例及修复旨在提供一个 Java 代码审计的实践指南,涵盖了 Java 代码审计的基本概念、...
java基于高德地图实现实时查询天气功能源代码。基于高德地图实现实时查询天气功能,api二次开发java基于高德地图实现实时查询天气功能源代码。基于高德地图实现实时查询天气功能,api二次开发java基于高德地图实现...
Java代码自动生成工具是一种高效开发辅助软件,它能够根据预设的模板或规则,自动创建出符合特定规范的Java源代码。这样的工具极大地提升了开发效率,减少了程序员在编写重复性结构化代码上的时间,使他们可以更加...
一个Java的设计,关于学生录取与否,算是一个查询的代码,
例如,`findbugs`工具就是一款用于静态分析Java代码的开源工具,它能在编译时检查代码中的常见错误和潜在问题,帮助开发者提升代码质量。 `findbugs-1.3.9`是FindBugs的一个版本,这个工具通过静态分析,能够在不...
这是本人写的一个基于Java天气预报查询的Java项目,查询的URL为:http://m.weather.com.cn/data/cityId.html/,其中cityId为城市Id,可以在网上查询到。...本人保证代码质量,请放心下载,谢谢支持!