小编pai*_*dly的帖子

为什么最终变量不总是一个常量表达式?

在以下代码中:

final int a;
a=2;
byte b=a;   // error: possible loss of precision
Run Code Online (Sandbox Code Playgroud)

为什么我会收到此错误?是不是a最终变量编译时常量表达式,因此在赋值期间隐式缩小为字节?

换句话说,上面的代码不等同于:

final int a=2;
byte b=a;
Run Code Online (Sandbox Code Playgroud)

java expression constants compile-time-constant narrowing

44
推荐指数
2
解决办法
1804
查看次数

为什么编译包含静态嵌套类的类会创建一个名为"EnclosingClass $ 1"的新.class文件?

在以下代码中:

 class EnclosingClass
 { 
     public static class BiNode extends Sub.IBiLink { }
     private static class Sub
     {
         private static class IBiLink
         {  
         } 
     }
}
Run Code Online (Sandbox Code Playgroud)

在与其他.class文件一起编译时,我还看到一个名为"EnclosingClass $ 1.class"的文件.为什么这是自动创建的?这是怎么回事?

java javac nested-class .class-file

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

javac如何自动编译类的依赖关系

给定以下目录结构:

/top
   |--- wrk
          |--- pkg
                  |--- A.java
                  |--- B.java
Run Code Online (Sandbox Code Playgroud)

假设两个文件A.java,并B.java包含下面的代码,分别为:

// Filename: A.java
package pkg;
class A { B b; }

// Filename: B.java
package pkg;
class B {...}
Run Code Online (Sandbox Code Playgroud)

假设当前目录是 /top/wrk

为什么javac -cp . pkg/A.java即使我们还没有编译,命令也能成功运行B.java

此外,如果当前目录是/top/wrk/pkg命令javac A.java工作.怎么会这样?

java import javac package

14
推荐指数
1
解决办法
9921
查看次数

为什么我需要提供封闭的类对象而不是封闭的类对象

class OuterA {
    class InnerA {
    }
}
class SubclassC extends OuterA.InnerA { 
    SubclassC(OuterA outerRef) {
        outerRef.super(); 
    }
}
class XYZ {
    public static void main(String[] args) {
        new SubclassC(new OuterA());
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中

  1. 为什么我需要将OuterA对象引用传递给SubclassC.java文件的构造函数进行编译?
  2. 为什么InnerA不需要将对象引用传递给SubclassC构造函数?

java inheritance inner-classes

9
推荐指数
2
解决办法
371
查看次数

从初始化程序非法引用静态字段

我是java中的枚举新手,我很困惑为什么这段代码编译得很好

enum Scale5 {
GOOD(), BETTER(), BEST();
static  Scale5 s=GOOD;
}
Run Code Online (Sandbox Code Playgroud)

但是这段代码失败了:

enum Scale5 {
GOOD(), BETTER(), BEST();
Scale5 s=GOOD;
}
Run Code Online (Sandbox Code Playgroud)

我得到错误:从初始化程序非法引用静态字段.我不明白这个原因.我在枚举方面相对缺乏经验,所以请把它丢给我.谢谢了!

这里问的问题不能引用初始化程序中的静态枚举字段?与我所问的完全相反.在我的情况下,声明静态编译代码就好了.

java oop enums static class

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

如果只有一个线程在运行(main)并且调用了sleep(1000),那么线程是否会睡眠1秒或至少1秒?

在以下代码中:

 class Test {
      public static void main(String [] args) {
           printAll(args);
      }
      public static void printAll(String[] lines) {
           for(int i=0;i<lines.length;i++){
                System.out.println(lines[i]);
                Thread.currentThread().sleep(1000);
           }
      }
 }
Run Code Online (Sandbox Code Playgroud)

将数组行中的每个String输出:

  1. 恰好线之间暂停1秒?
  2. 至少线之间暂停1秒?

java multithreading thread-sleep

3
推荐指数
1
解决办法
952
查看次数

为什么最终字节作为switch语句中的一个案例不能编译?

byte a = 125;
final byte b = 2;
final Byte c = 3;
switch (a) {
case b: // works fine
    break;
case c: // Constant Expression required
    break;
}
Run Code Online (Sandbox Code Playgroud)

既然cfinal变量,它不是编译时常量,因此是有效的案例标签吗?

java constants switch-statement

3
推荐指数
1
解决办法
110
查看次数

如何在没有任何与之关联的实例的情况下调用构造函数?

请参阅以下代码:

class A {
    private int b;
    A(){
        b=5;
    }
}

class B extends A {

}

class C {
    public static void main(String args[]){
        B b=new B();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我创建B的实例时,B的默认构造函数调用A的构造函数,该构造函数将值赋给实例变量b.我的查询是因为实例变量与类的实例相关联,并且我们没有创建任何类A的实例,这个赋值(b = 5)究竟意味着什么?当没有A的实例时,对A的构造函数的调用是什么意思?

java oop inheritance constructor super

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

构造函数是否未绑定到类的实例?

当从子类调用super()时,它会在'this'对象上调用,即由语句new Subclass()创建的对象.在'this'对象上调用super().但'this'对象包含所有变量,超类的方法及其本身及其构造函数,但不包含超类构造函数.那么如何在'this'对象上调用super()?

请参阅附件中的图片,我试图解释我的理解.

注意:P是超类,Q是派生类在此输入图像描述

java polymorphism inheritance superclass

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