小编use*_*844的帖子

来自Java中静态上下文的模糊调用

main方法尝试访问var,但会导致调用模糊.为什么?无论如何,无法从静态上下文访问(可见?)Base1中的实例变量var.

  class Base1 {
      int var;
  }

  interface Base2 {
      public static final int var = 0;
  }

  class Test extends Base1 implements Base2 { 
      public static void main(String args[]) {
          System.out.println("var:" + var); 
      }
  }
Run Code Online (Sandbox Code Playgroud)

java static non-static ambiguous

17
推荐指数
1
解决办法
767
查看次数

Java 7钻石操作符和派生类的初始化

class A {}

class B extends A {}

class Holder<T> {

    T object;

    Holder(T object) {
        this.object = object;
    }
}
Run Code Online (Sandbox Code Playgroud)

有一个Holder类来保存一些使用泛型创建的对象.在main()中,当使用菱形运算符初始化时,它不会编译(Java 7),派生类传递给Holder的构造函数(需要A /找到B):

public static void main(String[] args) {    
    Holder<A> holder = new Holder<>(new B());        
}
Run Code Online (Sandbox Code Playgroud)

但是,如果在右侧部分指定了基本类型,它将编译并运行:

public static void main(String[] args) {
    Holder<A> holder = new Holder<A>(new B());
}
Run Code Online (Sandbox Code Playgroud)

为什么?钻石操作员是否使用与左侧相同的类型参数定义赋值的右侧部分?

java diamond-operator

6
推荐指数
1
解决办法
9392
查看次数

Java数据竞争示例使用计数器

下面是一个简单的示例,该方法不使用同步并导致数据竞争及其"改进"版本没有此问题

class Counter {
    public static long count = 0;
}

class UseCounter implements Runnable {    
    public static void increment() {
        Counter.count++;
        System.out.print(Counter.count + " ");
    }    
    public void run() {
        increment();
        increment();
        increment();
    }    
}

class SynchronizedUseCounter implements Runnable {    
    public static synchronized void increment() {
        Counter.count++;
        System.out.print(Counter.count + " ");
    }    
    public void run() {
        increment();
        increment();
        increment();
    }
}

public class DataRaces {
    public static void main(String[] args) {
        UseCounter c = new UseCounter();
        Thread t1 = …
Run Code Online (Sandbox Code Playgroud)

java multithreading race-condition

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