小编Pra*_*gla的帖子

Java中的变量阴影

我对这个Java代码有些怀疑.它给出的输出是"毛茸茸的bray".我的问题:

  1. 为什么我得到这个输出?
  2. 如何在ZooKeeper类中访问String对象引用"name"?
  3. 如果它与变量阴影有关,那么哪个变量被遮蔽?

码:

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)

java

39
推荐指数
3
解决办法
6154
查看次数

初始化块的行为

我有我无法理解的代码,它是如何产生输出的.以下代码 -

码:

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

问题:

我对此代码的具体问题是 -

  1. Hawk类初始化时,它会导致Raptor类进行实例化,因此静态代码块首先运行.但是,在打印之前,静态代码应该是非静态代码pre …

java constructor initialization

8
推荐指数
1
解决办法
431
查看次数

新关键字在Java中的作用

我不确定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.

java

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

什么是Java合同

我正在为我的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)

题:

结果是什么?

  1. 输出为"true",MyStuff满足Object.equals()契约.
  2. 输出为"false",MyStuff履行Object.equals()契约.
  3. 输出为"true",MyStuff不符合Object.equals()契约.
  4. 输出为"false",MyStuff不符合Object.equals()契约.
  5. 编译失败.
  6. 运行时抛出异常.

答案是 -

3. The output is "true" and MyStuff does NOT fulfill the Object.equals() contract.

我理解输出是true什么,以及为什么输出,但我没有得到的是,它怎么没有满足Object.equals()合同,以及Java中的"契约"究竟是什么,如果我们不遵守它会怎么样?

java scjp

5
推荐指数
2
解决办法
4247
查看次数

如何引用具有冲突名称的特定类?

我无法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)

java oop

0
推荐指数
1
解决办法
76
查看次数

标签 统计

java ×5

constructor ×1

initialization ×1

oop ×1

scjp ×1