标签: scjp

Java标识符中的"连接字符"是什么?

我正在阅读SCJP,我对这一行有疑问:

标识符必须以字母,货币字符($)或连接字符(如下划线(_))开头.标识符不能以数字开头!

它声明有效的标识符名称可以以连接字符(如下划线)开头.我认为下划线是唯一有效的选择吗?还有其他什么连接字符

java unicode scjp identifier

206
推荐指数
4
解决办法
7万
查看次数

为什么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);
}
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,我得到了:

false
true
Run Code Online (Sandbox Code Playgroud)

false当我们比较两个看起来彼此相同的东西时,输出结果如何?什么NaN意思?

java floating-point scjp nan ocpjp

154
推荐指数
5
解决办法
6万
查看次数

id = 1 - id是原子吗?

从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 void main(String[] args) {
        Stone st = new Stone();
        new Thread(st).start();
        new Thread(st).start();
    }
}
Run Code Online (Sandbox Code Playgroud)

其中一个答案是:

输出可能是 P Q P Q

我把这个答案标记为正确.我的推理:

  1. 我们开始两个线程.
  2. 第一个进入run() …

java multithreading swap scjp atomic

74
推荐指数
1
解决办法
3135
查看次数

使用printf和格式进行格式化

在以下程序中

class ZiggyTest2 {

    public static void main(String[] args){     

        double x = 123.456;
        char c = 65;
        int i = 65;

        System.out.printf("%s",x);
        System.out.printf("%b",x);
        System.out.printf("%c",c);
        System.out.printf("%5.0f",x);
        System.out.printf("%d",i);
    }       
}
Run Code Online (Sandbox Code Playgroud)

输出是

123.456trueA  12365
Run Code Online (Sandbox Code Playgroud)

有人可以解释一个双值(即123.456)如何转换为布尔值(即.true)

我问的原因是因为我知道java不允许数字用于布尔值.例如,Java中不允许以下内容

if (5) {
 //do something
}
Run Code Online (Sandbox Code Playgroud)

谢谢

java formatting scjp ocpjp

33
推荐指数
2
解决办法
7万
查看次数

为什么我不能添加两个字节并得到一个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);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果涉及任何int-sized或者更小的表达式的结果总是为int,即使两个字节的总和适合一个字节.

当我们添加两个适合字节的最终字节时,为什么会这样? 没有编译器错误.

java int scjp variable-assignment ocpjp

27
推荐指数
2
解决办法
2万
查看次数

如何从匿名内部类调用特定的父构造函数?

好的,所以我知道匿名内部类要么隐式扩展父类,要么实现接口,因此需要调用超类的构造函数.但是,我不确定如何为匿名类创建构造函数(如果这是可能的)并且没有定义构造函数我不知道如何调用super()!这是我的练习代码:

public class AnonymousConstructor {
    public static void main(String[] args) {
        //I'm not sure how to explicitly call one of the arg super constructors
        MyBob my = new MyBob() {
            //I would like to do something like this super("String"); or      
            //super("String", "String");
        };

    }
}

class MyBob extends Thread {
    MyBob() {
        System.out.println("No arg constructor");
    }
    MyBob(String a) {
        System.out.println("Arg constructor");
    }
    MyBob(String a, String b) {
        System.out.println("2 arg constructor");
    }
    public void run() {
        System.out.println("Outer");
    }
}
Run Code Online (Sandbox Code Playgroud)

我担心的是,如果你试图从一个没有no-arg构造函数的类创建一个匿名类,那么代码将在编译时失败,因为没有办法将参数传递给superconstructor.这是一个有效的问题,如果是这样,有没有办法解决这个问题?

java constructor scjp inner-classes

26
推荐指数
2
解决办法
4756
查看次数

我们怎么能比较两个枚举值和'<'?

如果枚举实现了Comparable,为什么无法与<或>进行比较?

public class Dream    
{
    public static void main(String... args)
    {
        System.out.println(PinSize.BIG == PinSize.BIGGER); //false
        System.out.println(PinSize.BIG == PinSize.BIG); //true
        System.out.println(PinSize.BIG.equals(PinSize.BIGGER));//false
        System.out.println(PinSize.BIG > PinSize.BIGGERER);// compilation error
        //can't be compared
        System.out.println(PinSize.BIG.toString().equals(PinSize.BIGGER));// #4
        PinSize b = PinSize.BIG ;
        System.out.println( b instanceof Comparable);// true
    }  
}
enum PinSize { BIG, BIGGER, BIGGERER };
Run Code Online (Sandbox Code Playgroud)

java enums scjp ocpjp

25
推荐指数
2
解决办法
2万
查看次数

Java数组 - 为什么输出'1'?

为什么此示例中的输出为1

public static void main(String[] args){
 int[] a = { 1, 2, 3, 4 };   
 int[] b = { 2, 3, 1, 0 };   
 System.out.println( a [ (a = b)[3] ] );   
}
Run Code Online (Sandbox Code Playgroud)

我以为会是2.即,表达式评估为:

a[(a=b)[3]]
a[b[3]]    //because a is now pointing to b
a[0]   
Run Code Online (Sandbox Code Playgroud)

不应该[0]为2,因为a指向b

提前致谢.

java arrays scjp ocpjp

24
推荐指数
3
解决办法
1177
查看次数

Java char到字节转换

我一直在测试char铸件,我经历了这个:

public class Test {
    public static void main(String a[]) {
        final byte b1 = 1;
        byte b2 = 1;
        char c = 2;

        c = b1; // 1- Working fine
        c = b2; // 2 -Compilation error
    }
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么当我在字节中添加最后一个时它在1中正常工作?

java scjp

24
推荐指数
2
解决办法
987
查看次数

使用Serializable而不是写入和读取对象到/从文件

在哪些情况下,使用实现可序列化的除了写入和读取对象到文件之外是一个很好的编码实践.在一个项目中,我经历了代码.使用implements serializable的类,即使在该类/项目中没有任何写入/读取对象到/从文件?

java io scjp serializable

24
推荐指数
4
解决办法
1128
查看次数