日期:2014-05-20  浏览次数:20716 次

几道小小的题目一起和大家更进一步地了解 Java (Ⅳ)
这是小题目的系列之四

之一:http://topic.csdn.net/u/20070828/10/7aa61fbc-8575-4212-85c4-582c08f81535.html 
之二:http://topic.csdn.net/u/20070917/10/928cdd3b-0ec6-4236-a89d-7c3ddba8eaba.html 
之三:http://topic.csdn.net/u/20080130/17/7fdd8b93-bdd6-467a-863e-fc3c9731bc52.html

做题规则:老规矩,不允许上机操作,全部完成后可以将代码复制自行检测一下,需采用 JDK 5.0 或以上版本

1,诡异的 Set

看看下面的这段程序,输出的是_____。

A. 4
B. 5
C. 6
D. 以上都不是

Java code
import java.net.MalformedURLException; 
import java.net.URL;
import java.util.HashSet;
import java.util.Set;

public class Test1 {
    private static final String[] URL_NAMES = {
            "http://javapuzzlers.com",
            "http://apache2-snort.skybar.dreamhost.com",
            "http://www.google.com",
            "http://javapuzzlers.com",
            "http://findbugs.sourceforge.net",
            "http://www.cs.umd.edu"
        };

    public static void main(String[] args) throws MalformedURLException {
        Set <URL> favorites = new HashSet <URL>();
        for (String urlName : URL_NAMES)
            favorites.add(new URL(urlName));
        System.out.println(favorites.size());
    }
}


=====★===我===是===题===目===间===的===小===分===隔===符===★=====

2,Number 惹的祸

下面是一个三目运算符的小题目,看看程序运行后,在控制台上会输出_____。

A. 3
B. 1.0
C. 抛出异常
D. 以上都不是

Java code
import java.util.Random;

public class Test2 {
    public static void main(String[] args) {
        Random rnd = new Random();
        boolean toBe = rnd.nextBoolean();
        Number result = (toBe || !toBe) ?
                new Integer(3) : new Float(1);
        System.out.println(result);
    }
}


到目前为止,我们就结束带有迷惑性质的题目,包括前三期我们共有 19 道此类性质的题目了。

=====★===我===是===题===目===间===的===小===分===隔===符===★=====

接下来是一些有趣而偏向于实用的题目,需要自行来动手设计,可以看看您对面向对象、Java 语言,以
及 JDK 类库的了解程度。

下面的题目也没有什么统一标准的答案(因为条条大路通罗马呗),请大家各抒己见,结帖前我会贴一些
代码以供参考。

以下题目在没有 JDK 版本要求时,均采用 JDK 5.0。

3,限定参数范围

某个方法有一个参数,这个参数只能接受 1~10 之间的值(含 1 和 10),在此范围之外的参数都被视
为非法。现在需要设计一个方法,在传入非法参数时在编译期报错。

注意:要求在编译期报错,而不是在运行期。JDK 版本限定为 1.4。

=====★===我===是===题===目===间===的===小===分===隔===符===★=====

4,对象复制

现在需要设计一个这样的工具方法,使用这个方法来复制一个对象字段中的值到别外一个对象中去,基本
的方法签名:public static void copyFields(Object src, Object dist); 但是这样的方法不
是很健壮,经不起考验。

我们知道要拷贝对象属性时 src 和 dist 应该具有相同的类型,或者是 dist 是 src 的子类型这样做
才有意义。现在要重新对这个方法进行设计,并能满足上面的要求,在 src 和 dist 不是同一类型时,需
要在编译期报错。

5,懒人的提议

在一般实体类对应的 DAO 中都有 CRUD 操作,也就是最基本的四个增查改删。

以 StudentDao 为例,可能会有以下五个最基本的方法:

Java code
public Student get(Serializable id) {
    return (Student)getHibernateTemplate().load(Student.class, id);
}
public List<Student> getAll() {
    return (List<Student>)getHibernateTemplate().loadAll(Student.class);
}
public void save(Student stu) {
    getHibernateTemplate().saveOrUpdate(stu);
}
public void remove(Student stu) {
    getHibernateTemplate().delete(stu);
}
public void update(Student stu) {
    getHibernateTemplate().update(stu);
}