Tag: scjp

是id = 1 – idprimefaces?

从OCP Java SE 6程序员实践考试第291页,问题25: public class Stone implements Runnable { static int id = 1; public void run() { id = 1 – id; if (id == 0) pick(); else release(); } private static synchronized void pick() { System.out.print("P "); System.out.print("Q "); } private synchronized void release() { System.out.print("R "); System.out.print("S "); } public static […]

Java中的合法标识符

我正在阅读SCJP,我对这一行有个疑问: 标识符必须以字母,货币字符($)或连接字符(如下划线(_))开头。 标识符不能以数字开头! 它指出一个有效的标识符名称可以以连接字符(如下划线)开头。 我以为下划线是唯一有效的select? 还有什么其他的连接字符 ?

将创build多less个String对象

我有以下Java代码: public String makinStrings() { String s = "Fred"; s = s + "47"; s = s.substring(2, 5); s = s.toUpperCase(); return s.toString(); } 这个问题很简单:调用这个方法时会创build多less个String对象? 在开始的时候,我回答说创build了5个String对象,但是我的书的答案是只有3个对象被创build,没有给出解释(这是一个SCJP问题)。 从我的angular度来看,有5个对象:“弗雷德”,“47”,“弗雷德47”,“ED4”,“ED4”。 我也在一个SCJP模拟考试中发现了这个问题,同样的答案3。

Java无法访问的catch块编译器错误

为什么在Java中我们可以捕获一个Exception即使它没有被抛出,但是我们不能捕获它的子类(除了“unchecked”的RuntimeException和它的子类之外)。 示例代码: class Test { public static void main(String[] args) { try { // do nothing } catch (Exception e) { // OK } try { // do nothing } catch (IOException e) { // COMPILER ERROR: Unreachable catch block for IOException. //This exception is never thrown from the try statement body } } } […]

为什么我不能添加两个字节,并得到一个int,我可以添加两个最后的字节获得一个字节?

public class Java{ public static void main(String[] args){ final byte x = 1; final byte y = 2; byte z = x + y;//ok System.out.println(z); byte a = 1; byte b = 2; byte c = a + b; //Compiler error System.out.println(c); } } 如果涉及int-sized或更小的任何expression式的结果总是int,即使两个字节的总和适合一个字节。 为什么当我们添加两个字节的最终字节? 没有编译器错误。

为什么Double.NaN == Double.NaN返回false?

我刚刚学习OCPJP的问题,我发现这个奇怪的代码: public static void main(String a[]) { System.out.println(Double.NaN==Double.NaN); System.out.println(Double.NaN!=Double.NaN); } 当我运行代码时,我得到: false true 当我们比较两个看起来相同的东西时,输出是false ? NaN是什么意思?

SCJP6正则expression式问题

我有以下例子的问题: import java.util.regex.*; class Regex2 { public static void main(String[] args) { Pattern p = Pattern.compile(args[0]); Matcher m = p.matcher(args[1]); boolean b = false; while(b = m.find()) { System.out.print(m.start() + m.group()); } } } 和命令行: java Regex2 "\d*" ab34ef 有人可以解释我,为什么结果是:01234456 正则expression式模式是d * – 它意味着第一个或更多,但是在args [1]中有更多的位置, 谢谢