19. 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());
}
20. 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();
}
21. 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 interfac
e,Rollable interface 里的 ball 是 public static final 的,final 的 object 是不能被改变 reference 的。因此编
译 器 将 在 "ball = new Ball("Football");" 这 里 显 示 有 错 。
JAVA 编 程 题
1.现在输入 n 个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么
排 序 , 结 果 为 , 提 供 reset
import java.util.*;
public class bycomma{
public static String[] splitStringByComma(String source){
if(source==null||source.trim().equals(""))
return null;
StringTokenizer commaToker = new StringTokenizer(source,",");
String[] result = new String[commaToker.countTokens()];
int i=0;
while(commaToker.hasMoreTokens()){
result[i] = commaToker.nextToken();
i++;
}
return result;
}
public static void main(String args[]){
String[] s = splitStringByComma("5,8,7,4,3,9,1");
22. int[] ii = new int[s.length];
for(int i = 0;i<s.length;i++){
ii[i] =Integer.parseInt(s[i]);
}
Arrays.sort(ii);
//asc
for(int i=0;i<s.length;i++){
System.out.println(ii[i]);
}
//desc
for(int i=(s.length-1);i>=0;i--){
System.out.println(ii[i]);
}
}
}
2.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。
package test.format;
import java.text.NumberFormat;
import java.util.HashMap;
public class SimpleMoneyFormat {
public static final String EMPTY = "";
public static final String ZERO = " 零 ";
public static final String ONE = " 壹 ";
public static final String TWO = " 贰 ";
public static final String THREE = " 叁 ";
public static final String FOUR = " 肆 ";
public static final String FIVE = " 伍 ";
public static final String SIX = " 陆 ";
public static final String SEVEN = " 柒 ";
public static final String EIGHT = " 捌 ";
public static final String NINE = " 玖 ";
public static final String TEN = " 拾 ";
public static final String HUNDRED = " 佰 ";
public static final String THOUSAND = " 仟 ";
public static final String TEN_THOUSAND = " 万 ";
public static final String HUNDRED_MILLION = " 亿 ";
public static final String YUAN = " 元 ";
public static final String JIAO = " 角 ";
public static final String FEN = " 分 ";
public static final String DOT = ".";
private static SimpleMoneyFormat formatter = null;
private HashMap chineseNumberMap = new HashMap();
private HashMap chineseMoneyPattern = new HashMap();
private NumberFormat numberFormat = NumberFormat.getInstance();