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可以用来修饰局部变量
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++; wk_ad_begin({pid : 21});
wk_ad_after(21, function(){
$('.ad-hidden').hide();
}, function(){
$('.ad-hidden').show();}); 2
} }
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 ..."; } 3
}
看上去很完美。 答案: 错。看上去在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 { 4
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五道输出易错题解析(避免小错误)

    收集了几个易错的或好玩的Java输出题,分享给大家,以后在编程学习中稍微注意下就OK了. 1. 看不见的空格? 下面的输出会正常吗? package basic; public class Integ ...

  2. Java五道输出易错题解析(进来挑战下)

    转自:http://blog.csdn.net/lanxuezaipiao/article/details/41985243 收集了几个易错的或好玩的Java输出题,分享给大家,以后在编程学习中稍微注 ...

  3. 【笔试题】Java 易错题精选

    笔试题 Java 易错题精选 1.写出下列程序的运行结果( )String 不变性Java 值传递 public class Test { public static void main(String ...

  4. java考试易错题大全

    常见的Java问题 1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Ja ...

  5. 杭电OJ2039——三角形(c++)(易错题:数据类型不确定)

    三角形 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  6. java程序改错题(常见)

    最近跑校招,做了一套java的笔试题. abstract class Name { private String name; public abstract boolean isStupidName( ...

  7. C/C++程序员面试易错题

    c部分::::::::::::::::::::::::::::::::::: . 关键字volatile有什么含意? 并给出三个不同的例 子. [参考答案]一个定义为volatile的变量是说这变量可 ...

  8. java易错题----静态方法的调用

    class A{ public static String s="A.s"; } class B extends A{ public static String s="B ...

  9. Java易错题(1)

    检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果. public class HelloB extends HelloA { public HelloB() { } { Syst ...

随机推荐

  1. 每天一个linux命令---telnet

    执行telnet指令开启终端机阶段作业,并登入远端主机. telnet的命令的格式: telnet  ip port 例1:  建立连接不成功 [richmail@portal bin]$ telne ...

  2. 自定义UICollectionViewLayout之瀑布流

    目标效果 因为系统给我们提供的 UICollectionViewFlowLayout 布局类不能实现瀑布流的效果,如果我们想实现 瀑布流 的效果,需要自定义一个 UICollectionViewLay ...

  3. Start_Learning_Python 03 条件、循环

    if循环 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 条件语句和循环语句可以有 else 子句,它在穷尽列表(以for循环)或条件变为 false ...

  4. js定时相关函数:

    定时相关函数: mytime= setTimeout(vCode, iMilliSeconds [, sLanguage]) -- 单次定时执行指定函数 clearTimeout(iTimeoutID ...

  5. Install the Maven in your computer

    While, this blog will talk about installing the Maven in your computer. There are three steps as fol ...

  6. Nginx_HTTP 499 状态码 nginx下 499错误

    日志记录中HTTP状态码出现499错误有多种情况,我遇到的一种情况是nginx反代到一个永远打不开的后端,就这样了,日志状态记录是499.发送字节数是0. 老是有用户反映网站系统时好时坏,因为线上的产 ...

  7. asp.net 操作Excel大全

    asp.net 操作Excel大全 转:http://www.cnblogs.com/zhangchenliang/archive/2011/07/21/2112430.html 我们在做excel资 ...

  8. Android开发环境的发展演变

    前几年Android的开发环境需要自己一个个把软件下载下来,如Android sdk.eclipse.ADT等,而且有些软件下载安装相当的麻烦,如eclipse,对于一个初学者来说,这是个完全陌生的软 ...

  9. [LintCode] Coins in a Line 一条线上的硬币

    There are n coins in a line. Two players take turns to take one or two coins from right side until t ...

  10. [zt]矩阵求导公式

    今天推导公式,发现居然有对矩阵的求导,狂汗--完全不会.不过还好网上有人总结了.吼吼,赶紧搬过来收藏备份. 基本公式:Y = A * X --> DY/DX = A'Y = X * A --&g ...