我对这个Java代码有些怀疑.它给出的输出是"毛茸茸的bray".我的问题:
class Mammal {
String name = "furry ";
String makeNoise() { return "generic noise"; }
}
class Zebra extends Mammal {
String name = "stripes ";
String makeNoise() { return "bray"; }
}
public class ZooKeeper {
public static void main(String[] args) { new ZooKeeper().go(); }
void go() {
Mammal m = new Zebra();
System.out.println(m.name + m.makeNoise());
//Output comes as "furry bray". Please explain this.
//And how can we access the name variable, the one …Run Code Online (Sandbox Code Playgroud) 我有我无法理解的代码,它是如何产生输出的.以下代码 -
class Bird {
{ System.out.print("b1 "); }
public Bird() { System.out.print("b2 "); }
}
class Raptor extends Bird {
static { System.out.print("r1 "); }
public Raptor() { System.out.print("r2 "); }
{ System.out.print("r3 "); }
static { System.out.print("r4 "); }
}
class Hawk extends Raptor {
public static void main(String[] args) {
System.out.print("pre ");
new Hawk();
System.out.println("hawk ");
}
}
Run Code Online (Sandbox Code Playgroud)
r1 r4 pre b1 b2 r3 r2 hawk
我对此代码的具体问题是 -
Hawk类初始化时,它会导致Raptor类进行实例化,因此静态代码块首先运行.但是,在打印之前,静态代码应该是非静态代码pre …我不确定new关键字在Java中的行为.是否可以确保每次使用new关键字时,都会在堆上创建一个新的Object?
当我在学习以下示例时,我对此产生了怀疑
class Mixer {
Mixer() { }
Mixer(Mixer m) { m1 = m; }
Mixer m1;
public static void main(String[] args) {
Mixer m2 = new Mixer();
Mixer m3 = new Mixer(m2); // Does it create any new mixer object?
m3.go();
Mixer m4 = m3.m1; m4.go();
Mixer m5 = m2.m1; m5.go();
}
void go() { System.out.print("hi "); }
}
Run Code Online (Sandbox Code Playgroud)
该行Mixer m3 = new Mixer(m2);调用一个不创建任何新对象的构造函数.那么,是不是没有创建新对象?
另外,哪个变量指的是程序末尾的哪个对象,即直到我们得到NullPointerExcetion变量m5.
我正在为我的OCA准备解决一些问题.我在Oracle的网站上发现了这个问题,列出了考试的示例问题.
public class MyStuff {
MyStuff(String n) { name = n; }
String name;
public static void main(String[] args) {
MyStuff m1 = new MyStuff("guitar");
MyStuff m2 = new MyStuff("tv");
System.out.println(m2.equals(m1));
}
public boolean equals(Object o) {
MyStuff m = (MyStuff)o;
if(m.name != null) return true;
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
结果是什么?
答案是 -
3. The output is "true" and MyStuff does NOT fulfill the Object.equals() contract.
我理解输出是true什么,以及为什么输出,但我没有得到的是,它怎么没有满足Object.equals()合同,以及Java中的"契约"究竟是什么,如果我们不遵守它会怎么样?
我无法java.awt.Rectangle在以下代码中创建对象.但是,我仍然可以创建Rectangle对象...请解释为什么会这样?
package examples;
import java.awt.*;
public class Rectangle {
public static void main(String[] args) {
java.awt.Rectangle rect = new Rectangle();
System.out.println(rect.toString());
}
}
Run Code Online (Sandbox Code Playgroud)