我正在阅读SCJP,我对这一行有疑问:
标识符必须以字母,货币字符($)或连接字符(如下划线(_))开头.标识符不能以数字开头!
它声明有效的标识符名称可以以连接字符(如下划线)开头.我认为下划线是唯一有效的选择吗?还有其他什么连接字符?
我只是在研究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意思?
从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
我把这个答案标记为正确.我的推理:
run() …在以下程序中
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)
谢谢
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,即使两个字节的总和适合一个字节.
当我们添加两个适合字节的最终字节时,为什么会这样? 没有编译器错误.
好的,所以我知道匿名内部类要么隐式扩展父类,要么实现接口,因此需要调用超类的构造函数.但是,我不确定如何为匿名类创建构造函数(如果这是可能的)并且没有定义构造函数我不知道如何调用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.这是一个有效的问题,如果是这样,有没有办法解决这个问题?
如果枚举实现了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) 为什么此示例中的输出为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?
提前致谢.
我一直在测试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中正常工作?
在哪些情况下,使用实现可序列化的除了写入和读取对象到文件之外是一个很好的编码实践.在一个项目中,我经历了代码.使用implements serializable的类,即使在该类/项目中没有任何写入/读取对象到/从文件?
java ×10
scjp ×10
ocpjp ×5
arrays ×1
atomic ×1
constructor ×1
enums ×1
formatting ×1
identifier ×1
int ×1
io ×1
nan ×1
serializable ×1
swap ×1
unicode ×1